单片机原理及应用技术(第3版)+李全利+习题答案 下载本文

.

END

9.若80C51的晶振频率为6MHz,试计算延时子程序的延时时间。 DELAY:MOV R7,#0F6H LP:MOV R6,#0FAH DJNZ R6,$ DJNZ R7,LP RET

答:延时时间: 2μs*{[1+((1+2*250+2)*246)+2]+2}=0.247486秒(含调用指令2个机器周期)

10.在内部RAM 的30H~37H单元存有一组单字节无符号数。要求找出最大数存入BIG单元。试编写程序实现。

答:

ORG 0000H BIG DATA 2FH ONE DATA 2AH TWO DATA 2BH

START:MOV R7,#7 ;比较次数 MOV R0,#30H LOOP:MOV A,@R0 MOV ONE,A INC R0 MOV TWO,@R0 CLR C SUBB A,@R0

JC NEXT ;ONE小,TWO大继续比下一对数 MOV @R0,ONE ;ONE大放后面(交换) DEC R0

MOV @R0,TWO ;TWO小放前面 INC R0 ; NEXT:DJNZ R7,LOOP MOV BIG,37H SJMP $ END .

.

11.编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的50H、51H、52H中。

答:单字节二进制数转换为压缩的BCD码仅需要2个字节;在将压缩的BCD码拆分存于3个单元。

DCDTH:MOV R7,#8

MOV R0,A ;暂存于R0 LOOP:CLR C MOV A,R0 RLC A MOV R0,A

MOV R1,#51H;

MOV A,@R1 ; ADDC A,@R1 ; DA A ; MOV @R1,A ;

DEC R1 MOV A,@R1 ADDC A,@R1 DA A MOV @R1,A .

DJNZ R7,LOOP

INC R1 ;50H已是结果,R1指向51H,51H单元需拆分 MOV A,#00H XCHD A,@R1 MOV 52H,A MOV A,@R1 org 0 MOV 52H,#0 MOV 51H,#0 MOV 50H,#0 MOV A,#0FDh LCALL DCDTH SJMP $

.

答:

ORG 0

MOV R1,#5BH MOV A,R1 ANL A,#0F0H SWAP A ACALL ASCII MOV R3,A MOV A,R1 ANL A, #0FH ACALL ASCII MOV R4, A SJMP $ ASCII:PUSH ACC CLR C SUBB A, #0AH POP ACC JC LOOP ADD A, #07H LOOP: ADD A, #30H RET END

13.编写程序,求内部RAM中50H~59H十个单元内容的平均值,并存放在5AH单元。 答:

ORG 0000H MOV R7,#10 MOV R0,#50H MOV B,#10 CLR C .

SWAP A MOV @R1,A RET END

12.编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。

.

CLR A LOOP:ADDC A,@R0 INC R0 DJNZ R7,LOOP DIV AB MOV 5AH,A SJMP $ END

14.如图4.10所示,编制程序实现:上电后显示“P”,有键按下时显示相应的键号“0”~“7”。 答:

实现程序如下: TEMP EQU 30H

ORG 0000H JMP START

ORG 0100H START:MOV SP,#5FH

MOV P0,#8CH ;正序显示\

MOV P3,#0FFH ;输入方式 CLR CY

NOKEY:MOV A,P3 CPL A

JZ NOKEY ;无键按下 MOV TEMP,P3 ;有键按下 CALL D10ms MOV A,P3 CJNE A,TEMP,NOKEY

;去抖动

MOV R2,#0 ;键号计数器复位 MOV A,TEMP LP:RRC A JNC DONE .

INC R2 SJMP LP

MOV DPTR,#CODE_P0

DONE:MOV A,R2

.

MOVC A,@A+DPTR JMP NOKEY MOV P0,A

D10ms:MOV R5,#10 ;10MS D1ms:MOV R4,#249 DL:NOP NOP

DJNZ R4,DL

DJNZ R5,D1ms RET CODE_P0:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END

章5 80C51的中断系统及定时/计数器

1.80C51有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU响应各中断时,其中断入口地址是多少?

答:5个中断源,分别为外中断INT0和INT1、T0和T1溢出中断、串口中断。

电平方式触发的外中断标志与引脚信号一致;边沿方式触发的外中断响应中断后由硬件自动复位。 T0和T1,CPU响应中断时,由硬件自动复位。 RI和TI,由硬件置位。必须由软件复位。

另外,所有能产生中断的标志位均可由软件置位或复位。

各中断入口地址:INT0―0003H,T0—000BH,INT1—0013H,T1—001BH,RI和TI—0023H。 2.某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H。试编写主程序及中断服务程序(转至相应的入口即可)。

答:将3个中断信号经电阻线或,接INT1。

ORG 0000H LJMP MAIN ORG 00013H LJMP ZDFZ ORG 0040H

MAIN:SETB EA .