码迷,mamicode.com
首页 > 其他好文 > 详细

pic16f877单片机TMR0的使用

时间:2019-07-06 00:38:56      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:等于   class   height   需要   文件   清零   span   有一个   pre   

一、结构

1、是一个8位宽的由时钟信号上升沿触发的循环累加计数寄存器

2、有一个专门的外部触发信号输入端(T0CKI

3、是一个在文件寄存区域内统一编址的寄存器,地址为01H或101H,用户用软件的方式可直接读/写计数器的内容

4、具有一个软件可编程的8位预分频器

二、特点

1、使用内部触发信号,即指令周期作为时钟信号源时,模块TMR0工作于定时方式,触发方式为固定上升沿触发有效。计数器溢出时,相应的溢出中断标志T0IF自动置位,并可产生溢出中断

2、当外部时钟信号源时,TMR0工作于计数方式,触发方式可由程序设置为上升沿触发或者下降沿触发有效。在计数器溢出时,也可以产生溢出中断。

三、相关寄存器

1、定时器/计数器寄存器 TMR0,8位累加

2、选项寄存器 OPTION_REG

3、中断控制寄存器 INTCON

4、端口方向寄存器 TRAISA (RA4作为外部触发端口)

技术图片

四、使用方式

1、查询法

 1 void main()
 2 { 
 3     unsigned int num;
 4     /*
 5     预分频器1:256,赋值61 256-61=195
 6     */
 7     OPTION = 0x70;//使用预分频器
 8     TMR0 = 61//计数器/定时器寄存器赋值  约等于50ms
 9         
10     while(1)
11     {
12         if(1 == T0IF)//判断溢出
13         {
14             T0IF = 0//标志位清零
15             num++;
16             if(20 == num)//1s
17             {
18                 num = 0;
19                 //功能1
20                 {
21                     
22                 }
23             }
24         }
25     }
26 }

 

2、中断法

使用到的寄存器 INTCON

 1 void main()
 2 { 
 3     unsigned int num;
 4     /*
 5     预分频器1:256,赋值61 256-61=195
 6     */
 7     OPTION = 0x70;//使用预分频器
 8     INTCON = 0xa0;//开总中断;开定时器中断
 9     TMR0 = 61//计数器/定时器寄存器赋值  约等于50ms
10         
11     while(1)
12     {
13         if(20 == num)
14             num = 0//计数清零
15         //功能1
16         {
17             
18         }
19     }
20 }
21 
22 void interrupt timer0()     //中断函数不需要调用
23 {
24     //注意进入中断T0IF已经置1
25     T0IF = 0//标志位清零
26     TMR0 = 6127     num++28 }

 

pic16f877单片机TMR0的使用

标签:等于   class   height   需要   文件   清零   span   有一个   pre   

原文地址:https://www.cnblogs.com/jnkdog/p/11141132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!