内容发布更新时间 : 2024/12/24 3:02:52星期一 下面是文章的全部内容请认真阅读。
.
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 .