单片机原理与应用习题

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

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位

联系合同范文客服:xxxxx#qq.com(#替换为@)