新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 跟我学51单片机(二):单片机内部定时/计数器和中断系统

跟我学51单片机(二):单片机内部定时/计数器和中断系统

作者:时间:2013-02-07来源:网络收藏

  void timer0(void) interrupt 1 (13)

  {

  TH0=(65536-50000)/256; (14)

  TL0=(65536-50000)%256; (15)

  count++; (16)

  if(count==10) (17)

  {

  count=0; (18)

  led=!led; (19)

  }

  }

  1. 程序详细说明:

  (1)头文件包含。程序接下来调用的P0_0 就是该头文件中定义好的一个寄存器地址。在对单片机内部的寄存器操作之前,应申明其来处,有兴趣的读者可以看看AT89X52.h 文件中的内容。

  (2)宏定义led,便于直观理解也便于程序修改,将P0_0 口命名为led,这样在程序中就可以用led代替P0_0 口进行操作。

  (3)定义一个8 位的全局变量。

  (4)主函数入口。主函数不传递参数也不返回值。

  (5)设定定时器0 工作在模式1,为16 位的

  (6)定时器高8 位赋初值。对256 取整。

  (7)定时器低8 位赋初值。对256 取余。

  (8)开总中断。

  (9)开定时器0 中断。

  (10)定时器0 启动,开始计数。

  (11)设置开定时器0 中断为优先中断。

  (12)死循环,等待中断。

  (13)定时器0 中断服务函数入口。

  (14)定时器高8 位赋初值。对256 取整。

  (15)定时器低8 位赋初值。对256 取余。

  (16)对变量count 进行加1 操作。

  (17)如果count 增长到10。

  (18)count 变量清0。

  (19)led 输出取反。

  2. 程序流程图与实验现象

  程序流程如图2 所示。经编译下载程序到单片机内运行后,可以看到实验板上P0_0 口外接的LED 灯有规律的一亮一灭的闪烁见图3。亮灭的时间可以计算为10×50000×1.085μs=542.5ms。

  实际的时间要比这稍多几个ms,这是因为没有把条件判断和程序调用的指令时间算在内。在要求非常精确的场合,应当实际微调。

图2 主程序和中断服务函数流程图

图3 实验现象效果

  四、总结

  本讲主要介绍了51 单片机器和以及编写第一个简单的定时器实验程序。通过该讲,大家可以发现单片机内的定时器和并不难学,只要记住应用的相关操作步骤多进行几次实践就可以很熟练的掌握这些资源的用法。鉴于本讲的理论内容较多,希望读者多*时间记下或者熟悉。下一讲,将要介绍如果单片机串口通信并给出实例,敬请期待。

尘埃粒子计数器相关文章:尘埃粒子计数器原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭