版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 本章内容本章内容p定时定时/计数器计数器 pC语言的函数语言的函数 第五章第五章 定时与中断系统定时与中断系统l8051片内有两个16位定时器计数器(简称定时器),如图12.1所示。它们实际上都是16位二进制加1计数器。每个定时器都可通过两个特殊功能寄存器TMOD和TCON,由软件设置为定 时工作方式或计数工作方式及其他灵活多样的可控功能方式。 GATEM1M0GATEM1M0T/CT/CM1 M0工作模式功 能 说 明00方式013位计数器01方式116位计数器10方式2自动再装入8位计数器11方式3定时器0:分成两个8位计数器;定时器1:停止计数TF1TR1TF0TR0TMODTCONT
2、imer1Timer0l定时器Ti方式0的13位计数器何种情况下,会产生溢出,并置位溢出标志位TFi,向CPU请求中断。当13位二进数加1,使其最高位向前进位时,就产生溢出。即13位二进制数11111111 11111B加1,则会溢出,变为00000000 00000B。l我们知道,对于13位计数器,若预置计数初值为11111111 11111B,只能计得脉冲信号的一个脉冲,即计数器加1,计数器就会溢出。按这样的思路,要使计数器计得脉冲信号的10个脉冲,即计数器加10,计数器计满溢出,那么应给计数器预置计数初值为何值?计数初值应为11111111 10110B,因为11111111 10110
3、B+1010B(10)=00000000 00000B。l要想计数器计得一定数量的计数值后,计数器计满溢出,就需把预置的计数初值设为计数值的补数。对于13位计数器,求计数值补数的方法就是先把十进制的计数值转换13位二进制数,在把其取反加1。例如计数值为10,则10转换成13位二进制数为00000000 01010B,取反为11111111 10101,再加1为11111111 10110B。l由于定时器Ti的计数器是由两个8位的特殊功能寄存器THi和TLi构成。而定时器Ti处于方式0下工作时,计数器只用到了其中13位,即THi的8位和TLi的低5位,而TLi的高3位弃之不用。计数值10的13位
4、计数初值11111111 10110B,高8位存放在THi中,低5位存放在TLi中。定时器Ti处于方式0下工作时,闲置的TLi的高3位可设为000B。所以综上所述,要想计数器计得脉冲信号的10个脉冲,即计数器加10,计数器计满溢出,应把THi设为FFH,TLi设为16H。l在定时器Ti处于方式1下工作时,计数器用到了全部16位来计数,由THi作为高8位和TLi作为低8位构成。若计数器要计的计数值还为10,那么计数器预置的计数初值为何值?我们知道,预置的计数初值就是计数值的补数,对于16位计数器,求计数值补数的方法就是先把十进制的计数值转换16位二进制数,在把其取反加1。10转换成16位二进制数
5、为00000000 00001010B,取反为11111111 11110101,再加1为11111111 11110110B。所以计数器预置的计数初值为FFF6H,即THi设为FFH,TLi设为F6H。l解:由图看出,加上12MHz晶振的振荡器12分频后的脉冲信号的周期为:l 由于计数器计得一个12分频后的脉冲,需的时间。故要定时,则计数器要计得1000个12分频后的脉冲,即计数初值要加计数值1000,并计满溢出。l现计算在工作方式0产生1ms的定时,预置的计数初值应为何值?l1000转换成13位二进制数为00011111 01000B( ),取反为11100000 10111,再加1为11
6、100000 11000B。于是预置的TH0初值为E0H,TL0初值为18H。例例1:利用:利用T0计数器的工作方式计数器的工作方式0产生产生1ms的定时,在的定时,在P1.0引脚引脚上输出周期为上输出周期为2ms的方波,如图所示。设单片机晶振频率的方波,如图所示。设单片机晶振频率f=12MHz。356789222222GATEM1M0GATEM1M0T/CT/CTF1TR1TF0TR0TMODTCON(TMOD)=00000000B=00H 例例2:在工作方式:在工作方式0下,定时器下,定时器T1引脚对用引脚对用T0计数器产生的计数器产生的P1.0引脚上周期为引脚上周期为2ms的方波,进行计
7、数,要求每计满的方波,进行计数,要求每计满5次,次,将将P1.1状态取反,在状态取反,在P1.1 上产生周期为上产生周期为20ms的方波。的方波。#include /包含头文件包含头文件reg51.hsbit P1_0=P10;/定义定义P1.0引脚位名称为引脚位名称为P1_0sbit P1_1=P11;/定义定义P1.1引脚位名称为引脚位名称为P1_1/T0中断服务子程序中断服务子程序void time_0() interrupt 1 /定时器定时器0溢出中断溢出中断/重装定时器重装定时器0计数初值计数初值TL0=0 x18;TH0=0 xE0;/方波电平反相方波电平反相P1_0=P1_0;
8、/T1中断服务子程序中断服务子程序void time_1() interrupt 3 /定时器定时器1溢出中断溢出中断/重装定时器重装定时器1计数初值计数初值 TL1=0 x1B;TH1=0 xFF; P1_1=P1_1; /方波电平反相方波电平反相void main()/主程序主程序;/设置设置T0为方式为方式0定时,定时,T1为方式为方式0计数计数TMOD=0 x40;/设置定时器设置定时器0计数初值计数初值TL0=0 x18;TH0=0 xE0;/设置定时器设置定时器1计数初值计数初值TL1=0 x1B;TH1=0 xFF;EA=1;ET0=1;ET1=1;/开中断开中断TR0=1; /
9、启动启动T0TR1=1; /启动启动T1while(1);例例3:在工作方式:在工作方式2下,定时下,定时器器T1引脚对用定时器引脚对用定时器T0器产器产生的生的P1.0引脚上周期为引脚上周期为2ms的方波,进行计数,要求每的方波,进行计数,要求每计满计满5次,将次,将P1.1状态取反,状态取反,在在P1.1 上产生周期为上产生周期为10ms的方波。的方波。解解 :P1.1的方波由的方波由T1(P3.5)引脚输入,每发生一次负跳变,计数器加引脚输入,每发生一次负跳变,计数器加1,每输入,每输入5个脉冲,计数器发生溢出中断,中断服务程序将个脉冲,计数器发生溢出中断,中断服务程序将P1.1取反一次
10、。取反一次。T1在方式在方式2下,对外部信号下,对外部信号T1计数,则工作方式寄存器计数,则工作方式寄存器TMOD设置为:(设置为:(TMOD)=01100000B=60H。T0做方式做方式0定时时,定时时,TMOD的低的低4位一般取位一般取0000B。 计算计算T1的计数初值:的计数初值: 由于要计的计数值为由于要计的计数值为5,5转换成二进制数为转换成二进制数为00000101B,取反为,取反为11111010B,再加再加1为为11111011B,于是,于是TL1的计数初值为的计数初值为11111011B (FBH),重装初值寄存),重装初值寄存器(器(TH1)=FBH。#include
11、/包含头文件包含头文件reg51.hsbit P1_0=P10;/定义定义P1.0引脚位名称为引脚位名称为P1_0sbit P1_1=P11;/定义定义P1.1引脚位名称为引脚位名称为P1_1void time_0() interrupt 1 /定时器定时器0溢出中断溢出中断/重装定时器重装定时器0计数初值计数初值 TL0=0 x18;TH0=0 xE0; P1_0=P1_0; /方波电平反相方波电平反相void time_1() interrupt 3 /定时器定时器1溢出中断溢出中断P1_1=P1_1; /方波电平反相方波电平反相void main()/主程序主程序/设置设置T0为方式为方
12、式0定时,定时,T1为方式为方式2计数计数TMOD=0 x60;/设置定时器设置定时器0计数初值,计数到计数初值,计数到1000就溢就溢出出TL0=0 x18;TH0=0 xE0;/设置定时器设置定时器1计数初值,计数到计数初值,计数到5就溢出就溢出TL1=0 xFB;TH1=0 xFB;EA=1;ET0=1;ET1=1;/开中断开中断TR0=1; /启动启动T0TR1=1; /启动启动T1while(1);定时器的初始值的计算定时器的初始值的计算对于不同的工作方式,计数器位数不同,故最大计数值对于不同的工作方式,计数器位数不同,故最大计数值M也不同:也不同: 方式方式0:M=213=8192
13、 方式方式1:M=216=65536 方式方式2:M=28=256 方式方式3:定时器定时器0分为分为2个个8位计数器,每个位计数器,每个M均为均为256。因为定时因为定时/计数器是作加计数器是作加1计数,并在计满溢出时产生中断,因此初计数,并在计满溢出时产生中断,因此初值值X的计算如下:的计算如下: X = M 计数值计数值 计算出来的结果计算出来的结果X转换为转换为16进制数进制数后分别写入后分别写入TL0(TL1)、)、TH0(TH1)。)。注意!注意!方式方式0时初始值写入时,对于时初始值写入时,对于TL不用的高不用的高3位应填入位应填入0!用用T1T1、工作方式、工作方式0 0实现实
14、现1 1秒延时函数,晶振频率为秒延时函数,晶振频率为12MHz12MHz。方式方式0 0采用采用1313位计数器,其最大定时时间为:位计数器,其最大定时时间为:819281921 1 s = s = 8.192ms8.192ms,因此,定时时间不可能象任务,因此,定时时间不可能象任务7 7中一样选择中一样选择50ms50ms,可选择定时时间为可选择定时时间为5ms5ms,再循环,再循环200200次。次。定时时间为定时时间为5ms5ms,则计数值为,则计数值为5ms/15ms/1 s =5000s =5000,T1T1的初值为:的初值为: X = M X = M 计数值计数值= 8192 =
15、8192 5000 = 3192 = C78H = 5000 = 3192 = C78H = 0110001111000B0110001111000B1313位计数器中位计数器中TL1TL1的高的高3 3位未用,填写位未用,填写0 0,TH1TH1占高占高8 8位,所位,所以,以,X X的实际填写值应为:的实际填写值应为:X = 01100011X = 0110001100000011000B = 6318H11000B = 6318H举 例1用用T1T1方式方式0 0实现实现1 1秒延时函数如下:秒延时函数如下: void delay1s()void delay1s() unsigned c
16、har i; unsigned char i; TMOD=0 x00; TMOD=0 x00; / / 置置T1T1为工作方式为工作方式0 0 for(i for(i=0;i200;i+) =0;i200;i+) / / 设置设置200200次循环次数次循环次数 TH1=0 x63;TH1=0 x63;/ / 设置定时器初值设置定时器初值 TL1=0 x18;TL1=0 x18; TR1=1; TR1=1; / / 启动启动T1T1 while(!TF1); / while(!TF1); / 查询计数是否溢出,即定时查询计数是否溢出,即定时5ms5ms时间到,时间到,TF1=1TF1=1 TF
17、1=0; TF1=0;/ 5ms/ 5ms定时时间到,将定时器溢出标志位定时时间到,将定时器溢出标志位TF1TF1清零清零 举 例1#include /#include /包含头文件包含头文件reg51.hreg51.hvoid delay1s()/ delay1svoid delay1s()/ delay1s延时函数延时函数 unsigned char i; unsigned char i; TMOD=0 x00; TMOD=0 x00; / / 置置T1T1为工作方式为工作方式0 0 for(i for(i=0;i200;i+) =0;i200;i+) / / 设置设置200200次循环次
18、数次循环次数 TH1=0 x63;TH1=0 x63;/ / 设置定时器初值设置定时器初值 TL1=0 x18;TL1=0 x18; TR1=1; TR1=1; / / 启动启动T1T1 while(!TF1); / while(!TF1); / 查询计数是否溢出,即定时查询计数是否溢出,即定时5ms5ms时间到,时间到,TF1=1TF1=1 TF1=0; TF1=0; / 5ms/ 5ms定时时间到,将定时器溢出标志位定时时间到,将定时器溢出标志位TF1TF1清零清零 void main()void main() unsigned char i,w unsigned char i,w; ;
19、TMOD=0 x00;/ TMOD=0 x00;/设置设置T1T1为方式为方式0 0 while(1) while(1) w=0 x01;/ w=0 x01;/显示码初值为显示码初值为01H01H for(i for(i=0,i8;i+)=0,i8;i+) P1=w;/w P1=w;/w取反后送取反后送P1P1口,点亮相应流水灯口,点亮相应流水灯 w=1;/w=1;/点亮灯的位置移动点亮灯的位置移动 delay1s();/delay1s();/调用调用delay1sdelay1s延时函数延时函数 用用T1T1、工作方式、工作方式2 2实现实现1 1秒延时,晶振频率为秒延时,晶振频率为12MHz
20、12MHz。因工作方式因工作方式2 2是是8 8位计数器,其最大定时时间为:位计数器,其最大定时时间为:2562561 1 s s = 256= 256 s s,为实现,为实现1 1秒延时,可选择定时时间为秒延时,可选择定时时间为250250 s s,再,再循环循环40004000次。定时时间选定后,可确定计数值为次。定时时间选定后,可确定计数值为250250,则,则T1T1的初值为:的初值为:X = M X = M 计数值计数值=256 =256 250 = 6 = 6H 250 = 6 = 6H。采用。采用T1T1方式方式2 2工作,因此,工作,因此,TMOD =0 x20TMOD =0
21、x20。举 例2用定时器工作方式用定时器工作方式2 2实现的实现的1 1秒延时函数如下:秒延时函数如下:void delay1s()void delay1s() unsigned int unsigned int i; i;/ i/ i取值范围为取值范围为0 040004000,因,因此不能定义成此不能定义成unsigned charunsigned char TMOD=0 x20; TMOD=0 x20; / / 设置设置T1T1为方式为方式2 2 TH1=6; TH1=6;/ / 设置定时器初值,设置定时器初值,放在放在forfor循环之外循环之外 TL1=6;TL1=6; for(i f
22、or(i=0;i4000;i+) =0;i4000;i+) / / 设置设置40004000次循环次数次循环次数 TR1=1;TR1=1; / / 启动启动T1T1 while(!TF1); / while(!TF1); / 查询计数是否溢出,即定时查询计数是否溢出,即定时250250 s s时间到,时间到,TF1=1TF1=1 TF1=0; TF1=0; / 250/ 250 s s定时时间到,定时时间到,将定时器溢出标志位将定时器溢出标志位TF1TF1清零清零 举 例2p在在C C语言程序中,子程序的作用是由函数来实现的,函数是语言程序中,子程序的作用是由函数来实现的,函数是C C语言的语
23、言的基本组成模块,一个基本组成模块,一个C C语言程序就是由若干个模块化的函数组成的。语言程序就是由若干个模块化的函数组成的。pC C程序都是由一个主函数程序都是由一个主函数main( )main( )和若干个子函数构成,有且只有一和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。其它函数可以有多个。C语言的函数 1.1.标准库函数标准库函数 标准库函数是由标准库函数是由C51C51的编译器提供的,用户不必定义这的编译器提供的,用户不必定义这些函数,可以直接调用。些函数,
24、可以直接调用。KEIL C51KEIL C51编译器提供了编译器提供了100100多个多个库函数供我们使用。常用的库函数供我们使用。常用的C51C51库函数包括一般库函数包括一般I/OI/O口函数、口函数、访问访问SFRSFR地址函数等,在地址函数等,在C51C51编译环境中,以头文件的形式编译环境中,以头文件的形式给出。给出。2.2.用户自定义函数用户自定义函数 用户自定义函数是用户根据需要自行编写的函数,它必用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。须先定义之后才能被调用。函数分类和定义 函数定义的一般形式是:函数定义的一般形式是:函数类型函数类型 函数名(形式参数表)函数名(形式参数表) 形式参数说明形式参数说明 局部变量定义局部变量定义函数体语句函数体语句 其中,其中,“函数类型函数类型”说明了自定义函数返回值的类型。说明了自定义函数返回值的类型。 “ “函数名函数名”是自定义函数的名字。是自定义函数的名字。 “ “形式参数表形式参数表”给出函数被调用时传递数据的形式参数,形式参数给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。的类型必须要加以说明。ANSI CANSI C标准允许在形式参数表中对形式参数标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参数函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年遂宁职业学院单招综合素质考试模拟测试卷附答案解析
- 2025年万博科技职业学院单招职业倾向性考试题库附答案解析
- 2025年朔州陶瓷职业技术学院单招职业倾向性考试题库附答案解析
- 2023年青海柴达木职业技术学院单招职业倾向性考试题库附答案解析
- 2025年三亚中瑞酒店管理职业学院单招职业适应性考试模拟测试卷附答案解析
- 2024年西安工商学院单招职业技能考试题库附答案解析
- 2023年湘西民族职业技术学院单招职业适应性考试模拟测试卷附答案解析
- 2024年苏州工艺美术职业技术学院单招职业适应性测试模拟测试卷附答案解析
- 2023年成都工业职业技术学院单招职业技能考试模拟测试卷附答案解析
- 2025年南京城市职业学院单招职业倾向性测试题库附答案解析
- 北师大版八年级数学上册全册同步练习
- 制造业数字化转型公共服务平台可行性研究报告
- 氢能与燃料电池技术 课件 5-燃料电池
- DG-TJ08-2011-2007 钢结构检测与鉴定技术规程
- 【课件】台湾的社区总体营造
- 重庆市两江新区2023-2024学年五年级上学期英语期末试卷
- BGO晶体、LYSO晶体、碲锌镉晶体项目可行性研究报告写作模板-备案审批
- 昆明理工大学《机器学习》2023-2024学年第一学期期末试卷
- 2023版国开电大本科《高级财务会计》在线形考(任务一至四)试题及答案
- 难治性类风湿关节炎的诊治进展
- 城镇职工医疗保险
评论
0/150
提交评论