单片微型计算机原理与接口技术 - 高锋版 - 课后答案全集 联系客服

发布时间 : 星期二 文章单片微型计算机原理与接口技术 - 高锋版 - 课后答案全集更新完毕开始阅读dde32b29763231126edb114b

0049 32 RETI ;中断返回 END

【6-12】采用中断方法设计8OC51单片机的秒、分脉冲发生器。要求采用定时器/计数器T1的方式1编程,实现P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。加上必要的伪指令,并对源程序加以注释。晶振频率为12 MHz。

【答】机器周期为1μs,定时器采用方式1时,最长定时时间仅为65 ms。需要采用定时×溢出次数=所需定时。如定时设为10 ms,则定时溢出中断100次时,为定时1 S。 计算:10 ms=(2 M—TC)×1μs,TC=55536=D8F0 H 程序如下: ORG 0000H

0000 013 0 AJMP MAIN ORG 001BH

001B 0149 AJMP INTER ORG 0030H

0030 758910 MAIN: MOV TMOD,#1 0H ;设控制字,T1为定时器方式1 0033 758DD8 MOV THI,#0D8H ;i 0 ms定时初始值 0036 758BF0 MOV TLI,#0FOH

0039 7F3C MOV R7,#60 ;定时1分计数器 003B 7864 MOV R0,#1 00 ;定时1 S计数器 003D D28E SETB TRI ;开启定时器T1

003F D2AB SETB ETI ;开定时器T1中断 0041 D2AF SETB EA ;开中断 0043 C29 0 CLR P1.0 ;初始值 0045 C29 1 CLR P1.1

0047 0147 AJMP $ ;定时中断等待 定时10ms中断服务程序 .

0049 758DD8 INTER:MOV THI,#0D8H

004C 758BF0 MOV TLI,#0FOH ;重置10ms定时常数 004F D80A DJNZ. RO,REP

0051 B290 CPL P1.0 ;1 s定时到,P1.0取反输出 0053 7864 MOV R0,#1 00

0055 DF04 DJNZ R7,REP ;若R7不为0,则中断返回 , 0057 B291 CPL P1.1 ;1分定时到,则P1.1取反输出 0059 7F3C MOV R7,#60 ;循环值 005B 32 REP:RETI

【6—1 3】80C51单。片机的定时器/计数器T0以定时方法在P3.1引脚上周期为400μs,占空比为9:1的矩形脉冲,以定时工作方式2编程实现。加上必要的伪指令,并对源程序加以注释。fosc=6 M H z。

【答】矩形脉冲高电平时间为3 6 0μs,低电平时间为40μs。机器周期为2μs。 计算:40μs定时,40μs=(28一TC)×2μs,TC=ECH 360μs定时,360μs=(28一TC)×2μs,TC=4CH 采用查询法编程: ORG 0000H

0000 013 0 AJMP MAIN ORG 0030H

0030 758902 MAIN: MOV TMOD,#02H ;定时器T0以方式2定时 0033 758CEC MOV TH0,#0ECH ;定时40μs 0036 758AEC MOV TL0,#0ECH

0039 C2BI CLR P3.1 ;P3.1初始值

003B D28C SETB TR0 . ;开启定时器TO 003D C2BI LOOP: CLR P3.1

003F 108D02 JBC TF0,REP ;查询40μs定时到,则转 0042 013D AJP LOOP

0044 D2BI REP: SETB P3.1 ;P3.1输出高电平360 μs 0046 7F09 MOV R7,#09H ;定时40 μs X 9=360 μs

0048 108D02 LOOPl:JBC TF0,REPI ;查询高电平360μs定时到,则转 004B 0148 AJMP LOOPl

004D DFF9 REPI:DJNZ R7,LOOPl

004F 013D AJMP LOOP ;360 μs到,则转回输出周期波形 END

【6-14】请编程实现以80C51单片机定时器/计数器T1对外部事件计数。每计数1000个脉冲后,定时器/计数器T1转为定时工作方式,定时10 ms后,又转为计数方式,如此循环。单片机晶振频率为6 MHz。请加上必要的伪指令,并对源程序加以注释。 【答】晶振频率为6 MHz时,机器周期为2μs。 计算:定时 10 ms=(216-TC)×2 μs,TC=EC7 8 H 计数 1000=216-TC,TC=64536=FCl 8 H 程序如下: ORG 0000H

0000 0130 AJMP MAIN ORG 003 0H

0030 758950 MAIN: MOV TMOD,#50H ;计数控制字,T1为计数器、方式1 0033 758DFC MOV THI,#0FCH ;计数初始值(1000) 0036 758818 MOV TLI,#18H

0039 D28E SETB TRI ;开启计数器T1

003B 108F02 LOOP: JBC TFI,TIMING ;查询T1计数溢出,若溢出,则转入定时 003E 013B AJMP LOOP

0040 758910 TIMING:MOV TMOD,#1 0H ;定时控制字,T1为定时器、方式l 0043 758DEC MOV THI,#0ECH ;定时10 ms 0046 758878 MOV TLI,#78H

0049 D28E SETB TRI ;开启定时器T1

004B 108FE2 L00PI:JBC TFI,MAIN ;查询定时溢出,若溢出,则重新开始 004E 014B AJMP LOOPI

【6-15】在80C5 1单片机系统中,已知时钟频率为6 MHz,选用定时器T0设置为定时方式3,请编程使P1.0和P1.1引脚上分别输出周期为4 ms和800 μs的方波。加上必要的伪指令,并对源程序加以注释。

【答】机器周期为2μs,定时分别为2 ms和400μs。

计算:400 μs定时,400μs=(28--TC)×2 μs,TC=38 H。 程序如下: ORG 0000H

0000 0130 AJMP MAIN

ORG 000BH ;定时器TO中断矢量 。 000B 2100 AJMP TIME MAIN:

0030 7805 MOV R0,#05H

0032 758903 MOV .TMOD,#03H ;T0方式3,定时器中断 0035 758A38 MOV TL0,#38H ;TLO定时400μs 0038 D28C SETB TR0 ;开启定时器TL0 003A C28E CLR, TRl

003C D2A9 SETB ET0 ;开定时器TLO中断 003E D2AF SETB EA

0040 80FE SJMP$ ;中断等待 ORG 01 00H . TIME:

0100 758A38 MOV TL0,#38H ;TL0定时400~s

0103 B291 CPL. P1.1 ;400μs 定时到,P1.1输出变反 0105 D804 DJNZ R0,RETURN 0107 7805 MOV R0,#05H

0109 B290 CP[. P1.0 ;400μs * 5=2 ms到,P1.O输出变反 RETURN:

010B 32 RETI END

【6-1.6】如何实现通过定时器/计数器的计数功能达到扩大外部中断源的目的?

【答】可以利用定时器/计数器T0或T1的外部事件输入引脚TO、T1作为边沿触发的外部中断源。这时应设置定时器/计数器为计数器方式,而计数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器加1,由于计数常数已设为满刻度值,所以计数器加1后即溢出,向CPU申请中断。

以定时器/计数器T0、T1的计数脉冲输入引脚TO、T1作为外部中断请求输入引脚,定时器/计数器T0、T1的中断矢量用做第三、笫四个扩展的外部中断矢量,定时器/计数器T0、T1的中断服务程序人口地址作为扩展的第三、笫四个外部中断服务人口地址,即实现了外部中断源的扩展。

【6-17】某8 O C5 1单片机应用系统有3个外部中断源,另外要求从P1.O引脚上输出一个5 k Hz的方波,并采用定时器/计数器作为串行口的波特率发生器。请设计该应用系统,并编程实现系统功能。对源程序加以注释和加上伪指令。 【答】分析如下:

①80C51单片机具有两个外部中断源(INT0和INT1),为了不增加其他硬件开销,可以把定时器/计数器T0设置为方式3,这时可把80C51的引脚T0作为第3个外部中断源的输入脚,TL0设置为计数器,计数器的计数常数设为FFH,当T0引脚上出现从1至0的负跳变时,TL0计数溢出,申请中断,这时定时器TO的中断源相当于一个边沿触发的外部中断源。 ②当T0设置为方式3之后,T1做串行口的波特率发生器,设为方式2。

③在T0方式3下,TH0只能做8位定时器,用来产生5 k H z方波的定时,由P1.0引脚上输出5 k Hz频率的方波,则方波周期为200μs,要求定时时间为1 00 μs。若采用1 2 M Hz的晶体振荡器,则机器周期为1μs。

。 计算时间常数:1 00μs=(28一TC)×lμs,TC=256—100=156 程序如下: ORG 0000H

SJMP MAIN

ORG 000BH

AJMP TLOINT ;TL0(外部中断)中断入口 ORG 001BH

AJMP THOINT ;TH0定时中断入口 ORG 0030H

MAIN: MOV TMOD,#27H ;设T0为方式3,TL0为计数器方式, TH0为定时器方式,Tl做波特率发生器 MOV TH0,,#15 6 ;TH0定时常数 MOV TL0,#0FFH ;TL0计数常数

MOV TLI,#BAUD ;BAUD根据波特率算出的时间常数 MOV THI,#BAUD ;BAUD

MOV TCON,#55H ;置TR0和TRI为1,启动TL0和TH0 SETB ET0 ;允许TR0中断 SETB ETI ;允许TRI中断 SETB EA ;CPU中断允许 SJMP $ ;中断等待

第3个外部中断的中断服务程序 ORG 0100H

TLOINT:MOV TL0,#0FFH ;重置计数长度 (中断处理) RETI

THOINT:MOV TH0,#156 ;重置定时常数 CPL P1.0 ;P1.0引脚输出方波 ’ RETI END