单片机编程练习题(含部分答案) 下载本文

内容发布更新时间 : 2024/5/21 2:32:55星期一 下面是文章的全部内容请认真阅读。

编程练习题

1. 编一程序将片内存储单元20H~3FH单元的内容复制到40H~5FH单元。

MOV R0,#20H MOV R1,#40H MOV R7,#32

LOOP: MOV A,@R0

MOV @R1,A INC R0 INC R1

DJNZ R7,LOOP SJMP $

2. 编一程序将片内存储器40H单元的内容与41H单元的内容进行比较,若相等

将50H置00H,若不等将50H置0FFH。

3. 在片内数据存储单元30H~4FH中存有32个同学的数学成绩,编一程序计算

有多少同学成绩不及格(成绩低于60为不及格)。若20H作为计数存储单元

MOV R0,#30H MOV 20H,#0 MOV R0,#30H MOV R7,#32 MOV 20H,#0

LOOP: MOV A,@R0 MOV R7,#32 SUBB A,#60 LOOP: CJNE @R0,#60,NE JNC GE NE: JNC GE INC 20H INC 20H GE: INC R0 GE: INC R0

DJNZ R7,LOOP DJNZ R7,LOOP

SJMP $ SJMP $

4. 内部RAM中分别以地址20H和30H开始的连续16个单元,按顺序依次将两

组中相应单元的内容相加(不考虑溢出),并将和存入外部RAM 2000H开始的单元中。

MOV R0,#20H MOV R1,#30H MOV DPTR,#2000H MOV R7,#16

LOPP: MOV A,@R0

ADD A,@R1 MOVX @DPTR,A INC R0 INC R1 INC DPTR

DJNZ R7,LOOP SJMP $

5. 设内部RAM 20H单元为数据块的起始地址,数据块长度为10H,数据为8位

无符号数,试编程找出数据块中的最小值,并将其存入40H单元。

MOV R0,#20H MOV 40H,#255 MOV R7,#10H

LOOP: MOV A,@R0

SUBB A,40H JNC NJW

MOV 40H,@R0

NCW: INC R0

DJNZ R7,LOOP SJMP $

6. 比较两个ASCII码字符串是否相等。字符串长度在内部RAM 2FH单元,两字

符串的首地址分别为30H、50H。如果两个字符串相等,置CY=1,否则,置CY=0。

MOV R0,#30H MOV R1,#50H

LOOP: MOV 20H,@R0

CJNE @R1,20H,NE INC R0 INC R1

DJNZ 2FH,LOOP SETB C SJMP $

NE: CLR C SJMP $

7. 内部RAM 30H和31H单元中各存放一个“0-9”数字的ASCII码,将其转换为

压缩BCD码(30H的BCD码在高4位),结果存入外部RAM 2300H单元中。 8. 将内部RAM 40H为起始地址的32个连续单元中的十六进制数转换成ASCⅡ码

存入外部RAM 3000H开始的存储单元中。 0~9 +30H A~F +37H

9. 设时钟频率为6MHz或12MHz,分别编写一个延时1ms、5ms、20ms、100ms

子程序。

10. 图示电路,若fosc=12MHz,数码管为共阳极,分别用延时法和定时器两种

方法编程实现数码管从0~9的交替轮流显示,时间间隔为1秒。(数字0~9共阳极段选码为0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H。)

定时器中断法:

ORG 0000H LJMP MAIN ORG OOOBH

MOV TH0,#3CH ;定时50ms MOV TL0,#0B0H DJNZ R7,NEXT MOV R7,#20 ;黄色块程序每1s执行一次 MOV A,R6

MOVC A,@A+DPTR MOV P1,A INC R6

CJNE R6,#10,NEXT MOV R6,#0 NEXT:RETI

MAIN:MOV TMOD,#01H

MOV TH0,#3CH ;定时50ms MOV TL0,#0B0H MOV IE,#82H MOV R7,#20

MOV R6,#0 ;显示内容初值为0 MOV DPTR,#TAB SETB TR0 SJMP $

TAB:DB *********