📄 ad.asm
字号:
LED_PORT EQU P0
DIG_PORT EQU P2
KEY_PORT EQU P2
ADC_CS BIT P3.5
ADC_CLK BIT P2.1
ADC_DI BIT P3.6
ADC_DO BIT P3.7
BUFF_LED1 EQU 22H
BUFF_LED2 EQU 23H
BUFF_LED3 EQU 24H
BUFF_LED4 EQU 25H
BUFF_LED5 EQU 26H
BUFF_LED6 EQU 27H
BUFF_LED_LP EQU 28H
BUFF_BCD_H EQU 29H
BUFF_BCD_M EQU 2AH
BUFF_BCD_L EQU 2BH
DAT EQU 2DH
F_ADC_CLK BIT 01H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0023H
LJMP 000H
ORG 0100H
MAIN: MOV A, #00H
MOV SP, #40H
MOV IE, #00H
MOV P0, #0FFH
MOV P1, #0FFH
MOV P2, #0FFH
MOV P3, #0FFH
MOV R0,#7FH ;初始化RAM区,
CLR_RAM: MOV A,#00H
MOV @R0,A
DJNZ R0,CLR_RAM
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
MOV BUFF_LED1,#16
MOV BUFF_LED2,#16
MOV BUFF_LED3,#16
MOV TMOD, #11H
SETB TR0
SETB ET0
SETB EA
LCALL DEL
LCALL DEL
MAIN_LP: LCALL ADC_CH1
LCALL BIN_BCD
MOV BUFF_LED4,BUFF_BCD_H
MOV BUFF_LED5,BUFF_BCD_M
MOV BUFF_LED6,BUFF_BCD_L
LCALL DEL
JMP MAIN_LP
;==============延时子程序==============
DEL: MOV R5,#02 ;为演示方便,人为插入的延时
DEL01: MOV R6,#200
DEL02: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL02
DJNZ R5,DEL01
RET
;======ADC0832采集第01信道,读者可根据前文ADC0832的时序图======
ADC_CH1:CLR ADC_CS
NOP
SETB ADC_CS
NOP
MOV R7,#10
DJNZ R7,$
CLR ADC_CS
SETB ADC_DI
ACALL PULSE
ACALL PULSE
ACALL PULSE
MOV R2,#8
DRCL1: ACALL PULSE
MOV C,ADC_DO
RLC A
DJNZ R2,DRCL1
MOV B,A
RR A
MOV R2,#7
DRCR1: ACALL PULSE
MOV C,ADC_DO
RRC A
DJNZ R2,DRCR1
CJNE A,B,ADC_CH1
SETB ADC_CS
CLR ADC_CLK
SETB ADC_DO
SETB ADC_DI
RET
ADC_CH0:CLR ADC_CS ;ADC0832采集第00信道
NOP
SETB ADC_CS
NOP
MOV R7,#10
DJNZ R7,$
CLR ADC_CS
SETB ADC_DI
ACALL PULSE
ACALL PULSE
CLR ADC_DI
ACALL PULSE
SETB ADC_DI
MOV R2,#8
DRCL0: ACALL PULSE
MOV C,ADC_DO
RLC A
DJNZ R2,DRCL0
MOV B,A
RR A
MOV R2,#7
DRCR0: ACALL PULSE
MOV C,ADC_DO
RRC A
DJNZ R2,DRCR0
CJNE A,B,ADC_CH0
SETB ADC_CS
CLR ADC_CLK
SETB ADC_DO
SETB ADC_DI
RET
;===========ADC0832脉冲子程序============
PULSE: SETB F_ADC_CLK ;置标志位
SETB ADC_CLK ;升高ADC0832的时钟端
MOV R3,#4
DJNZ R3,$ ;延时
CLR ADC_CLK ;拉低ADC0832的时钟端
CLR F_ADC_CLK ;清除标志位
MOV R3,#4
DJNZ R3,$
RET
BIN_BCD: MOV B,#10
DIV AB
MOV BUFF_BCD_L,B
;MOV A,B
MOV B,#10
DIV AB
MOV BUFF_BCD_M,B
MOV BUFF_BCD_H,A
RET
;------------- T0 INTRRUPT 数码管扫描定时中断---------------------------
T0_INT: PUSH ACC
PUSH PSW
PUSH B
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
INC BUFF_LED_LP
MOV A,BUFF_LED_LP
CJNE A,#250,CONT_SCAN ;250*4MS=1S
MOV BUFF_LED_LP,#00H
CONT_SCAN:MOV A,BUFF_LED_LP
MOV B,#06
DIV AB
MOV A,B
RL A
MOV DPTR,#TAB_SCAN
JMP @A+DPTR
TAB_SCAN: AJMP SCAN_L1
AJMP SCAN_L2
AJMP SCAN_L3
AJMP SCAN_L4
AJMP SCAN_L5
AJMP SCAN_L6
SCAN_L1: JNB F_ADC_CLK,CON_SN_L1
MOV DIG_PORT,#01111111B
MOV A,BUFF_LED1
JMP END_SCAN
CON_SN_L1:MOV DIG_PORT,#01111101B
MOV A,BUFF_LED1
SCAN_L2: JNB F_ADC_CLK,CON_SN_L2
MOV DIG_PORT,#10111111B
MOV A,BUFF_LED2
JMP END_SCAN
CON_SN_L2:MOV DIG_PORT,#10111101B
MOV A,BUFF_LED2
JMP END_SCAN
SCAN_L3: JNB F_ADC_CLK,CON_SN_L3
MOV DIG_PORT,#11011111B
MOV A,BUFF_LED3
JMP END_SCAN
CON_SN_L3:MOV DIG_PORT,#11011101B
MOV A,BUFF_LED3
JMP END_SCAN
SCAN_L4: JNB F_ADC_CLK,CON_SN_L4
MOV DIG_PORT,#11101111B
MOV A,BUFF_LED4
JMP END_SCAN
CON_SN_L4:MOV DIG_PORT,#11101101B
MOV A,BUFF_LED4
JMP END_SCAN
SCAN_L5: JNB F_ADC_CLK,CON_SN_L5
MOV DIG_PORT,#11110111B
MOV A,BUFF_LED5
JMP END_SCAN
CON_SN_L5:MOV DIG_PORT,#11110101B
MOV A,BUFF_LED5
JMP END_SCAN
SCAN_L6: JNB F_ADC_CLK,CON_SN_L6
MOV DIG_PORT,#11111011B
MOV A,BUFF_LED6
JMP END_SCAN
CON_SN_L6:MOV DIG_PORT,#11111001B
MOV A,BUFF_LED6
END_SCAN: MOV DPTR,#TAB_LED
MOVC A,@A+DPTR
MOV LED_PORT,A
POP B
POP PSW
POP ACC
RETI
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;数码管显示字型表
DB 82H,0F8H,80H,90H,88H,83H,0A7H
DB 0A1H,86H,8EH,0FFH
END
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -