历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | AVR单片机比较匹配清零计数器模式的操作步骤及过程
2020-01-16 来源:elecfans
当计数器TCNT0的数值等于比较寄存器OCR0时计数器TCNT0自动清零。OCR0定义了计数器的最大(TOP)值,这个模式使得用户可以很容易地控制比较匹配输出的频率。T/C0的比较输出脚为OC0(PB3),PB口的第三脚,在此模式下可以在OC0上输出PWM控制外部设备。

例如:在OC0脚上输出20HZ的方波信号,方波的周期时间为T=1/20HZ=0.05秒=50ms,半个周期为25ms,系统采用8MHZ晶振,1024分频,时钟计数频率为8000000/1024=7812.5HZ,每个时钟脉冲时间为1/7812.5=0.128ms, 定时25ms的计数值为25ms/0.128ms=195,将195赋值为T/C0的比较寄存器OCR0,启动定时器后,TCNT0从0开始计数,当计数到195时,产生比较中断,在OC0脚上输出20HZ的占空比为50%的方波信号。
操作过程如下:
一、I/O管脚初始化:PB3(OC0)脚设为输出,DDRB|=(1《
二、使能全局中断:SREG=0X80;
三、T/C0比较中断允许:TIMSK|=(1《
四、TCCR0配置:分频系数为1024, TCCR0|=(1《
CTC模式设置, TCCR0|=(1《
比较匹配时OC0取反 TCCR0|=(1《
五、计数器付初值: TCNT0=0;
OCR0=195; //付初值后定时器开始工作
//函数功能:在PB3上输出20HZ的方波,并在PD7上产生周期2秒的周期信号。(代码来自轻松玩转avr单片机c语言cd)
#include
char Counter = 0; // 计数变量清零
void port_init()
{
DDRB|=(1《PORTB&=(0《DDRD|=(1《PORTD&=(0《}
void TImer0_init()
{
SREG = 0x80; //使能全局中断
TIMSK= (1《《 OCIE0); //T/C0比较匹配中断允许
TCCR0=(1《// T/C0工作于CTC模式,1024分频,比较匹配时,触发OC0取反
TCNT0 = 0; //定时初值设置,
OCR0 = 195; //比较匹配寄存器初值
}
void main()
{
port_init();
TImer0_init();
while(1);
}
#pragma interrupt_handler TImer0_COMP:20
void timer0_COMP(void)
{
TCNT0 = 0; //定时初值设置,
OCR0 = 195; //比较匹配寄存器初值
if(++Counter 》= 40) //定时时间到1S吗?定时中断溢出40次为1S
{
PORTD^=(1《Counter = 0; //1S计时变量清零
}
}
上一篇:AVR单片机对外部RAM的扩展
史海拾趣
|
赛灵思公司(Xilinx)今天宣布获得汽车行业质量标准ISO/TS 16949认证。ISO/TS 16949标准使赛灵思公司能够为整个汽车供应链提供质量和可靠性最高的电子元器件。赛灵思公司在此之前已经满足了其它世界级质量标准的严格要求,包括ISO 9 ...… 查看全部问答> |
|
所有代码均在Keil C51 7.0以上版本编译通过。只需要能够运行Windows 98 以上版本的操作系统、并能够安装Keil C51 7.0以上版本的软件即可。… 查看全部问答> |
|
1、阅读了一下i.MX51 ARM Cortex A8的datasheet,对于IOMUX还是不清楚, 2、还有一些缩写如:PAD、ALTn(n=0, 1, 2...)等等很多,配置一个引脚做很多工作。 3、感觉freescale的比较难理解,以前做三星的一看寄存器就知道是干什么的。 ...… 查看全部问答> |
|
定制系统时加入了微软拼音中文输入法,结果运行时,只出声母,不出韵母,打不出中文来,请问有人遇到过没,怎么解决? 1、设置了环境变量SET LOCALE=0804; 2.在platform settings中选择了中文(中国),英文(美国),默认语言设为中文; 3.在P ...… 查看全部问答> |
|
不知道大家对于调试的看法怎么样。一般你在调试的时候是release还是debug的。我每次都基本上时release的。因为是经理教的。只有在调试一些流层性,我们不知道架构的东西我才用debug。反正基本上不用。。用过几次也很懊恼。。点个屏漫天的打印信息。 ...… 查看全部问答> |
|
求助:料仓里的白石灰粉,当放料后,形成如图(四周高,中间低的料位情况)。 这时候测量仪表无法准确测了料位高度。 求助解决方法:如何能让料仓里的料位处于相对水平状态;或者采用什么样的仪表才能够做到精确测量?… 查看全部问答> |




