单片微型计算机原理与接口技术答案(第二版)高峰 2 下载本文

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

第7章 【单片机的串行口原理及应用】

思考与练习题解析

【7—1】什么是串行通信?什么叫异步通信?80C51单片机的帧格式有哪几种? 【答】回答如下:

①串行通信即在数据传输时,一个数据编码字符的所有位按一定顺序,一位接一位在信 道中被发送和接收。串行传送方式的物理信道为串行总线。计算机与外界的数据传送大多是串行的,其传送距离可以从几米直到几千公里,例如无线传送。

②异步传输以字符为单位进行数据传输,每个字符都用起始位、停止位包装起来,在字符间允许有长短不一的间隙。在单片机中使用的串行通信基本上都是异步方式,也有一些采用同步方式,如80C5 1.定时器方式0和Motorola单片机的SPI接口。 ③80C51单片机的帧格式有三种,即 8位数据位,如方式0;

10位数据位,包括1位起始位(0)、8位数据位和1位停止位(1),如方式1;

11位数据位,包括1位起始位(0)、8位数据位、1位可编程位和1位停止位(1),如方式 2和3。

【7—2】什么叫波特率、溢出率?如何计算和设置8OC51单片机串行通信的波特率?请举例加以说明。

【答】回答如下:

①波特率(Baud rate)表示每秒钟传输离散信号事件的个数,单位为baud(波特)。即波 特率所表示的是调制速度,是单位时间内传输线路上调制状态的变化数。即 Nb=1/Ts 式中:Nb——波特率;

Ts——码元的电脉冲信号宽度。

若传输的码元的电脉冲信号宽度为1μs,则Nb=1 Mband。即每秒传送106码元电脉 冲。因此,速率高低与每个码元所占的时间有关。每个码元的脉冲宽度越小,传输速率越高。 串行通信常用的标准波特率在RS一232C标准中已有规定,如波特率为600、1200、2400、4800、9600、19200、38400等。应根据传送数据量的大小、线路的质量好坏等因素综合考虑后,选择合适的波特率。

通信中另外一个概念是“比特率\,也是数据传输速率的测量单位,“比特率’’是指每

秒传送二进制数据的位数,单位为比特/秒,记作bit/s、b/s或bps。比特率与波特率的关系为: R=Nb·lbN (b/s) ① 式①中:

R——比特率;

Nb——波特率; ‘

N——为一个脉冲信号所表示的有效状态; lb——以2为底数的对数。

二进制中,脉冲的有无表示这个码元状态的”1¨或\”,即码元有两个状态,式①中N=2。所以在二进制的情况下: R=Nb·lb2=Nb ②

即在二进制的情况下,波特率与比特率数值相等。

但如果用4种不同的电压幅值0 V、2 V、4 V和6 V分别表示00、01、10和11,则码元有4种状态,式①中N=4。用这种信号传输数据时,每改变一次信号值就可用来传送2位数据。即 R=Nb·lb4 ③ .

在这种情况下,比特率为波特率的2倍。 ’

②溢出率为溢出周期的倒数,溢出周期即是定时器/计数器的定时时间。

80C51.单片机串行通信的波特率计算与定时器/计数器的工作方式及定时时间常数有关。

在工作方式2下,定时器/计数器的溢出周期为: T=(28一TC)×机器周期 而溢出率:1/T,则

SMOD位即特殊功能寄存器PCON.7。当SMOD位=1时,波特率加倍。 例如:设80C51单片机串行口的波特率为1200,选择定时器/计数器T1为定时方式2, 作为串行口的波特率发生器。已知.fosc=11.0592 MHz。 计算如下: ‘

因为SMOD=0,故定时器/计数器T1的定时常数TH1=232=E8H。在工作方式2下,将定时常数同时送人TH1和TLl即可。

【7-3】为什么定时器T1用做串行口波特率发生器时,常采用方式2 ?

【答】定时器T1用做串行口波特率发生器时,因为工作方式2为自动重装载方式,所以不需要在中断服务子程序中重新设置时间常数,没有中断响应而引起的误差,所以常采用方式2。

【7-4】某异步通信接口,其字符帧格式由1个起始位、7个数据位、1个奇偶校验位和1个停止位组成。当该通信接口每分钟传送1800个字符时,计算其传送波特率。 【答】计算如下:

①该通信接口每分钟传送1800个字符,即每秒钟传送30个字符。

②因为一个字符帧格式占用10位,所以每秒钟传送30 X 10位=300位,因此,传送波特率应为300。