




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
51单片机的定时器_计数器的C51编程相关知识点:1、单片机的定时器/计数器,实质是按一定时间间隔、自动在系统后台进行计数的。2、当被设定工作在定时器方式时,自动计数的间隔是机器周期(12个晶振振荡周期),即计数频率是晶振振荡频率的1/12;3、当定时器被启动时,系统自动在后台,从初始值开始进行计数,计数到某个终点值时(方式1时是65535),产生溢出中断,自动去运行定时中断服务程序;注意,整个计数、溢出后去执行中断服务程序,都是单片机系统在后台自动完成的,不需要人工干预!4、定时器的定时时间,应该是(终点值-初始值)x机器周期。对于工作在方式1和12MHz时钟的单片机,最大的计时时间是(65535-0)x1uS=65.535ms。这个时间也是一般的51单片机定时器能够定时的最大定时时间,如果需要更长的定时时间,则一般可累加多定时几次得到,比如需要1秒的定时时间,则可让系统定时50ms,循环20次定时就可以得到1s的定时时间。5、定时器定时得到的时间,由于是系统后台自动进行计数得到的,不受主程序中运行其他程序的影响,所以相当精确;6、使用定时器,必须先用TMOD寄存器设定T0/T1的工作方式,一般设定在方式1的情况比较多,所以可以这样设定:TMOD=0x01(仅设T0为方式1,即16位)、TMOD=0x10(仅设T1为方式1,即16位)、TMOD=0x11(设T0和T1为方式1,即都为16位)。7、使用定时器,必须根据需要的定时时间,装载相应的初始值,而且在中断服务程序中,很多情况下得重新装载初始值,否则系统会从零开始计数而引起定时失败;8、要使用定时器前,还必须打开总中断和相应的定时中断,并启动之:EA=1(开总中断)、ET0=1(开定时器0中断)、TR0=1(启动定时器0)、ET1=1(开定时器1中断)、TR1=1(启动定时器1);9、注意中断服务程序尽可能短小精干,不要让它完成太多任务,尤其尽量避免出现长延时,以提高系统对其他事件的响应灵敏度./定时器基本例程-1(未使用定时器,一个灯每隔500ms亮灭一次)/这是个特意安排的例程,以便与下面的例程2进行对比#include sbit led=P27;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()led=1; /上电初始化,led灯不亮while(1) led=!led; delay_ms(500); /=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y; for(x=xms;x0;x-) for(y=130;y0;y-);/-/定时器基本例程-2(使用定时器,一个灯每隔500ms亮灭一次)#include sbit led=P27;unsigned char num;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()led=1; /上电初始化,led灯不亮TMOD=0x01; /设定定时器0为工作方式1TH0=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; /EA=1; /开总中断ET0=1; /开定时器0中断TR0=1;/启动定时器0while(1) delay_ms(8000); /=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y; for(x=xms;x0;x-) for(y=130;y0;y-);/- void led_flash() interrupt 1 /使用了定时中断0的led闪烁子函数 TH0=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; /num+;if(num=10)num=0; led=!led;/定时器基本例程-3/(使用定时器T1,单片机整个口接的8个灯每隔500ms亮灭一次)#include #define led_port P0 /宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()led_port=0xff; /上电初始化,所有led灯不亮TMOD=0x10; /设定定时器1为工作方式1(16位方式)TH1=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; /EA=1; /开总中断ET1=1; /开定时器1中断TR1=1;/启动定时器1while(1) delay_ms(8000); /这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心” /=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y; for(x=xms;x0;x-) for(y=130;y0;y-);/- void led_flash() interrupt 3 /使用了定时中断1的8灯闪烁子函数 TH1=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; /num+; /计数if(num=10) /计够10次,时间就是10x50ms=500msnum=0; /清零,以便进行下一次500ms的10次计数 led_port=led_port;/整个口接的led灯亮灭状态翻转/-/定时器基本例程-4/(同时使用定时器T0和定时器T1,单片机某个口的灯和某个口接的8个灯每隔500ms亮灭一次)#include sbit led=P27;#define led_port P0 /宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num_0,num_1;void delay_ms(unsigned int xms); /ms级延时子程序/=void main()led=1; /上电初始化,led灯不亮led_port=0xff; /上电初始化,该口所有led灯不亮TMOD=0x11; /设定定时器0和定时器1都为工作方式1(16位方式)TH0=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; /TH1=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; /EA=1; /开总中断ET0=1; /开定时器0中断TR0=1; /启动定时器0ET1=1; /开定时器1中断TR1=1;/启动定时器1while(1) delay_ms(8000); /这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心” /=void delay_ms(unsigned int xms) /ms级延时子程序 unsigned int x,y; for(x=xms;x0;x-) for(y=130;y0;y-);/-void led_flash() interrupt 1 /使用了定时中断0的led闪烁子函数 TH0=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; /num_0+; /计数if(num_0=10) /计够10次,时间就是10x50ms=500msnum_0=0; /清零,以便进行下一次500ms的10次计数 led=!led; /led灯亮灭状态翻转/- void led_all_flash() interrupt 3 /使用了定时中断1的8灯闪烁子函数 TH1=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; /num_1+; /计数if(num_1=10) /计够10次,时间就是10x50ms=500msnum_1=0; /清零,以便进行下一次500ms的10次计数 led_port=led_port;/整个口接的led灯亮灭状态翻转/-/定时器基本例程-5/设定定时器T0工作在方式1的计数应用状态,/单片机T0口(P3.4)接一个按键充当外部脉冲源,/系统对进来的脉冲(每按一次键得一脉冲)进行计数,/计数的结果用接在单片机P0口的8个LED灯表示出来/(大家也可以改成用1602LCD来显示,这样更直观)/广西民大物电学院 李映超 2010年4月14日#include #define led_port P0 /宏定义,具体的端口尽量不要出现在主函数和主函数中/=void main()TMOD=0x05; /设定定时器0为工作方式1、计数器TH0=0; /清零TL0=250; /TR0=1; /启动定时器0进行计数while(1) led_port=TL0; /将计数结果送去显示(用8个LED灯显示), /这里仅显示16位计数器的低8位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校洗漱台管理制度
- 学校网格化管理制度
- 学校陶艺社管理制度
- 学雷锋员工管理制度
- 安技处安全管理制度
- 安置点保洁管理制度
- 实训室使用管理制度
- 实验室活动管理制度
- 客服部内部管理制度
- 室内高尔夫管理制度
- 山东省威海市实验中学2025届七下英语期末达标检测试题含答案
- 2025年河北省中考麒麟卷地理(三)及答案
- 河南天一大联考2025年高二下学期期末学业质量监测英语试题
- 农药经营许可证培训考试题库及答案
- 财税法考试试题及答案
- 2025年青海省公务员录用考试《行测》真题及答案解析(记忆版)
- 2025入党考试试题及答案
- DB32/T 4593-2023研究型医院建设规范
- 基于轻量型CNN的无人机低空目标检测研究
- DB3415-T 82-2024 急流救援技术培训规范
- 智能制造系统-智能制造技术与未来
评论
0/150
提交评论