MOV R1,#0 EXIT: RETI TAB: DB
0FFH,0FAH,0F5H,0AFH,05FH,0AAH,55H,0H,0FF
H
END
10. 开关控制LED的亮灭及速度 ORG 0000H
;程序从0000H开始
执行
AJMP START ;跳转到主程序 ORG 0030H
;以免覆盖中断地
址
START: MOV R4,#1 ;立即数传送到累加器 LOOP: CLR P3.3 ;进位标志位清零 LOOP1: JNB P3.5,LOOP ;直接寻址位为0
则转移
JB P3.4,LOOP2 ;直接寻址位为1则转
移 JNB P3.4,$
INC R4 ;寄存器增1 LOOP2: CPL P3.3 ;累加器求反 MOV A,R4 ;寄存器内容传送到累加器A
MOV R5,A
;累加器内容传送到累
加器 ACALL DELAY ;调用延时函数
AJMP LOOP1 ;循环 DELAY: MOV R6,#200 DEL: MOV R7,#229 DJNZ R7,$
DJNZ R6,DEL ;寄存器减1,不为0则转移 DJNZ R5,DELAY RET ;子程序返回 END
11. 计数器实验 ORG 0000 SJMP START ORG 001BH LJMP INT_1 START:
MOV SP,#60H
MOV R5,#20
MOV TMOD,#15H MOV TH1,#4BH MOV TL1,#0FDH MOV TH0,#0 MOV TL0,#0 SETB ET1 SETB EA SETB TR1 SETB TR0
MOV DPTR,#0E100H MOV A,#3 MOVX @DPTR,A LOOP:
MOV R0,#50H; MOV R1,#4 MOV R2,#1 LCALL DISPLAY
SJMP LOOP INT_1: MOV TH1,#4BH MOV TL1,#0FDH DJNZ R5,CON MOV R5,#20 PUSH ACC PUSH B MOV A,TL0 MOV B,#10H DIV AB MOV 50H,B MOV 51H,A MOV A,TH0 MOV B,#10H DIV AB MOV 52H,B MOV 53H,A MOV TH0,#0 MOV TL0,#0
POP B
POP ACC CON: RETI DISPLAY: MOV A,@R0
MOV 0FH,#8 ACALL P164 ACALL PBIT ACALL DELAY
MOV A,#0
MOVX @DPTR,A INC R0
DJNZ R1,DISPLAY
RET
P164: MOV DPTR,#TAB MOVC A,@A+DPTR P164_1: RRC A MOV R3,A MOV ACC.0,C ANL A,#0FDH MOV DPTR,#0E102H MOVX @DPTR,A ORL A,#0FEH MOVX @DPTR,A MOV A,R3 DJNZ 0FH,P164_1 MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H MOV A,R2 MOVX @DPTR,A RL A MOV R2,A
RET
DELAY: MOV R6,#4 DEL: MOV R7,#250 DJNZ R7,$ DJNZ R6,DEL
RET TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
12. 串并转换实验 ORG 0000 SJMP START ORG 0030H START:
MOV SP,#60H MOV R1,#0 MOV DPTR,#TAB
LOOP:
MOV A,#0
CLR C
MOV R4,#24 ACALL S164 MOV A,R1
MOVC A,@A+DPTR MOV R4,#8 ACALL S164 INC R1 MOV R5,#10 ACALL DELAY CJNE R1,#10,EXIT
MOV R1,#0 EXIT: SJMP LOOP S164: RRC A MOV P1.0,C CLR P1.1 SETB P1.1 DJNZ R4,S164
RET
DELAY: MOV R6,#200 DEL: MOV R7,#230 DJNZ R7,$ DJNZ R6,DEL DJNZ R5,DELAY RET
TAB:
DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H
END
13. 直流电机速度检测 ORG 0000H AJMP MAIN ORG 001BH AJMP INT_1
ORG 0030H MAIN: MOV SP,#60H MOV TMOD,#15H MOV TH1,#4BH MOV TL1,#0FDH MOV R0,#20 MOV TH0,#0 MOV TL0,#0 SETB ET1
SETB EA
SETB TR0 SETB TR1
MOV R2,#00H
UP: MOV A,R2
MOV DPTR,#0A000H //注意片选接YC2,非YC3
MOVX @DPTR,A MOV R5,#1
ACALL DELAY ;100ms INC R2
CJNE R2,#0FFH,UP
DOWN:MOV A,R2
MOV DPTR,#0A000H MOVX @DPTR,A MOV R5,#1 ACALL DELAY ;100ms
DEC R2
CJNE R2,#00H,DOWN AJMP UP
INT_1: MOV TH1,#4BH
MOV TL1,#0FDH DJNZ R0,EXIT MOV R0,#20 PUSH ACC PUSH DPH PUSH DPL MOV A,TL0 ACALL XS MOV TL0,#0 MOV A,TH0 ACALL XS MOV TH0,#0 POP DPL POP DPH
POP ACC
EXIT: RETI
XS: MOV DPTR,#TAB ;MOV A,R2
MOV B,#10 ;显示10进制数 DIV AB XCH A,B ;MOV DPTR,#TAB MOVC A,@A+DPTR
ACALL FS
XCH A,B
;MOV DPTR,#TAB MOVC A,@A+DPTR ACALL FS
RET
FS: MOV R1,#8 YW:RRC A MOV P1.0,C CLR P1.1 SETB P1.1 DJNZ R1,YW
RET
DELAY:MOV R6,#200 DEL:MOV R7,#230 DJNZ R7,$ DJNZ R6,DEL DJNZ R5,DELAY
RET
TAB:DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB
0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH END
14. 8255PB外接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式) ORG 0000 AJMP START ORG 0030H
START:
MOV DPTR,#0AC03H MOV A, #82H MOVX @DPTR, A MOV DPTR,#0E100H MOV A,#3 MOVX @DPTR,A LOOP:
MOV DPTR,#0AC01H MOVX A,@DPTR MOV B,#10H DIV AB MOV 10H,B MOV 11H,A MOV R0,#10H MOV R1,#2
MOV R2,#1
ACALL DISPLAY
SJMP LOOP
DISPLAY:MOV A,@R0 MOV 0FH,#8 ACALL P164 ACALL PBIT ACALL DELAY MOV A,#0 MOVX @DPTR,A INC R0
DJNZ R1,DISPLAY
RET
P164: MOV DPTR,#TAB MOVC A,@A+DPTR P164_1: RRC A MOV R3,A MOV ACC.0,C ANL A,#0FDH MOV DPTR,#0E102H MOVX @DPTR,A ORL A,#0FEH MOVX @DPTR,A MOV A,R3 DJNZ 0FH,P164_1 MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H MOV A,R2 MOVX @DPTR,A RL A MOV R2,A
RET
DELAY: MOV R6,#4 DEL: MOV R7,#250 DJNZ R7,$ DJNZ R6,DEL
RET
TAB:DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB
0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
15. P3.4接开关K,编程将开关拨动次数,通过串并转换的方式进行显示 ORG 0000 SJMP START ORG 0030H START: MOV SP,#60H MOV R5,#0 LOOP:
JB P3.4,$ ACALL DELAY JB P3.4,LOOP INC R5 ACALL XS LOOP1:
JNB P3.4,$ ACALL DELAY JNB P3.4,LOOP1 INC R5 ACALL XS SJMP LOOP
DELAY: MOV R7,#200 DEL: MOV R6,#229
DJNZ R6,$ DJNZ R7,DEL RET
XS:
MOV DPTR,#TAB MOV A,R5 MOV B,#10H
DIV AB MOV R1,A
MOV A,B MOVC A,@A+DPTR MOV R4,#8 ACALL S164 MOV A,R1
MOVC A,@A+DPTR MOV R4,#8 ACALL S164 MOV A,#0 CLR C MOV R4,#16
ACALL S164 RET S164: RRC A MOV P1.0,C
CLR P1.1
SETB P1.1 DJNZ R4,S164 RET TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
16. 比较片内RAM30H、31H两个单元值的大小,将较大的数显示在数码管上 ORG 0000 SJMP START ORG 0030H START:
MOV SP,#60H MOV DPTR,#0E100H MOV A,#3 MOVX @DPTR,A
MOV 30H,#06H ;随便赋两个值,显示较大的
MOV 31H,#11H
MOV A,30H SUBB A,31H JC SMALL MOV B,#10H MOV A,30H DIV AB MOV 30H,B MOV 31H,A BIG: MOV R0,#30H
MOV R1,#2 MOV R2,#1 ACALL DISPLAY SJMP BIG SMALL: MOV B,#10H
MOV A,31H DIV AB MOV 30H,B MOV 31H,A SMALL1:MOV R0,#30H
MOV R1,#2 MOV R2,#1 ACALL DISPLAY
SJMP SMALL1
DISPLAY:MOV A,@R0 MOV 0FH,#8 ACALL P164 ACALL PBIT ACALL DELAY MOV A,#0 MOVX @DPTR,A INC R0
DJNZ R1,DISPLAY
RET
P164: MOV DPTR,#TAB MOVC A,@A+DPTR P164_1: RRC A MOV R3,A MOV ACC.0,C ANL A,#0FDH MOV DPTR,#0E102H MOVX @DPTR,A ORL A,#0FEH MOVX @DPTR,A MOV A,R3 DJNZ 0FH,P164_1 MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H MOV A,R2 MOVX @DPTR,A RL A MOV R2,A
RET
DELAY: MOV R6,#4 DEL: MOV R7,#250 DJNZ R7,$ DJNZ R6,DEL
RET
TAB:DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB
0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
17. 单片机P1口接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)
ORG 0000H