51单片机定时器中断程序怎么办?

 我来答
M爱人627
高粉答主

推荐于2019-10-13 · 关注我不会让你失望
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:4.2万
展开全部

再次重新启动。

  • 用C语言实现的,先要定义好定时器的初值,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期,机器周期=12/n(n指晶振频率),假设你要定时的时间为M,那么定时的初值为:M/机器周期=初值;

TH0=(65536-初值)%256;

TL0=(65536-初值)/256;

  • 将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,例如用12M晶振做1ms定时计算如下:

机器周期=12/12*10^6=1us(微秒)

定时初值=(1*10^-3)/(1*10^-6)=1000;

所以:TH0=(65536-1000)%256;

TL0=(65536-1000)/256;

  • 将65536-1000=64536化为16进制为:0xFC18,TH0=0xFC,TL0=0X18;

  • 定好初值后要延迟一秒就定一个延时参数,这里使用1000就行了(定时为1ms)中断程序为:timer0() interrupt 1 // 1ms延时(12.0MHz)

阿迪阿迪white
2017-12-31 · TA获得超过6991个赞
知道小有建树答主
回答量:55
采纳率:100%
帮助的人:8709
展开全部

代码:

1 #include <reg52.h> 

2 #include <intrins.h> 

3 typedef unsigned char uchar; 

4 sbit LED = P1 ^ 0; 

5 uchar count = 0; 

6 void Interrupt() interrupt 1

7 { 

8     TH0 = (65536 - 46080) / 256; //触发中断时重新装填计时

9     TL0 = (65536 - 46080) % 256;

10     if (count == 20)

11     {

12         LED = ~LED;

13         count = 0;

14     }

15     else ++count;

16 }

17 void main(void)

18 {

19     LED = 0xff; //初始化LED

20     TMOD = 0x01; //初始化TMOD,定时器0,方式1

21     TH0 = (65536 - 46080) / 256; //装填计数

22     TL0 = (65536 - 46080) % 256;

23     EA = 1; //开放所有中断

24     ET0 = 1; //开放定时器0中断控制位

25     TR0 = 1; //定时器0开始计时

26     while(1)

27     {

28         _nop_();

29     }

30 }

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式