第05章 单片机定时计数器 习题解答-精品文档资料整理.doc

上传人:安*** 文档编号:28609848 上传时间:2022-07-28 格式:DOC 页数:15 大小:223KB
返回 下载 相关 举报
第05章 单片机定时计数器 习题解答-精品文档资料整理.doc_第1页
第1页 / 共15页
第05章 单片机定时计数器 习题解答-精品文档资料整理.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《第05章 单片机定时计数器 习题解答-精品文档资料整理.doc》由会员分享,可在线阅读,更多相关《第05章 单片机定时计数器 习题解答-精品文档资料整理.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第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单片机工作于定时状态时,计数脉冲来自 单片机内部的机器周期 。9. MC

2、S-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位计数器。TM

3、OD用来控制定时计数器的工作方式,位结构如下: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 0方式2具

4、有自动重装初值的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 =12M

5、Hz,则最长定时时间将缩短一半。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 AJMPMAIN ORG001BH AJMPPT1INT ORG0030HS

7、TART: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次,定时 1秒。答:电路

8、如图所示把“单片机系统”区域中的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次按SP1后,计时

9、归零选择定时工作方式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 SEC,#00H MO

10、V 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 , 允许定时/计数器计数 MOV TH0

11、,#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,#00H DKN

12、: 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 AB MOV DPT

13、R,#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; unsigned ch

14、ar 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; break; case

15、 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节内容。答:全自动洗衣机定时控制P

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

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

18、LL 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中断子程序 CJNE

19、 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,#0BH ;B灯

20、灭,结束洗涤,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,#3CH ;定时器

21、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) /主函数 if(P20

22、=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 1 using 0

23、 /“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灯亮,开始甩干Co

24、untor=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题答案。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁