打印

定时器怎么把时间分配的

[复制链接]
407|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liliang9554|  楼主 | 2019-1-23 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用定时/计数器T1产生定时时钟,
由P1口控制8个发光二极管,
使8个指示灯依次一个一个闪动,
闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。
设晶振频率为12MHz。
#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit P1_0=P1^0;           
uchar tt,a;
void main()      //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
a=0xfe;               
while(1);//等待中断产生
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==2)
{  
   tt=0;
   P1=a;
   a=_crol_(a,1);        
}
}
我所不理解的地方时  进入主程序需要时间,在主程序中到达启动定时器0也要时间,而启动后50ms,执行中断服务程序也要时间,究竟定时器怎么把时间分配的

相关帖子

沙发
午夜粪车| | 2019-1-23 11:52 | 只看该作者
你所说的那几个时间都是us级的,在流水灯里几ms都可以忽略更别说us了。

使用特权

评论回复
板凳
spark周| | 2019-1-23 11:55 | 只看该作者

定时器计数和主函数程序是同时(并行)执行的。只有当定时器计数溢出之后才获得cpu的控制权。
楼主可知道否?

使用特权

评论回复
地板
liliang9554|  楼主 | 2019-1-23 12:00 | 只看该作者
嗯。。。。我再思考一下吧

使用特权

评论回复
5
zhanghqi| | 2019-1-23 12:02 | 只看该作者

定时器模块和CPU是分开的,CPU可以通过设置相应的寄存器来对它进行配置,配置好后,定时器就按CPU说的去做,CPU呢这时候也不管它。

使用特权

评论回复
6
jiajs| | 2019-1-23 12:05 | 只看该作者

如果定时器产生中断,会将相应的中断标志位置位,CPU在每个指令周期的最后都要对标志寄存器进行检查。

使用特权

评论回复
7
wyjie| | 2019-1-23 12:09 | 只看该作者
然后,发现定时器有中断,就去执行中断服务,注意这时候计时器任然在运行,所以计时间隔不会因中断服务而改变。

使用特权

评论回复
8
jlyuan| | 2019-1-23 12:12 | 只看该作者
你可以在中断服务程序里面设置断点,然后单步执行,查看定时器的TAR,就会发现。

使用特权

评论回复
9
zhenykun| | 2019-1-23 12:15 | 只看该作者
定时器产生中断,会将相应的中断标志位置位,体现在状态寄存器里

使用特权

评论回复
10
spark周| | 2019-1-23 12:19 | 只看该作者
因为人的视觉是有反应速度的,这个即使分配开,人眼看上去也是一起的。

使用特权

评论回复
11
liliang9554|  楼主 | 2019-1-23 12:25 | 只看该作者
定时器也有优先级。
这个配置寄存器之后才能执行的吧。

使用特权

评论回复
12
zhaoxqi| | 2019-1-23 12:29 | 只看该作者
这个是采用定时中断进行的?

使用特权

评论回复
13
yszong| | 2019-1-23 12:33 | 只看该作者
在中断服务程序里面设置断点,然后单步执行,查看寄存器值的变化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

950

主题

11568

帖子

6

粉丝