资源描述
东华理工大学单片机实验程序
实验一:片内RAM30H开始的N个字节的内容送到片外RAM2000H开始的单元中,数据块长度存在2F单元中
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:MOV R0,#30H
MOV DPTR,#2000H
LOOP:MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ 2FH,LOOP
SJMP $
END
二、编程将片外RAM1000H开始的N个单元的内容送到片外RAM2050H开始的单元,N为数据块的长度,存放在片内RAM2FH单元中
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV DPTR,#1000H
MOV P2,#20H
MOV R0,#50H
LOOP:MOVX A,@DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ 2FH ,LOOP
SJMP $
END
三、查表程序
X
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Y
0
1
5
15
16
18
19
21
26
33
32
30
13
11
8
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:MOV A,20H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 21H,A
SJMP $
TAB:DB 0,1,5,15,16,18,19,21
DB 26,33,32,30,13,11,8
END
四、连加程序
MAIN:MOV R0,#30H
MOV R1,#60H
MOV R2,#30H
ACALL SUM
SJMP $
SUM:PUSH PSW
MOV @R1,#0
INC R1
MOV @R1,#0
DEC R1
LOOP:MOV A,@R0
ADD A,@R1
MOV @R1,A
INC R1
MOV A,@R1
ADDC A,#0
MOV @R1,A
DEC R1
INC R0
DJNZ R2,LOOP
POP PSW
RET
END
实验二 多字节数乘法和除法
1.编写一个双字节数乘以单字节数的程序,实现(R4)(R3)×(R2) →(R4)(R3)(R2)。并验证:
BBFFH×BBH,3FFFH×A2H,FFFFH×0AH
MOV A,R3
MOV B,R2
MUL AB
MOV R5,A
MOV R6,B
MOV A,R4
MOV B,R2
MUL AB
ADD A,R6
MOV R6,A
MOV A,B
ADDC A,#00H
MOV R7,A
RET
END
2.编写一个双字节数除以单字节数的程序,实现(R7)(R6) ÷(R5) →(R5)(R6) …(R7)。并验证:
BBFFH÷BBH,3FFFH÷A2H,FFFFH÷0AH
DIVP:MOV A,R7
MOV B,R5
DIV AB
MOV 30H,A
MOV R7,B
LCALL DIVPI
MOV R5,30H
RET
DIVPI:MOV R2,#8
LOOP:CLR C
MOV A,R6
RLC A
MOV R6,A
MOV A,R7
RLC A
MOV R7,A
MOV F0,C
CLR C
SUBB A,R5
ANL C,/F0
JC NEXT
INC R6
MOV R7,A
NEXT:DJNZ R2,LOOP
RET
END
实验三 数制转换
1.编写一个双字节二进制数转换成BCD码数的程序。已知双字节数存放在R3、R2中,转换结果从高位到低位依次放入片内RAM44H~40H单元中。并验证:
5678H、3A5CH、FF00H的转换结果
BTOBCD:CLR A
MOV 52H,A
MOV 51H,A
MOV 50H,A
MOV R1,#16
LOOP:CLR C
MOV A,R6
RLC A
MOV R6,A
MOV A,R7
RLC A
MOV R7,A
MOV A,50H
ADDC A,50H
DA A
MOV 50H,A
MOV A,51H
ADDC A,51H
DA A
MOV 51H,A
MOV A,52H
ADDC A,52H
DA A
MOV 52H,A
DJNZ R1,LOOP
SJMP $
END
实验四 并行口的应用
P1.4~P1.5接两个按钮开关,P1.0~P1.1接两个发光二极管L1、L2,编写一个程序实现模拟汽车转弯灯控制。
P1.5 P1.4
状 态
1 1
L1、L2全灭
1 0
左转灯闪(L1以1Hz的频率闪烁)
0 1
右转灯闪(L2以1Hz的频率闪烁)
0 0
双闪(L1、L2同时以1Hz的频率闪烁)
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:MOV A,P1
SWAP A
ANL A,#03H
CJNE A,#00H,L1
SETB P1.0
CPL P1.1
MOV C,P1.1
MOV P1.0,C
ACALL DEL
SJMP MAIN
L1:CJNE A,#01H,L2
SETB P1.0
CPL P1.1
ACALL DEL
SJMP MAIN
L2:CJNE A,#02H,L3
SETB P1.1
CPL P1.0
ACALL DEL
SJMP MAIN
L3:SETB P1.0
SETB P1.1
SJMP MAIN
DEL: MOV R7,#5
DEL1:ACALL DELAY
DJNZ R7,DEL1
RET
DELAY:MOV R2,#200
LOOPS:MOV B,#248
NOP
DJNZ B,$
DJNZ R2,LOOPS
RET
END
实验六 定时器/计数器及中断的使用
实验电路如右图所示。要求采用定时器/计数器中断方式编程实现八只发光二极管的如下显示方式:
第一秒L1、L3亮,第二秒L2、L4亮,第三秒L5、L7亮,第四秒L6、L8亮,第五秒L1、L3、L5、L7亮,第六秒L2、L4、L6、L8亮,第七秒全亮,第八秒全灭。第九秒以后又从头开始,一直循环下去。
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP TMOO
ORG 0030H
MAIN:MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB ET0
SETB EA
MOV R2,#20
MOV R3,#00
MOV DPTR,#TAB
SETB TR0
SJMP $
TMOO:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R2,EXIT
MOV A,R3
MOVC A,@A+DPTR
MOV P1,A
MOV R2,#20
INC R3
CJNE R3,#08,EXIT
MOV R3,#00
EXIT:RETI
TAB: DB 0FAH,0F5H,0AFH,5FH
DB 0AAH,55H,00,0FFH
END
实验七 静态显示程序
ORG 0000H
MOV SCON,#00
MOV DPTR,#TAB
MOV R0,#30H
MOV R7,#02
LOOP:MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R7,LOOP
RET
TAB:DB 11H,0D7H,98H,92H
DB 56H,32H,30H,97H
DB 10H,12H,14H,70H
DB 39H,0D0H,38H,3CH
END
静态显示自增一
(1) ORG 0000H
SJMP MAIN
ORG 000BH
SJMP TMOO
ORG 0030H
MAIN:MOV 30H,#34H
MOV 31H,#12H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R2,#020
SETB ET0
SETB EA
SETB TR0
SJMP $
TMOO:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R2,EXIT
INC 30H
MOV A,30H
CJNE A,#00H,TMO1
INC 31H
TMO1:ACALL DIS
EXIT:RETI
DIS:MOV SCON,#00
MOV DPTR,#TAB
MOV R0,#30H
MOV R7,#02
LP2:MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
INC R0
DJNZ R7,LP2
RET
TAB:DB 11H,0D7H,98H,92H
DB 56H,32H,30H,97H
DB 10H,12H,14H,70H
DB 39H,0D0H,38H,3CH
END
(2) ORG 0000H
SJMP MAIN
ORG 000BH
SJMP CTOP
ORG 0030H
MAIN: MOV 30H,#21H
MOV 31H,#43H
MOV 32H,#10
MOV TMOD,#01
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0; 启动定时器T0
MOV IE,#82H; ET0为1,定时器0允许中断
SJMP $
CTOP: MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ 32H,RET1
MOV 32H,#10
INC 30H
MOV A,30H
CJNE A,#0,A1
INC 31H
A1: MOV A,30H
ANL A,#0FH
MOV 50H,A
MOV A,30H
ANL A,#0F0H
SWAP A
MOV 51H,A
MOV A,31H
ANL A,#0FH
MOV 52H,A
MOV A,31H
ANL A,#0F0H
SWAP A
MOV 53H,A
DISP: MOV R2,#04
MOV R0,#50H
MOV DPTR,#TAB
LP0: MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R2,LP0
RET1: RETI
TAB: DB 11H,0D7H,98H,92H
DB 56H,32H,30H,97H
DB 10H,12H,14H,70H
DB 39H,0D0H,38H,3CH
END
实验八 动态显示程序
编写一动态显示程序。要求:将片内RAM33H~30H单元中的数显示出来。
ORG 0000H
LP3: MOV R0,#30H
MOV R6,#0DFH
MOV R7,#03
MOV DPTR,#TAB
CLR P2.0
CLR P2.1
LP0: CLR A
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
CLR P2.0 MOV P0,#00
MOV A,R6
MOV P0,A
SETB P2.1
CLR P2.1
RR A
MOV R6,A
DEL0: MOV R5,#250
LP1: NOP
NOP
DJNZ R5,LP1
CLR A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
CLR P2.0
MOV P0,#00
MOV A,R6
MOV P0,A
SETB P2.1
CLR P2.1
RR A
MOV R6,A
INC R0
DEL1: MOV R5,#250
LP2: NOP
NOP
DJNZ R5,LP2
DJNZ R7,LP0
SJMP LP3
TAB: DB 77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FH,79H,33H,7CH,3BH,1BH
END
实验九 键盘显示程序
编写一键盘显示程序。要求:对矩阵键盘进行判键,并采用动态显示,将键码按计算器显示模式进行显示。
ORG 0000H
KPIN: MOV P1,#0F0H ;行线低4位输出低电平
MOV A,P1 ;从高4位读取列线值
ANL A,#0F0H ;屏蔽低4位获得列线值
MOV B,A ;暂存列线值
MOV P1,#0FH ;列线高4位输出低电平
MOV A,P1 ;从低4位读取行线值
ANL A,#0FH ;屏蔽高4位获得行线值
ORL A,B ;行、列值合并,得到按键特征码
CJNE A,#0FFH,KPIN1 ;判断有按键否
MOV 30H,#0FFH
ACALL DISP
AJMP EXIT ;与0FFH相等,无按键,重新扫描
KPIN1: MOV B,A ;有按键,把特征码暂存→B
MOV DPTR,#TABKP ;DPTR指向键码表首地址
MOV R3,#0 ;顺序码初始化
KPIN2: MOV A,R3 ;按顺序码查表
MOVC A,@A+DPTR
CJNE A,B,KPIN3 ;按键特征码与查表特征码比较
MOV A,R3 ;相等,顺序码有效,得到键码→A
CJNE A,30H,DHJ
SJMP DK
DHJ: MOV 30H,R3
MOV 55H,54H
MOV 54H,53H
MOV 53H,52H
MOV 52H,51H
MOV 51H,50H
MOV 50H,A
DK: ACALL DISP
AJMP EXIT
KPIN3: INC R3 ;不相等,调整顺序码,准备查下一个
CJNE A,#0FFH,KPIN2 ;是否为表格结束标志
EXIT: SJMP KPIN ;是,重新扫描
DISP: MOV DPTR,#TAB
MOV R1,#0DFH
MOV R0,#50H
MOV R2,#06
CLR P2.0
CLR P2.1
LOOP:MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
NOP
CLR P2.0
LOOP1:MOV A,R1
MOV P0,A
SETB P2.1
ACALL DEL
CLR P2.1
RR A
MOV R1,A
INC R0
DJNZ R2,LOOP
RET
DEL:MOV R5,#04 ;延时2ms
LOOP2:MOV B,#248
NOP
DJNZ B,$
DJNZ R5,LOOP2
RET
TABKP: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH
DB 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,67H,0FFH
TAB: DB 77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FH
DB 79H,33H,7CH,3BH,1BH
END
展开阅读全文