存储器读写实验:
对RAM的30H、31H单元分别赋值BCD码75H、35H,试将两个数相加,其BCD的差送32H单元。
(说明):
因为MCS-51的十进制调整指令不适合减法,因此可以把减法变成加法:将被减数-减数变成被减数+减数的补数,其中,减数的补数=BCD码的模-减数。最后再用十进制加法指令,将被减数+减数的补数,所得值送往存储器A,再存储到32H单元即可。
(流程图):
ORG 0000H
LJMP START
ORG 0020H
START: MOV R0,#30H
MOV R1,#31H
MOV 30H,#72H
MOV 31H,#35H
MOV A,#9AH
SUBB A,@R1
ADD A,@R0
DA A
MOV 32H,A
SJMP $
END
并行端口实验:
利用单片机的两个接口驱动四位一体LED数码管电路,要求在数码管上自右向左直接显示RAM20H—23H中的“0,4,1,9”。
(说明):
待显示的数据变量存储在RAM的20H-23H中,对应的字形码存储在RAM的24H-27H中。与变量对应的字形码通过查表获取。根据电路特点,位驱动电平为低电平有效。子程序DELAY得延时决定每位数码管的点亮时间,可以通过修改DELAY中的延时参数来增加延时时间,从而观察动态显示的效果。
(流程图):
ORG 0000H
LJMP START
ORG 0030H
START: MOV SP,#60H
MOV A,#00H
MOV R0,#20H
MOV @R0,A
MOV A,#4
INC R0
MOV @R0,A
INC R0
MOV A,#1
MOV @R0,A
INC R0
MOV A,#9
MOV @R0,A
MOV R0,#20H
MOV R1,#24H
MOV R2,#4
MOV DPTR,#LEDGY
LOOP1: MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
LOOP2: MOV P1,#0FFH
MOV P0,24H
MOV P1,#0EFH
LCALL DELAY
MOV P1,#0FFH
MOV P0,25H
MOV P1,#0DFH
LCALL DELAY
MOV P1,#0FFH
MOV P0,26H
MOV P1,#0BFH
LCALL DELAY
MOV P1,#0FFH
MOV P0,27H
MOV P1,#07FH
LCALL DELAY
SJMP LOOP2
LEDGY: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
DELAY PUSH 00H
PUSH 01H
MOV R1,#00H
LOOP3: MOV R0,#06H
DJNZ R0,$
DJNZ R1,LOOP3
POP 01H
POP 00H
RET
END
外部中断实验:
设计一个计数器,利用中断程序完成对其每按五次便加一并显示的功能,计数器原始清零。利用“逻辑笔”电路显示P0.7的状态:如果P0.7的电平不断转换,则表明系统在执行主程序,无中断;如果P0.7变成固定的高电平,则表明系统进入中断。
(说明):