当前位置:首页 > 单片机原理与应用习题
MOV R0,A RL A RL A
;R0=2x
ADD A,R0 MOV @R1,A
13.执行程序填结果 (1)MOV A,#19H
ADD A,#72H DA A 结果:A= 解:A=91H (2) CLR C
x
;A=4x*2=8x ;A=8x+2x=10x
;A=2x*2=4;(40H)=10x
解:各指令的注释如程序所标,程序的功能为40H单元的内容乘10。
;A=19H ;A=8BH ;A=91H
;Cy=0 ;A=9AH ;A=81H ;A=0F3H ;A=53H,Cy=1
MOV A,#9AH SUBB A,#19H ADD A,#72H DA A
解:A=53H
结果:A=
14.设(SP)=50H,MA=0123H,SUB=0345H。执行指令“MA: ACALL SUB”后PC=?,
SP=?,(51H)=?,(52H)=?。
解:PC=0345H,SP=52H,(51H)=25H,(52H)=01H
15.(SP)=4BH,(49H)=12H,(4AH)=5AH,(4BH)=68H。执行指令“RET”后PC=?,
SP=?。
解:PC=685AH,SP=48H
习题 4
1.按下面要求编程。
(51H)= 0 ;若(50H)为奇数 1 解: MOV
MOV DIV MOV JNZ MOV SJMP
;若(50H)为偶数 A,50H B,#2 AB A,B L1 NEXT
51H,#00H;为奇数,0送51H单元
;判余数是否为0
51H,#01H;为偶数,1送51H单元
;偶数除以2的余数为0
L1: MOV
NEXT:SJMP NEXT 2.按下面要求编程。
-1;若 (50H)≤20 (51H)= 0;若 20<(50H)<40 -1;若 (50H)≥40
解:
MOV CJNE SJMP
A, 50H L4 L4 L4 L4 NEXT
;设50H单元的内容为X
;X≠20时,转向L1 ;X=20时,转向L4 ;X<20时,转向L4
;X>20且X≠40时,转向L3 ;X=40时,转向L4 ;X>4 0时,转向L4
;20<X<40时,送0到51H单元 ;X≤20或X≥40时,送-1 到51H单元
A,#20,L1
L1: JC
L2: CJNE
SJMP MOV SJMP L3:JNC
A,#40,L3
51H,#00H 51H,#0FFH NEXT
L4: MOV
NEXT: SJMP 解:
方法一: MOV CLR INC MOV CJNE SJMP 方法二 MOV MOV CLR INC DJNZ SJMP MOV MOV MOV MOV CJNE MOV MOV
LOOP: MOVX
3.试编写程序,将片外8000H开始的16个连续单元清0。
DPTR,#8000H;数据块首址 A
@DPTR,A DPTR R7,DPL R7,#10H,LOOP $
DPTR,#8000H R7,#10H A
@DPTR ,A DPTR R7,LOOP $
R0,#50H R2,#8 R0 B,@R0 A,B,NEXT NEXT1
;两数比较,若A≥B时,A中放当前数 ;若A<B时,送大数到A中 ;数据块比较完否? ;最大值送入70H单元中
A,@R0 R2,LOOP 70H,A HERE
A,@R0
;数据块首址 ;长度计数器赋初值 ;取第一个数 ;取下一个数
;数据块长度16 ;单元清0
LOOP: MOVX
4.在片内50H开始的单元中存有8个无符号数,找出其中最大数存于70H单元中。 解:
LOOP: INC
NEXT: JNC NEXT1: DJNZ HERE: SJMP
5.试编写程序,求出片内RAM 30H单元中的数据含“1”的个数,将结果存入31H单元。 解:要统计一个8位二进制数中“1”的个数,可以把这个数一位一位地移到Cy中,然后加以判断和统计。程序设计如下:
MOV
R2,#8
;移位次数
MOV MOV RLC JNC INC DJNZ MOV SJMP
R1,#10 A,30H A
NEXT R1 R2,LOOP 31H,R1 HERE
;R1作为统计“1”的个数的计数器 ;取数
;数的最高位移入Cy
;若Cy=1,则计数器加1 ;存结果
LOOP:
NEXT: HERE:
6.编制用软件延时1秒的子程序,控制P1脚上所接的8个发光二极管交叉灯亮一秒。 解:设晶体振荡器的频率为6MHz.
MOV MOV LCALL CPL SJMP
A,#0AAH P1,A DEY1S A LOOP R5,#2 R6,#200 R7,#250
;延时1S子程序
;交叉亮
;调延时1S子程序
LOOP:
DEY1S: MOV LOOP3: MOV LOOP2: MOV LOOP1: NOP NOP NOP DJNZ DJNZ
DJNZ RET
R7,LOOP1 R6,LOOP2 R5,LOOP3
7.设计灯移位程序,要求P1脚上所接的8只发光二极管每次点亮一个,点亮时间为0.5秒。顺序从低位到高位循环点亮。
解:
MOV
A,#01H P1,A A LOOP R5,#1 R6,#200 R7,#250
;延时0.5S子程序
LOOP: MOV
RL SJMP
DEY1S: MOV LOOP3: MOV LOOP2: MOV LOOP1: NOP NOP NOP DJNZ DJNZ
DJNZ RET
8.将累加器A中的2位十六进制数,转换为ASCII码,存放在片内RAM 30H和31H单元中。 解:
MOV
R0,A
;暂存A中的数在R0中
R7,LOOP1 R6,LOOP2 R5,LOOP3
LCALL DEY05S
ANL MOV MOVC MOV MOV SWAP ANL MOVC MOV
A,#0FH ;屏蔽高位
;低位转换成ASCII码 ;存低位
;将高位交换到低位
DPTR,#ASCTAB A,@A+DPTR 31H,A A,R0 A
;存高位
A,#0FH 30H,A
A,@A+DPTR
ASCII: DB 30H,31H,32H,33H,34H,35H,36H
DB 37H,38H,39H,41H,42H,43H,44H DB 45H,46H
9.将两字节ASCII码,转换为二进制数,编成子程序形式。 解:子程序为AASCH如下:
;功能:将两字节ASCII码,转换为一个字节二进制数(即十六进制)
;入口参数:(R0)为ASCII码的首地址 ;出口参数:(R1)为转换后的二进制数的地址
A,@R0 ASCH A
;取ASCII码的高位 ;调用子程序ACH
;将十六进制数放在A的高位 ;存十六进制数到高4位 ;指向下一个ASCII码数
;存十六进制数到低4位
ACALL SWAP MOV INC MOV ACALL XCHD RET CLR SUBB CJNE
SUBB RET
C
;将A中的ASCII码数转换成十六进制数并存放在A中的子程序
;若为数字(0~9),转移 ;十六进制数为字母是减7
A,#30H AH
AASCH: MOV
@R1,A R0 ASCH A,@R1 A,@R0
ACH:
A,#0AH,NEXT;判ASCII码数是数字还是字母? A,#07H
NEXT: JC AH:
10.将两字节ASCII码,转换为BCD码,编成子程序形式。
解:两字节ASCII码转换为BCD码,用压缩BCD码的形式表示正好占用一个字节。
子程序ASCBCD如下:
;功能:将两字节ASCII码,转换为BCD码,若ASCII码数为非法BCD码(即A~F),则在相;入口参数:(R1)为ASCII码的首地址 ;出口参数:(R0)为转换后的BCD码的地址
A, @R1 ;取一个ASCII码 ACB A R1
;调用ACB子程序 ;BCD码的放在A的高4位
ACALL SWAP MOVA INC
应半字中置入“$”符号,以示区别
ASCBCD:MOV
@R0,A ;存BCD码到高4位
共分享92篇相关文档