ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:73.69KB ,
资源ID:25378531      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25378531.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第05章单片机定时计数器习题集解答.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第05章单片机定时计数器习题集解答.docx

1、第05章单片机定时计数器习题集解答第05章 单片机定时计数器 习题解答一、填空题1.MCS-51单片机中有2 个16 位的定时器/计数器。2.定时器/计数器T0可以工作于方式0、1、2、3。 3.方式0为 13 位定时器/计数器。4.若系统晶振频率为12MHz,则T0工作于定时方式1时最多可以定时65536s。 5.欲对300个外部事件计数,可以选用定时器/计数器T1的模式0 或模式 1 。 6.TMOD中的M1M0= 11时,定时器工作于方式 3 。7.若系统晶振频率为6MHz,则定时器可以实现的最小定时时间为 2 s。8.MCS-51单片机工作于定时状态时,计数脉冲来自 单片机内部的机器周

2、期 。9.MCS-51单片机工作于计数状态时,计数脉冲来自 单片机外部事件 。10.当GATE=0时, 则当软件控制位TR01时 启动T0开始工作。二、简答题1.定时器/计数器T0和T1各有几种工作方式?简述每种工作方式的特点。如何控制定时器/计数器的工作方式?答:T0可以工作于方式0,1,2,3;T1可以工作于方式0,1,2方式0:是13位定时/计数器,由TLX的低5位(TLX的高3位未用)和THX高8位组成。方式1:TLX和THX组成16位定时/计数器。方式2:方式2为自动重装初值的8位定时/计数器。方式3只适用于定时/计数器T0,当T0工作在方式3时,TH0和TL0被分为两个独立的8位计

3、数器。TMOD用来控制定时计数器的工作方式,位结构如下:D7D6D5D4D3D2D1D0GATEM1M0GATAM1M0T1方式字段T0方式字段C/T:定时或计数功能选择位。1为计数方式, 0为定时方式。GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。GATE=0,软件控制位TR0(TR1)1启动定时/计数器开始计数。GATE=1,软件控制位TR0(TR1)1,INT0(INT1)引脚为高电平时启动定时/计数器开始计数。M1、M0:定时/计数器工作方式选择位,如下表所示。 M1 M0工作方式方式说明 0 0方式013位定时/计数器 0 1方式116位定时/计数器 1

4、0方式2具有自动重装初值的8位定时/计数器 1 1方式3T0为两个独立的8位计数器,T1为波特率发生器2.设MCS-51单片机的晶振频率fOSC=6MHz,分别讨论定时器/计数器0在各种工作方式下的最长定时时间。答:由fosc =6MHz可知,一个机器周期T=2us,由于是加1计数,所以最长定时应是计数初值最小时(即为0时)的定时时间。方式0:(2130)2us= 214us=16384us=16.384ms方式1:(2160)2us= 217us=131.072ms方式2、3:(280)2us= 29us=0.512ms当 fosc =6MHz,即T=2us时各种方式下的定时时间,若fosc

5、 =12MHz,则最长定时时间将缩短一半。3.编写程序3编写程序从P1.0 引脚输出频率为1KHz的方波。设晶振频率为6MHz。答:利用T1定时中断。解:fosc= 6MHz。1机器周期 =2 uS。1KHz方波周期 =1mS,半个方波周期=500uS。 500uS2uS =250若选择方式2 工作,计算初值:256250=6ORG 0000H AJMP MAIN ORG 001BH ;T1的中断矢量 LJMP T1INTMAIN: MOV TMOD,#20H MOV TH0, #6 MOV TL0, #6 SETB ET1 SETB EA SETB TR1 HERE: AJMP HERE ;

6、原地等待中断T1INT:CPL P1.0 ;中断服务:P1.0取非 RETI ;中断返回END4.利用定时器/计数器1定时中断控制1.编写程序用P1.7驱动LED发光二极管亮1秒灭1秒地闪烁,设时钟频率为12MHz。答:时钟频率为12MHz,1个机器周期1 us,1秒闪烁一次,0.5秒 P1.7求反1次。0.5S=500ms=500000 us,方式1最大计数65536,让T1工作于方式1,计数50000次中断一次,初值6553650000155363CB0H用R7记录中断次数,计满10个中断为500ms秒。ORG 0000H AJMP MAIN ORG 001BH AJMP PT1INT O

7、RG 0030HSTART:MOV R7,#00H MOV TMOD,#10H MOV TL1,#0B0H MOV TH1,#3CH SETB EA SETB ET1 SETB TR1HERE: SJMP HEREPT1INT: MOV TL1,#0B0H MOV TH1,#03CH INC R7 CJNE R7,#10, PEND MOV R7, #00H CPL P1.7PEND: RETI END5.利用MCS-51单片机定时器/计数器设计一个数字秒表。定时范围:00-99秒;两位LED数码管显示。设时钟频率为6MHz。基本原理:利用定时器方式2产生0.5毫秒时间基准,循环2000次,定

8、时 1秒。答:电路如图所示把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“数码显示模块”区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。把“单片机系统”区域中的P2.0/A8P2.7/A15端口用8芯排线连接到“数码显示模块”区域中的任一个ah端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,P2.7/A15对应着h。 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;开始时,显示“00”,第1次按下SP1后就开始计时。 第2次按SP1后,计时停止。 第3

9、次按SP1后,计时归零选择定时工作方式2;工作方式2就具有自动重装载功能,即自动加载计数初值,在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,由预置寄存器TH0以硬件方法自动给计数器TL0重新加载。汇编源程序 TCNTA EQU 30H ;时间计数TCNTB EQU 31H SEC EQU 32H KEYCNT EQU 33H ;按键计数SP1 BIT P3.5 ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV KEYCNT,#00H MOV SE

10、C,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,A MOV TMOD,#02H ; SETB ET0 SETB EA WT: JB SP1,WT ;直接寻址位为1转移(按键按下时SP1为0) LCALL DELY10MS JB SP1,WT ;接着SP1变为1 INC KEYCNT MOV A,KEYCNT CJNE A,#01H,KN1 SETB TR0 ;TR0置1,启动定时器T0 , 允许定时/计数器计

11、数 MOV TH0,#06H ;用于自动恢复定时初值 MOV TL0,#06H ;置T0定时初值250us MOV TCNTA,#00H MOV TCNTB,#00H LJMP DKN KN1: CJNE A,#02H,KN2 CLR TR0 LJMP DKN KN2: CJNE A,#03H,DKN ;可以不要 MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE ;可以不要 MOVC A,A+DPTR MOV P2,A MOV KEYCNT

12、,#00H DKN: JNB SP1,$ ;直接寻址为0转移 LJMP WT DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET ;子程序返回INT_T0: INC TCNTA MOV A,TCNTA CJNE A,#100,NEXT MOV TCNTA,#00H INC TCNTB MOV A,TCNTB CJNE A,#4,NEXT MOV TCNTB,#00H INC SEC MOV A,SEC CJNE A,#100,DONE MOV SEC,#00H DONE: MOV A,SEC MOV B,#10 DIV A

13、B MOV DPTR,#TABLE ;可以不要 MOVC A,A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE ;可以不要 MOVC A,A+DPTR MOV P2,A NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END C语言源程序 #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00; un

14、signed char second; unsigned char keycnt; unsigned int tcnt; void main(void) unsigned char i,j; TMOD=0x02; ET0=1; EA=1; second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; while(1) if(P3_5=0) for(i=20;i0;i-) for(j=248;j0;j-); if(P3_5=0) keycnt+; switch(keycnt) case 1: TH0=0x06; TL0=0x06; TR0=1; br

15、eak; case 2: TR0=0; break; case 3: keycnt=0; second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; break; while(P3_5=0); void t0(void) interrupt 1 using 0 tcnt+; if(tcnt=400) tcnt=0; second+; if(second=100) second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; 三、Proteus仿真1.在Proteus下,仿真实现5.4节内容。答:全自动

16、洗衣机定时控制Proteus仿真洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。设洗衣机有三段定时时间,分别为:进水阶段定时2秒,洗涤阶段定时4秒,甩干阶段定时2秒。并分别用三个LED发光二极管表示进水、洗涤、甩干三个环节的工作状态。其中如果发光二极管A亮,表示进水工作正在进行;发光二极管B亮,表示洗涤工作正在进行;发光二极管C亮,表示甩干工作正在进行。发光二极管熄灭时,说明相应的定时已到,工作停止。图5-7给出了Proteus仿真电路图。图5-6 全自动洗衣机定时控制PROTUES仿真电路图图5-6中,S表示洗衣机启动开关,开关按下洗衣机开始工作。首先是进水定时控制,表示

17、正在进水的LED发光二极管A点亮。当进水控制的定时时间到时,进水工作停止,发光二极管A灭灯;接着开始洗涤工作定时,发光二极管B点亮;洗涤工作结束后,开始甩干工作定时,发光二极管C点亮。当洗衣功能结束时,三个指示灯都熄灭,表示洗衣工作结束,并接通扬声器LS1鸣声提醒。汇编语言参考程序如下: ORG 0000H ;在0000H单元存放转移指令 LJMP MAIN ;转移到主程序ORG 000BH ;计数/定时器T0的中断入口地址LJMP Time0 ;转到中断子程序Time0ORG 0100H ;主程序从0100H开始MAIN: JB P2.0,MAIN ;判按键是否按下,为0即按下,顺序执行,否

18、则等待。 LACLL DISPLY ;有键按下,延时去抖动 JB P2.0,MAIN ;再判有键按下 MOV P1,#0EH ;确定键按下,A灯亮,开始放水定时 MOV R0,#00H ;R0放3个阶段的工作标志 MOV R1,#00H ;R1放定时器的中断计数 SETB EA ;开中断总开关 SETB ET0 ;开定时器T0的中断开关 MOV TMOD,#01H ;设定时器T0工作方式1 MOV TH0,#3CH ;定时50ms高8位初值 MOV TL0,#0B0H ;定时50ms低8位初值 SETB TR0 ;允许计数 SIMP $ ;循环等待END ;汇编结束Time0: ;定时器T0中

19、断子程序 CJNE R0,#00H,L1 ;R0的内容为标志,若R0=0,执行第1阶段定时(放水功能) INC R1 ;R1内容加1 CJNE R1,#40H,L4 ;若累计满40次,即计时满2s MOV P1,#0DH ;A灯灭,结束放水,B灯亮,开始洗涤 MOV R1,#00H ;R1内容清0,重新从0开始计数 INC R0 ;R0内容加1,准备第2阶段的定时 SJMP L4 ;转L4,送初值,中断返回L1: CJNE R0,#01H,L2 ;若R0=1,执行第2阶段定时(洗涤功能) INC R1 ;R1内容加1 CJNE R1,#80H,L4 ;若累计满80次,即计时满4s MOV P1

20、,#0BH ;B灯灭,结束洗涤,C灯亮,开始甩干 MOV R1,#00H ;R1内容清0,重新从0开始计数 INC R0 ;R0内容加1,准备第3阶段的定时SJMP L4 ;转L4,送初值,中断返回L2: CJNE R0,#02H,L3 ;若R0=2,执行第3阶段定时(甩干功能) INC R1 ;R1内容加1 CJNE R1,#40H,L4 ;若累计满40次,即计时满2sMOV R1,#00H ;将Countor清0,重新从0开始计数 INC R0 ;R0内容加1,准备第4阶段的工作L3: MOV P1,#07H ;灯全灭,洗衣机结束工作 CPL P3.7 ;扬声器提醒L4: MOV TH0,

21、#3CH ;定时器T 1的高8位重新赋初值 MOV TL0,#0B0H ; 定时器T1的低8位重新赋初值 RETI ;中断返回C语言参考程序如下:#include / 包含51单片机寄存器定义的头文件sbit P20=P20; /将P20位定义为P2.0引脚sbit P37=P37; /将P37位定义为P3.7引脚unsigned char Countor; /设置全局变量,储存定时器T1中断次数unsigned char f=0; /设置全局变量,作为区分不同阶段的定时void delay1() /延时函数 int q; for(q=0;q500;q+);void main(void) /主

22、函数 if(P20=0) /若P2.0=0,说明键按下,执行语句,否则一直等待。 delay1(); /有键按下,延时去抖动 if(P20=0) /再判有键按下 P1=0x0e; /A灯亮,开始放水定时 EA=1; /开总中断 ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1 TH0=(65536-46083)/256; /定时器T0的高8位赋初值,定时50ms TL0=(65536-46083)%256; /定时器T0的高8位赋初值 TR0=1; /启动定时器T0 while(1); /无限循环等待中断 void Time0(void) interrupt

23、1 using 0 /“interrupt”声明函数为中断服务函数if(f=0) / f为标志变量, 若f=0,执行第1阶段定时(放水功能) Countor+; /Countor加1 if(Countor=40) /若累计满40次,即计时满2s P1=0x0d; /A灯灭,结束放水,B灯亮,开始洗涤Countor=0; /将Countor清0,重新从0开始计数f+; /f加1,准备第2阶段的定时 if(f=1) /若f=1,执行第2阶段定时(洗涤功能)Countor+; /Countor加1 if(Countor=80) /若累计满80次,即计时满4S P1=0x0B; /B灯灭,结束洗涤,C

24、灯亮,开始甩干Countor=0; /将Countor清0,重新从0开始计数 f+; /f加1,准备第3阶段的定时 if(f=2) /若f=2,执行第3阶段定时(甩干功能) Countor+; /Countor加1 if(Countor=40) /若累计满60次,即计时满3S P1=0x07; /灯全灭,洗衣机结束工作Countor=0; /将Countor清0,重新从0开始计数; f+; / f加1,准备进入第4阶段。 if(f=3) /若f=3,执行进入第4阶段工作(扬声器提醒)P1=0x07; /灯全灭,洗衣机结束工作P37=P37; / 扬声器提醒Countor=0; /将Countor清0,重新从0开始计数; TH1=(65536-46083)/256; /定时器T1的高8位重新赋初值 TL1=(65536-46083)%256; /定时器T1的低8位重新赋初值2.在Proteus下,仿真实现简答题第5题内容。答:请参考第5题答案。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1