📄 gaixian.asm
字号:
;WMCON DATA 96H
sfr WMCON = 0x96;
; /* Watchdog and Memory Control Register */
FO BIT PSW.5
SCL BIT P1.1
SCL1 BIT P3.3
SDA BIT P1.0
SDA1 BIT P3.2
SDA2 BIT P3.4
SCL2 BIT P3.5
DMPOS BIT P1.3
;LEDD BIT P3.0
;LEDC BIT P3.1
;CS0 BIT P1.2 ;没有通讯显示,老程序
LEDD BIT P0.2
LEDC BIT P0.1
CS0 BIT P0.0 ;有通讯显示,新程序
;CS0 FOR 74LS164,LED
;SCL/SDA :IIC BUS
PRST BIT 00H
RSTA BIT 01H
RSTB BIT 02H
RSTC BIT 03H
ADOK BIT 04H
DPPOS BIT 05H
MAXE EQU 06H
HUP EQU 07H
NH EQU 08H
;NH=1 => h<0
BIG_JMP EQU 09H
ADSADDA EQU 94H
ADSADDB EQU 94H
ADSADDC EQU 94H
ADSREGA EQU 8CH
ADSREGBC EQU 94H
;ADS110'S reg ,TYPE:0X8C,0X90
SLA EQU 23H
MTD EQU 24H
NUMBYTE EQU 25H
;ADS' CTRL BYTE,OUT BUF ADDR,WRITE BYTE LEN
MRD EQU 26H
;ADS' IN BUF ADDR
DSPBUF EQU 30H
;DISPLAY 30-31-32-33
ADVNUM EQU 34H
ADVMAX EQU 35H
ADVPGA EQU 36H
ADVADDRS EQU 37H
ADVADDRT EQU 3AH
;MAX ADV SUM save to 37-38-39,TMP ADV save to 3a-3b-3c
ADVAVRN EQU 3DH
ADVAVRM EQU 3EH
ADVAVRA EQU 3FH
TEMPADDR EQU 40H
RRCGB EQU 41H
LASTH_H EQU 42H
LASTH_L EQU 43H
FIL_H EQU 44H
FIL_L EQU 45H
DIV2_H EQU 46H
DIV2_L EQU 47H
V2_H EQU 44H
V2_L EQU 45H
H2_H EQU 46H
H2_L EQU 47H
V1_H EQU 48H
V1_L EQU 49H
H1_H EQU 4AH
H1_L EQU 4BH
P5P4 EQU 4CH
ADV_SV_B EQU 50H
shuju equ 5ah
;50H+3*ADVAVRM
MAIN: MOV WMCON,#0C3H
MOV SP,#0E0H
;JB PRST,MAIN1
SETB PRST
CLR NH
MOV PSW,#0
mov tmod,#20h
mov th1,#0fdh ;baud,ff:56k,fd,19600
mov tl1,#0fdh ;baud
setb tr1
mov scon,#0C0h
mov pcon,#80h ;baud double
MOV ADVNUM ,#0
MOV ADVMAX ,#4
MOV ADVPGA ,#0
MOV ADVADDRS ,#0
MOV ADVADDRS+1 ,#0
MOV ADVADDRS+2 ,#0
MOV ADVADDRT ,#0
MOV ADVADDRT+1 ,#0
MOV ADVADDRT+2 ,#0
MOV LASTH_H ,#0
MOV LASTH_l ,#0
MOV ADVAVRN ,#0
SETB P1.5
SETB P1.4
CLR A
MOV C,P1.5
CPL C
RLC A
MOV C,P1.4
CPL C
RLC A
MOV P5P4,A
MOV ADVAVRM,#9
JZ DISJ0JF
MOV B,#4
MUL AB
CLR C
SUBB A,#2
MOV ADVAVRM,A
DISJ0JF: MOV RRCGB ,#5
MOV ADVAVRA,#ADV_SV_B
MOV DSPBUF ,#30
MOV DSPBUF+1 ,#24
MOV DSPBUF+2 ,#23
MOV DSPBUF+3 ,#0
CLR ADOK
LCALL DISPLAY
LCALL RSTADSA
MOV DSPBUF ,#30
MOV DSPBUF+1 ,#24
MOV DSPBUF+2 ,#23
MOV DSPBUF+3 ,#1
CLR ADOK
LCALL DISPLAY
LCALL RSTADSB
MOV DSPBUF ,#30
MOV DSPBUF+1 ,#24
MOV DSPBUF+2 ,#23
MOV DSPBUF+3 ,#2
CLR ADOK
LCALL DISPLAY
LCALL RSTADSC
MAIN1:
MOV DSPBUF ,#0
MOV DSPBUF+1 ,#0
MOV DSPBUF+2 ,#0
MOV DSPBUF+3 ,P5P4
LCALL DISPLAY
mov r7,#255
mov r5 ,#00h
MOV DPTR,#0000H
bijiao: mov dpl ,r5
ORL WMCON,#08H
mov a,#00h
MOVX A,@DPTR
mov shuju,a
mov a,r5
mov dptr ,#biao
movc a ,@a+dptr
cjne a,shuju ,gengai
bijiao1: mov dptr ,#0000h
inc r5
mov dpl ,r5
djnz r7 ,bijiao
LJMP M_LOOP
gengai: orl WMCON,#10h
mov dptr ,#0000h
mov dpl ,r5
movx @dptr ,a
mov r6 ,#100
ddd: lcall delay40u
djnz r6 ,ddd
anl WMCON,#0efh
sjmp bijiao1
M_LOOP: anl WMCON,#0f7h
MOV R7,ADVMAX
MOV ADVADDRS,#0
MOV ADVADDRS+1,#0
MOV ADVADDRS+2,#0
M_RD_ADV:LCALL READA ;RDA_GET;
ORL WMCON,#02H
MOV R0,#ADVADDRS+2
MOV R1,#ADVADDRT+2
MOV R2,#3
LCALL ADD_UCH
DJNZ R7,M_RD_ADV
LCALL RSTADSB
LCALL RSTADSC
MOV R0,#ADVADDRS+2
MOV R1,ADVAVRA
MOV R2,#3
M_SV_ADV:MOV A,@R0
MOV @R1,A
INC R1
DEC R0
DJNZ R2,M_SV_ADV
MOV ADVAVRA,R1
JNB ADOK,M_SV_NEXT
LCALL CALC_H
;AD Value save in 2eh 2dl,max=0xffff
;
MOV R2,2EH
MOV R3,2DH
;LCALL READC
;MOV R2,ADVADDRT
;MOV R3,ADVADDRT+1
LCALL HEX2BCD
MOV R1,#DSPBUF
LCALL BCDEXPD
JNB NH,M_SV_SHOW
MOV DSPBUF,#31
SETB DMPOS
MOV C,DMPOS
MOV DPPOS,C
JC M_SV_SHOW
MOV DSPBUF,#32
M_SV_SHOW:LCALL DISPLAY
M_SV_NEXT:INC ADVAVRN
MOV A,ADVAVRN
CJNE A,ADVAVRM,M_SV_OK?
M_SV_OK?:JC M_LOOP
SETB ADOK
MOV ADVAVRN,#0
MOV ADVAVRA,#ADV_SV_B
SJMP M_LOOP
RET
;UNIVERSAL IIC CONTROL FUNCTION---BEGIN
IICSTA: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
IICSTOP: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
IICACK_O:CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
IICACK_I:SETB SDA
SETB SCL
NOP
NOP
NOP
MOV C,SDA
MOV FO,C
CLR SCL
NOP
NOP
RET
;WRITE OUT ACC,ONE BYTE
IICWRB: MOV R7,#8
IICWLP: RLC A
JC IICWR1
CLR SDA
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
NOP
DJNZ R7,IICWLP
RET
IICWR1: SETB SDA
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
NOP
DJNZ R7,IICWLP
RET
;READ IN ACC ONE BYTE
IICRDB: MOV R7,#8
IICRLP: SETB SDA
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
NOP
DJNZ R7,IICRLP
RET
;UNIVERSAL IIC CONTROL FUNCTION---BEGIN
IICSTA1: SETB SDA1
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA1
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
RET
IICSTOP1: CLR SDA1
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
SETB SDA1
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
RET
IICACK_O1:CLR SDA1
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
RET
IICACK_I1:SETB SDA1
SETB SCL1
NOP
NOP
NOP
MOV C,SDA1
MOV FO,C
CLR SCL1
NOP
NOP
RET
;WRITE OUT ACC,ONE BYTE
IICWRB1: MOV R7,#8
IICWLP1: RLC A
JC IICWR11
CLR SDA1
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
NOP
DJNZ R7,IICWLP1
RET
IICWR11: SETB SDA1
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
NOP
DJNZ R7,IICWLP1
RET
;READ IN ACC ONE BYTE
IICRDB1: MOV R7,#8
IICRLP1: SETB SDA1
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL1
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,SDA1
RLC A
CLR SCL1
NOP
NOP
NOP
DJNZ R7,IICRLP1
RET
;UNIVERSAL IIC CONTROL FUNCTION---BEGIN
IICSTA2: SETB SDA2
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA2
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL2
NOP
NOP
RET
IICSTOP2: CLR SDA2
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
SETB SDA2
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL2
NOP
NOP
RET
IICACK_O2:CLR SDA2
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL2
NOP
NOP
RET
IICACK_I2:SETB SDA2
SETB SCL2
NOP
NOP
NOP
MOV C,SDA2
MOV FO,C
CLR SCL2
NOP
NOP
RET
;WRITE OUT ACC,ONE BYTE
IICWRB2: MOV R7,#8
IICWLP2: RLC A
JC IICWR12
CLR SDA2
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL2
NOP
NOP
NOP
DJNZ R7,IICWLP2
RET
IICWR12: SETB SDA2
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL2
NOP
NOP
NOP
DJNZ R7,IICWLP2
RET
;READ IN ACC ONE BYTE
IICRDB2: MOV R7,#8
IICRLP2: SETB SDA2
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL2
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,SDA2
RLC A
CLR SCL2
NOP
NOP
NOP
DJNZ R7,IICRLP2
RET
;WRITE OUT CtrlByte 'SLA',then write NUMBYTE,from addr 'MTD'
IICWRBS: PUSH PSW
MOV PSW,#18H
IICWRBSL:CALL IICSTA
MOV A,SLA
CALL IICWRB
CALL IICACK_I
JB FO,IICWRBSL
MOV R0,MTD
MOV R5,NUMBYTE
IICWRDA: MOV A,@R0
LCALL IICWRB
LCALL IICACK_I
JB FO,IICWRBSL
INC R0
DJNZ R5,IICWRDA
LCALL IICSTOP
POP PSW
RET
IICWRBS1: PUSH PSW
MOV PSW,#18H
IICWRBSL1:CALL IICSTA1
MOV A,SLA
CALL IICWRB1
CALL IICACK_I1
JB FO,IICWRBSL1
MOV R0,MTD
MOV R5,NUMBYTE
IICWRDA1:MOV A,@R0
LCALL IICWRB1
LCALL IICACK_I1
JB FO,IICWRBSL1
INC R0
DJNZ R5,IICWRDA1
LCALL IICSTOP1
POP PSW
RET
IICWRBS2: PUSH PSW
MOV PSW,#18H
IICWRBSL2:CALL IICSTA2
MOV A,SLA
CALL IICWRB2
CALL IICACK_I2
JB FO,IICWRBSL2
MOV R0,MTD
MOV R5,NUMBYTE
IICWRDA2:MOV A,@R0
LCALL IICWRB2
LCALL IICACK_I2
JB FO,IICWRBSL2
INC R0
DJNZ R5,IICWRDA2
LCALL IICSTOP2
POP PSW
RET
;READ :Write out CtrlByte 'SLA',then Read NUMBYTE,save addr 'MRD'
IICRDBS: PUSH PSW
MOV PSW,#18H
IICRDBSL:CALL IICSTA
MOV A,SLA
CALL IICWRB
CALL IICACK_I
JB FO,IICRDBSL
MOV R1,MRD
IICRDDA: LCALL IICRDB
MOV @R1,A
LCALL IICACK_O
INC R1
DJNZ NUMBYTE,IICRDDA
LCALL IICSTOP
POP PSW
RET
IICRDBS1: PUSH PSW
MOV PSW,#18H
IICRDBSL1:CALL IICSTA1
MOV A,SLA
CALL IICWRB1
CALL IICACK_I1
JB FO,IICRDBSL1
MOV R1,MRD
IICRDDA1: LCALL IICRDB1
MOV @R1,A
LCALL IICACK_O1
INC R1
DJNZ NUMBYTE,IICRDDA1
LCALL IICSTOP1
POP PSW
RET
IICRDBS2: PUSH PSW
MOV PSW,#18H
IICRDBSL2:CALL IICSTA2
MOV A,SLA
CALL IICWRB2
CALL IICACK_I2
JB FO,IICRDBSL2
MOV R1,MRD
IICRDDA2: LCALL IICRDB2
MOV @R1,A
LCALL IICACK_O2
INC R1
DJNZ NUMBYTE,IICRDDA2
LCALL IICSTOP2
POP PSW
RET
;UNIVERSAL IIC CONTROL FUNCTION---END
;Ads110 CONTROL FUNCTION -------- Begin
RSTADSA: MOV SLA,#ADSADDA
MOV A,ADVPGA
ADD A,#ADSREGA
MOV TEMPADDR,A
MOV MTD,#TEMPADDR
MOV NUMBYTE,#1
LCALL IICWRBS
SETB RSTA
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -