如何使用c语言书写定时器1中断服务程序的首部?

如何使用c语言书写定时器1中断服务程序的首部?,第1张

单片机定时中断C语言的写法步骤》由会员分享,可在线阅读,更多相关《51单片机定时中断C语言的写法步骤(2页珍藏版)》请在人人文库网上搜索。

1、51单片机定时中断C语言的写法步骤程序说明:51单片机定时器0工作于方式一,定时50ms中断一次晶振为12M#includevoid mainTOMD = 0X01;/配置定时器0工作于方式一TH1 = (65536-50000)/256/高八位装入初值TL1 = (65536-50000)%256/低八位装入初值ET0 = 1/开定时器0中断EA = 1/开总中断TR0 = 1/启动定时器0while(1);void Timer0_int() interrupt 1/重新装初值TH1 = (65536-50000)/256/高八位装入初值TL1 = (65536-50000)%256/低八位装入初值 /*/上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样#includevoid mainTOMD = 0X01;/配置定时器0工作于方式一TH1 = 0x3c/高八位装入初值TL1 = 0xb0/低八位装入初值IE = 0x82/开总中断并开定时器0中断TR0 = 1/启动定时器0while(1);void Timer0_int() interrupt 1/重新装初值TH1 = 0x3c/高八位装入初值TL1 = 0xb0/低八位装入初值。

代码如下:

//实现led灯一秒亮灭闪烁

void main()

{

  TMOD=0x01//设置定时器0为工作方式1(M1 M0为01)

  TH0=(65536-45872)/256//装初值11.0582晶振定时50ms数为45872

  TL0=(65536-45872)%256

  EA=1//开总中断

  ET0=1//开定时器0中断

  TR0=1//启动定时器0

  while(1)//程序停止在这里等待中断发生

}

void T0_time() interrupt 1

{

  TMOD=0x01//重装初值

  TH0=(65536-45872)/256

  num++;//num每加一次判断一次是否到20次

  if(num==20)//如果到了20次,说明1秒时间到

      {

          num=0//num清0重新计数

          led=~led1;

      }

}

扩展资料

定时器有两种工作模式,分别为计数模式和定时模式。对Px,y的输入脉冲进行计数为计数模式。定时模式,则是对MCU的主时钟经过12分频后计数。因为主时钟是相对稳定的,所以可以通过计数值推算出计数所经过的时间。

51单片机计数器的脉冲输入脚。主要的脉冲输入脚有Px,y, 也指对应T0的P3.4和对应T1的P3.5,主要用来检测片外来的脉冲。而引脚18和19则对应着晶振的输入脉冲,脉冲的频率和周期为

F = f/12 = 11.0592M/12 = 0.9216MHZ      T = 1/F = 1.085us

51计数器的计数值存放于特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C), T1(TL1-0x8B, TH1-0x8D)

定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。定时和计数的最终功能都是通过计数实现,若计数的事件源是周期固定的脉冲则可实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能全由一个部件实现。

void T0_init(void)

{

TMOD=0X10//定时器1

ET1=0//打开定时器1中断

EA=1//打开总中断

TR1=0//启动定时器1

TH1=0xxx//算吧

TL1=0xxx

}

void t0(void) interrupt 3

{

TF1=0

time_count++

TH1=0xxx//重装

TL1=0xxx

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11060844.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存