📄 2543.asm
字号:
CLK EQU P2.4
DI EQU P2.5
DO EQU P2.6
CS25 EQU P2.7
ORG 0000H
LJMP START
START: MOV 78H,#00H
MOV 79H,#01H
MOV 7AH,#02H
MOV 7BH,#03H
MOV 7CH,#04H
MOV 7DH,#05H
AA: LCALL ADCJ
; MOV 36H,#0EH
; MOV 37H,#08H
LCALL DISP
MOV 36H,20H
MOV 37H,21H
LCALL BCD
MOV A,38H
MOV B,#10H
DIV AB
MOV 7DH,A
MOV 7CH,B
MOV A,39H
MOV B,#10H
DIV AB
MOV 7BH,A
MOV 7AH,B
MOV A,3AH
MOV B,#10H
DIV AB
MOV 79H,A
MOV 78H,B
LCALL DISP
AJMP AA
;2CH,2BH, 2EH,2FH,30H
BCD:CLR A ;;BCD码初始化
MOV 38H,A
MOV 39H,A
MOV 3AH,A
MOV R2,#10H ;;转换双字节十六进制整数
HB3:MOV A,36H ;;从高端移出待转换数的一位到CY中
RLC A
MOV 36H,A
MOV A,37H
RLC A
MOV 37H,A
MOV A,3AH ;;BCD码带进位自身相加,相当于乘2
ADDC A,3AH
DA A ;;十进制调整
MOV 3AH,A
MOV A,39H
ADDC A,39H
DA A
MOV 39H,A
MOV A,38H
ADDC A,38H
MOV 38H,A ;;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;;处理完16bit
RET
;20H,21H, 22H,23H, 24H,25H, 26H,27H, 28H,29H, 2AH,2BH, 2CH,2D 2EH,2FH, 30H,31H 32H,33H 34H,35H A/D结果首址
; 0 1 2 3 4 5 6 7 8 9 10
ADCJ: MOV R0,#021H
MOV R1,#020H
MOV DPTR,#DZSJ25
;AD采集
MOV R4,#0BH ;五个通道
DTDZ25: MOV R3,#01H ;多通道采值起始,每个4次
DCCZ25: MOV A,#000H
MOVC A,@A+DPTR
LCALL RD_AD
LCALL RD_AD
INC R0
INC R0
INC R1
INC R1
DJNZ R3,DCCZ25
INC DPTR
DJNZ R4,DTDZ25
RET
RD_AD: MOV @R0,#00H ;2543串行数据输出高位
MOV @R1,#00H
CLR CLK
SETB CS25
LCALL DLAY
CLR CS25
MOV R2,#08H
LCALL DLAY
LOP1: LCALL DLAY
MOV C,DO
RLC A
MOV DI,C
SETB CLK
LCALL DLAY
CLR CLK
DJNZ R2,LOP1
SWAP A
XCHD A,@R0 ;EXCHANGE LOW 4 BITS
SWAP A
MOV R2,#04H
LOP2: LCALL DLAY
MOV C,DO
RLC A
SETB CLK
LCALL DLAY
CLR CLK
DJNZ R2,LOP2
MOV @R1,A
SETB CS25
RET
DZSJ25: DB 00H,10H,20H,30H,40H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;扫描显示P0,P2。0-2。5,78-7DH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: MOV R1,#78H ;赋显示数据单元首址
MOV R2,#0FEH ;扫描字
PLAY: MOV P1,#00H ;关显示
MOV A,R2 ;取扫描字
ANL P3,A ;开显示
MOV A,@R1 ;取显示数据
MOV DPTR,#TAB ;取段码表首址
MOVC A,@A+DPTR ;查显示数据对应段码
CJNE R1,#79H,ORLB1
SJMP ORLD0
ORLB1: CJNE R1,#7AH,ORLB2
SJMP ORLD1
ORLB2: CJNE R1,#7BH,ORLE
SJMP ORLD2
ORLD0: ORL A,28H
SJMP ORLE
ORLD1: ORL A,29H
SJMP ORLE
ORLD2: ORL A,30H
ORLE: MOV P1,A
LCALL DL1MS ;显示1MS
INC R1 ;指向下一地址
MOV A,P3 ;取P3口扫描字
JNB ACC.5,ENDOUT ;四位显示完转ENDOUT结束
RL A ;扫描字循环左移
MOV R2,A ;扫描字放入R5暂存
MOV P3,#0FFH ;显示暂停
AJMP PLAY ;转PLAY循环
ENDOUT: MOV P3,#0FFH ;显示结束,端口置1
MOV P1,#00H ;
MOV R0,#00H
RET ;子程序返回
;
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;,77H,7CH,39H,5EH,79H,71H;,40H,00H,76H,38H
; 0 1 2 3 4 5 6 7 8 9 A B C D E F 10- 11 12H 13L
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DLAY: MOV R5,#10H
DLAY1: DJNZ R5,DLAY1
RET
DL1MS: MOV R3,#14H
DL1: MOV R4,#19H
DL2: DJNZ R4,DL2
DJNZ R3,DL1
RET
DL512: MOV R5,#0FFH
LOOP1: DJNZ R5,LOOP1
RET
DL10MS: MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
DL05S: MOV R4,#0FFH
LOOP3: LCALL DL10MS
DJNZ R4,LOOP3
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -