您的位置 首页 电路

AVR单片机比较匹配清零计数器形式的操作进程及进程

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

当计数器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%的方波信号。

操作过程如下:

二、使能大局中止: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计时变量清零

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/346207.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部