hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 979|回复: 1

哪位高手哪位高手帮我看一下这个程序,用定时器0的CTC模式产生方波,波形从PB3口输出

[复制链接]

484

主题

491

帖子

1493

积分

大司空

Rank: 5Rank: 5

积分
1493
发表于 2024-5-14 07:53:48 | 显示全部楼层 |阅读模式
哪位高手哪位高手帮我看一下这个程序,用定时器0的CTC模式产生方波,波形从PB3口输出,频率可以任意只要能出来波形就行
#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA  = 0x00;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00; //m103 output only
DDRC  = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}
//TIMER0 initialize - prescale:64
// WGM: CTC
// desired value: 20KHz
// actual value: 19.231KHz (-4.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x00; //set count
OCR0  = 0xFD;  //set compare
TCCR0 = 0x1B; //start timer
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GICR  = 0x00;
TIMSK = 0x02; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//
void main(void)
{
init_devices();
PORTB=0x00;
DDRB=0xff;
while(1)
{};
//insert your functional code here...
}
回复

使用道具 举报

0

主题

177

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2024-5-14 07:54:32 | 显示全部楼层
//在timer0中断处理子函数中进行处理
void timer0_int(void)
{
TCCR0 = 0x1B;
//加入以下语句
if((PINB&(1<<3)) == (1<<3))
   PORTB &=~ (1<<3);
else
   PORTB |= (1<<3);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2025-1-5 11:40 , Processed in 0.062325 second(s), 21 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表