?? 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 + -