单片机编程练习题(含部分答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程练习题
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 R7,#32 LOOP: MOV A,@R0
SUBB A,#60
JNC GE
INC 20H GE: INC R0
DJNZ R7,LOOP
SJMP $
MOV R0,#30H
MOV 20H,#0
MOV R7,#32 LOOP: CJNE @R0,#60,NE NE: JNC GE
INC 20H
GE: INC R0
DJNZ R7,LOOP
SJMP $
4.内部RAM中分别以地址20H和30H开始的连续16个单元,按顺序依次将两
组中相应单元的内容相加(不考虑溢出),并将和存入外部RAM2000H开始的单元中。
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.设内部RAM20H单元为数据块的起始地址,数据块长度为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码字符串是否相等。字符串长度在内部RAM2FH单元,两字
符串的首地址分别为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.内部RAM30H和31H单元中各存放一个“0-9”数字的ASCII码,将其转换为
压缩BCD码(30H的BCD码在高4位),结果存入外部RAM2300H单元中。8.将内部RAM40H为起始地址的32个连续单元中的十六进制数转换成ASCⅡ码
存入外部RAM3000H开始的存储单元中。
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 *********