(精选)单片机原理与应用-KFIL C项目教程(西电版)项目六 99 s倒计时课件.ppt

(精选)单片机原理与应用-KFIL C项目教程(西电版)项目六 99 s倒计时课件.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演示文稿演讲PPT学习教学课件医学文件教学培训课件

6.3.3 程序调试   1. 实验板电路分析   参照项目三图3-15所示HOT-51实验板动态显示电路。注意:实验板上是共阴型数码管,P0为字段口,P2为字位口,8个数码管从左至右的位码依次是0~7,晶振为11.0592 MHz。   2. 定时/计数器的初始化   一般在主函数开始对定时/计数器进行初始化,步骤如下:   (1) 对TMOD赋值,确定T0和T1的启动方式、功能、工作方式。   (2) 计算初值,并将其写入TH0、TL0或TH1、TL1。   (3) 中断方式时,对IE赋值开中断;查询方式时,不需开中断。   (4) 置位TR0或TR1,启动定时/计数器。   3. 定时/计数器应用举例   例1 制药厂装瓶生产线上,每瓶装100个药片,用51单片机实现控制要求,试编写初始化程序。   解:(1) 题目分析。由题意可知,在统计药片的个数时要用到定时/计数器的计数功能,计数值为100,用T1的方式2实现,采用中断方式。   (2) 初始化程序如下:     TMOD=0x60; //设置T1为软启动、计数、方式2     TH1=TL1=256-100;//装初值,TL1 用于计数、TH1存放初值     ET1=1;   //定时/计数器T1开中断     EA=1;   //CPU开中断,也可用字节寻址IE=0x88;代替这两条开中断指令     TR1=1;   //启动T1   例2 某控制系统需定时20 ms,晶振为12 MHz,试初始化。   解:(1) 题目分析。晶振为12 MHz时,定时20 ms需要的计数值为20000 μs?×?12 MHz /12?=?20000次,可用T0的方式1实现,采用中断方式。   (2) 初始化程序如下:     TMOD=0x01; //设置T0为软启动、定时、方式1     TH0=(65536-20000)/256;//初值高8位送TH0     TL0=(65536-20000)%256;//初值低8位送TL0     ET0=1; //定时/计数器T0开中断     EA=1; //CPU开中断     TR0=1; //启动T0   例3 设某单片机系统的晶振为12 MHz,P2口上接有8个发光二极管,低电平点亮,利用定时/计数器T0工作在方式1,使P2.0所接发光管LED0以200 ms亮灭闪烁。   解:(1) 硬件设计。参考项目一相关内容,硬件电路如图6-5所示。   (2) 软件设计。定时200 ms有两种方法:一是用延时函数;二是用定时/计数器。在没有讲定时/计数器之前,与定时有关的定时功能都是用延时函数来实现的,CPU执行延时函数时,只能长时间无意义地等待定时时间的到来,降低了CPU的利用率。用定时/计数器实现定时,CPU只要对其初始化并启动后,定时工作就交由定时/计数器来独立完成,而CPU就可以执行其他的任务了,从而完成较为复杂的控制要求。 图6-5 定时/计数器例3电路图   定时200 ms时,需要的计数值=200000 μs×12 MHz/12=200000次65536,T0本身并不能实现200 ms的定时,考虑到200000=50000×4,即200 ms=50 ms×4,用T0实现50000次计数即定时50 ms,当T0溢出4次时,就可实现200 ms定时,为此定义变量t0_num(初值4)统计溢出次数,T0每溢出一次,t0_num就减1,当t0_num减至0时,溢出4次。   采用中断方式时,软件包含主函数main()与T0中断服务函数time0()。   定时/计数器T0的中断号为1,定义中断服务函数时一定要写正确。   将判断200 ms是否到,以及200 ms到了之后控制灯闪烁安排在time0()中;main()只需完成对T0的初始化,然后就无事可做,等待T0申请中断,这样安排的好处是main()与time0()之间无需传递信息,适用于初学者。相关流程图如图6-6所示。 图6-6 定时/计数器例3流程图   (3) 源程序。     #include reg51.h     #define uchar unsigned char     #define uint unsigned int     /*必要的全局变量定义*/     sbit LED0=P2^0; //定义发光二极管LED0     uchar t0_ num=4; //定义变量t0_ num统计T0的溢出次数 /*主函数*/ main() { TMOD=0x01; //设置T0软启动、定时50 ms、方式l TH0=(65536-50000)/256; //定时50 m

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档