单片机原理与应用习题 联系客服

发布时间 : 星期五 文章单片机原理与应用习题更新完毕开始阅读

MOV ACALL XCHD RET CLR SUBB CJNE

MOV

A,@R1 ACB A,@R0 C

;将A中的ASCII码转换为BCD码的子程序

ACB:

A,#30H A,#0AH,L1 L2

;是BCD码数则转L2

;非法BCD码数,则送入“$”符号

A,#24H

L1: JC L2: RET

11.将两位十进制数的BCD码,转换为ASCII,编成子程序形式。 解:子程序BCAC如下:

;功能:将两位十进制数的BCD码,转换为ASCII ;入口参数:R1存放BCD码数的地址

;出口参数:(R0)和(R0)+1存放结果的地址

A,@R1 ;取BCD码数 R2,A

;暂存BCD码数在R2中

A,#0FH ;屏蔽高4位

A,#30H ;低4位BCD码转换成为ASCII码 @R0,A ;存入第一个ASCII码 A,R2 A R0

@R0,A ;存入第二个ASCII码

;取原BCD码,把高4位交换到低4位

MOV ANL ADD MOV MOV SWAP ANL INC MOV RET

BCAS: MOV

A,#0FH ;屏蔽高4位

12.将20H单元中的8位无符号二进制数转换为BCD码,存入21H、22H。 解:程序设计如下:

;功能:将20H单元中的8位无符号二进制数转换为BCD码 ;入口参数:20H单元中存放要转换的二进制数

;出口参数:21H单元存放的是百位BCD码,22H单元存放的是十位和个位BCD码,高半字节放

十位,低半字节放个位。

;占用寄存器:A,B BINBCD: MOV A,20H

MOV B,#64H DIV AB

;除以100,A为百位数 ;存入21H单元 ;余数B送A

;除以10,得十位和个位 ;十位数放于高半字节 ;个位数放于低半字节

MOV 21H,A MOV A,#0AH XCH A,B DIV AB SWAP A ADD A,B RET

;取数

MOV 22H,A ;十位、个位存22H单元

13.用查表程序求0~8之间整数的平方。

解:设0~8之间的整数存放在R0单元中,查表结果存在R1中

MOV MOV MOV MOVC MOV

R0,#DATA A,R0 DPTR,#TAB A,@A+DPTR R1,A

TAB:DB 0,1,4,9,16,25,36,49,64

14.编写程序,实现下列逻辑函数的功能。其中X、Y、Z、F都是位单元地址。

F= XY+Y?Z 解:X

Y Z F

BIT 20H.0 BIT 20H.1 BIT 20H.2 BIT 20H.3 BIT 20H.4

C,X C,Y F,C C,Y C,/Z C,Z C,/Y C,TEMP C C,F F,C

;C= ;C=YZ

TEMP,C ;暂存YZ在TEMP中

;C=XY ;存XY在F 中

TEMP

MOV ANL MOV MOV ANL MOV MOV ANL ORL CPL ORL MOV

C

YZ

15.有一16位二进制数存放于50H、51H单元,50H存高位,编程实现全部左移一位。

解: CLR

MOV RLC MOV MOV RLC MOV SJMP

A,51H A 51H,A A,50H A 50H,A $

A,31H

A,41H ;低字节相加 A

;十进制调整

31H,A ;存结果低字节 A,30H

16.完成两字节压缩BCD码的加法。(30H 31H)+(40H 41H)→(30H 31H)

解:

MOV ADD DA MOV MOV

ADDC DA MOV SJMP

A,40H A 30H,A $

17.编程实现(R3 R2)*10→(R3 R2)

解:本题可以采用乘法指令或者用循环移位指令实现,此处采用用乘法指令。

MOV MOV MUL MOV MOV MOV MOV MUL ADD MOV MOV SJMP

A,R2 B,#0AH AB R2,A R4,B A,R3 B,#0AH AB A,R4 R3,A R4,B $

;被乘数高8位乘以10,即R3×10

;R3×10的低8位与R2×10的高8位之和送R3 ;被乘数低8位乘以10,即R2×10 ;

;R2×10的高8位暂存于R4中 ;

习题5

5.1.MCS—51型单片机有几个中断源?有几级中断优先级?各中断源中断标志是怎样产生的? 答:MCS—51单片机的有5个中断源:2个外部中断源,即INT0和INT1;3个内部中断源,两个片内定时器/计数器溢出中断T0和T1,1个片内全双工串行口中断源。

有两级中断优先级:即高优先级和低先级,实现两级中断服务程序嵌套,同一优先级的中断源,由硬件查询来确定优先序列,从高到低依次为外部中断INT0、定时器T0溢出中断、外部中断INT1定时器、T1溢出中断、串行口中断。

各中断源请求的中断的标志分别由特殊功能寄存器TCON和SCON的相应位锁存,这些标志位的产生如下:

TF1:定时器T1的溢出中断请求标志位。当计数器T1产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。

TF0:定时器T0的溢出中断请求标志位。含义与TF1相同。

IE1:外部中断1(即INT1)的中断请求标志位。当检测到外部中断引脚(P3.2)上存在有效的中断请求信号时,由硬件使IE1置1。

IE0:外部中断INT0的中断请求标志位,其含义与IE1类同

TI:串行口发送中断请求标志位。CPU将一个数据写入发送缓冲器SBUF时,每发送完一帧串行数据后,硬件置位TI(TI=1)。

RI:串行口接收中断请求标志位。在串行口允许接收时,每接收完一个串行帧,硬件置位RI。 5.2.编写程序将INT1设为脉冲下降沿触发的高优先级中断源。 解:用位操作:

SETB IT1 ;设INT1为边沿触发方式 SETB PX1 ;设INT1高优先级中断源 MOV TCON,#04H

;设INT1为边沿触发方式

用字节操作:

MOV IP,#04H ;设INT1高优先级中断源

5.3.试编程实现将INT1设为高优先级中断,且为电平触发方式,T0设为低优先级中断计数器,串行口中断为高优先级中断,其余中断源设为禁止状态。

解: MOV TMOD,#04H

MOV TCON,#00H

MOV IE,#96H MOV IP,#14H

;设T0为计数器状态

;设外部中断1为电平触发方式 ;开放外部中断1、T0和串行口中断

;设INT1和串行口为高优先级,T0设为低优先级

5.4.在MCS—51型单片机中,哪些中断标志可以在响应后自动撤除?哪些需要用户撤除?如何撤除? 答:⑴ CPU在响应中断请求后会自动清除的中断标志的有: 定时器T0、T1的溢出中断请求标志TF0、TF1;

边沿触发方式下的外部INT0、INT1的中断请求标志IE0、IE1。

⑵ CPU响应中断后不会自动清除,只能在中断服务程序中用软件清除的有:

串行口的接收、发送中断标志RI、TI,用“CLR 中断请求标志位”指令清除;在电平触发方式下的外部中断标志IE0和IE1,则是根据引脚INT0和INT1的电平而变化的,CPU无法直接干预,需在引脚外加硬件(如D触发器)使其自动撤消外部中断请求。

5.5.MCS—51型单片机响应中断后,各中断源的中断入口地址是什么? 答: 中断源

外部中断0 定时器T0中断 外部中断1 定时器T1中断 串行口中断

中断入口地址

0003H 000BH 0013H 001BH 0023H

5.6.简述MCS—51型单片机中断响应全过程。

答:当有中断源发出中断请求、允许中断位开放、无同级或更高级中断正在被服务、当

前的指令周期已经结束时,CPU按优先级顺序查询中断标志,如查询到某个中断标志为1CPU响应中断请求,CPU响应中断后即转至中断服务程序的入口,执行中断服务程序。

5.7.试比较用单片机的可编程定时器实现时钟计时与用硬件电路实现时钟计时有什么不同。

答:不可编程的硬件定时:对于时间较长的定时,常使用硬件电路完成。硬件定时方法的特点是:定时功能全部由硬件电路完成,不占用CPU时间。但需通过改变电路中的元件参数来调节定时时间,在使用上不够灵活方便。

单片机的可编程定时器定时:这种定时方法是通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活又方便。此外,由于采用计数方法实现定时,因此可编程序定时器都兼有计数功能,可以对外来脉冲进行计数。

5.8.简述MCS—51型单片机定时/计数器的4种工作方式及其特点。

答:MCS—51单片机有T0和T1两个定时/计数器,T0有4种工作方式,T1有3种工作方式,如下表:

工作方式 方式0 方式1 方式2 适用定时器 T0、T1 T0、T1 T0、T1 功能说明 13位定时器/计数器 16位定时器/计数器 自动重装初值的8位定时器/计数器 仅适用于T0,分为2个8位计数器TL0和TH0,TL0方式3 T0 可工作于定时或计数状态,而TH0则固定为定时状态。方式3对T1则停止计数 5.9. 若MCS—51型单片机的时钟频率为12MHz,试计算用4种工作方式定时300?s所需的初始值。

解:机器周期T=12×1/fosc=12×1/12=1μs,以定时器T0为例。