?? 充氣電纜氣壓自動(dòng)監(jiān)測系統(tǒng).asm
字號(hào):
JC COMP3 ;小于UP的高位,TO COMP3 ,去判斷下限
JNZ COMP1 ;大于UP的高位,TO COMP1 置OVER=1
INC R0 ;等于UP的高位,繼續(xù)判斷
MOV A,ADBUFB
CLR C
SUBB A,@R0
JNC COMP1 ;大于等于UP的低位,TO COMP1 置OVER=1
DEC R0
COMP3:
INC R0
INC R0 ;DOWN
MOV A,ADBUFA
CLR C
SUBB A,@R0
JC COMP1 ;小于 DOWN的低位,TO COMP1,置OVER=1
JNZ COMP4 ;大于 DOWN的低位,TO COMP4, OVER=0,退出
INC R0 ;等于 繼續(xù)判斷
MOV A,ADBUFB
CLR C
SUBB A,@R0
JC COMP1 ;低位<DOWN
COMP4:
CLR OVER
AJMP COMP2
COMP1:
SETB OVER
COMP2:
RET
/****************************************
查表比較修改值是否合理,合理置標(biāo)志OK為1
*****************************************/
CHECK:
MOV DPTR,#TAB ;表地址
MOV A,DMODE ;確定查表位置,與對(duì)應(yīng)的路
RL A ;*2,每路氣壓占兩個(gè)內(nèi)存單元
ADD A,#40H
MOV R0,A
MOV A,DMODE
RL A
RL A
MOV R3,A
MOVC A,@A+DPTR
CLR C
SUBB A,@R0
JC CHECK3 ;UP1<修改值跳轉(zhuǎn),到CHECK3,清OK=0
JNZ CHECK4 ;UP1>修改值,跳到CHECK4,判斷DOWN滿足否
INC R0 ;UP1=修改值,繼續(xù)判斷UP2
INC R3
MOV A,R3
MOVC A,@A+DPTR
CLR C
SUBB A,@R0
JC CHECK3 ;UP2<修改值,清OK=0
DEC R0 ;回到前兩位(DOWN1)
DEC R3
CHECK4: ;跳過來的要+2,否則+1
INC R3
INC R3
MOV A,R3
MOVC A,@A+DPTR
CLR C
SUBB A,@R0
JC CHECK1 ;DOWE1<修改值,置OK=1
JNZ CHECK3 ;DOWN1>修改值,清OK=0
INC R0 ;DOUN1<修改值,繼續(xù)判斷
INC R3
MOV A,R3
MOVC A,@A+DPTR
CLR C
SUBB A,@R0
JC CHECK1 ;DOWN2<修改值,置OK=1 。>= ,CLR OK
;也就是說,修改值<=下限值清0
CHECK3:
CLR OK
AJMP CHECK2
CHECK1:
SETB OK
CHECK2:
RET
/***********************************
刷新顯示緩沖區(qū)
**********************************/
NEWBUF:
MOV R2,#02H ;A,R2,R0,R1
MOV A,DMODE
RL A
ADD A,#40H
MOV R0,A
MOV R1,#32H
NEWBUF1:
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV @R1,A
INC R1
MOV A,@R0
ANL A,#0FH
MOV @R1,A
INC R0
INC R1
DJNZ R2,NEWBUF1
RET
/************************************
刷新顯示內(nèi)容
***********************************/
DYP:
MOV R0,#35H ;R0,R2,R3
MOV R3,#80H
MOV R2,#06H
DYP1:
MOV A,R3
ACALL SENDHD
MOV A,@R0
CJNE R0,#34H,DYP2 ;小數(shù)點(diǎn)!
MOV R4,DMODE
CJNE R4,#9,DYP3 ;顯示時(shí)間時(shí)不要小數(shù)點(diǎn)
AJMP DYP2
DYP3:
ORL A,#80H
DYP2:
ACALL SENDHD
DEC R0
INC R3
DJNZ R2,DYP1
RET
/***************************************
刷新閃爍位
*************************************/
SHINE:
MOV A,#88H ;閃爍
ACALL SENDHD
MOV A,FLASH
ACALL SENDHD
RET
/*****************************************************************************
尺度變換,將000H對(duì)應(yīng)0,將FFF對(duì)應(yīng)2000。根據(jù)分析,可以將數(shù)據(jù)乘125,再除256。乘(128-3)可這樣得到,先左移7位,再減原來數(shù)的2倍,再減原數(shù)值。除以256相當(dāng)于右移8位。
*****************************************************************************/
RULE:
MOV R3,ADBUFA
MOV R4,ADBUFB
MOV R5,#0
MOV R2,#7
RULE1:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R5
RLC A
MOV R5,A
DJNZ R2,RULE1
MOV R7,ADBUFA ;-2*
MOV R6,ADBUFB
CLR C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
JNC RULE2
DEC R5
RULE2:
CLR C
MOV A,R3 ;-1*
SUBB A,ADBUFB
MOV R3,A
MOV A,R4
SUBB A,ADBUFA
MOV R4,A
JNC RULE3
DEC R5
RULE3:
CLR C
MOV R2,#8
RULE4:
MOV A,R5
RRC A
MOV R5,A
MOV A,R4
RRC A
MOV R4,A
MOV A,R3
RRC A
MOV R3,A
DJNZ R2,RULE4
MOV ADBUFB,R3
MOV ADBUFA,R4
RET
/**********************************
通信程序,內(nèi)容有各路氣壓及時(shí)間
*********************************/
RS232:
MOV R0,#40H ;傳送0路氣壓值
MOV A,@R0
ACALL SERIAL
INC R0
MOV A,@R0
ACALL SERIAL
MOV R0,#46H ;傳送3路氣壓值
MOV A,@R0
ACALL SERIAL
INC R0
MOV A,@R0
ACALL SERIAL
MOV R0,#4CH ;傳送6路氣壓值
MOV A,@R0
ACALL SERIAL
INC R0
MOV A,@R0
ACALL SERIAL
MOV R0,#52H ;傳送時(shí)間
MOV R2,#04H
RET
SER1:
MOV A,@R0
ACALL SERIAL
INC R0
DJNZ R2,SER1
RET
SERIAL:
MOV SBUF,A ;發(fā)送子程序
JNB TI,$ ;等待,查詢TI
CLR TI ;查詢結(jié)束,清TI
RET
/***************************************
讀時(shí)鐘芯片
***************************************/
RDTIME:
MOV A,#83H ;分鐘寄存器
ACALL READT ;調(diào)讀DS1302子程序
MOV MINUTE,A ;將分鐘存于MINUTE單元
MOV A,#85H ;小時(shí)寄存器
ACALL READT ;調(diào)讀DS1302子程序
MOV HOUR,A ;將小時(shí)存于HOUR單元
RET
READT:
SETB T_RST ;啟動(dòng)
MOV R2,#8 ;循環(huán)8次
TIMEL1:
RRC A ;寫8位,控制字
MOV T_PIO,C ;寫1位給DS1302
NOP
NOP
SETB T_SCLK ;發(fā)一個(gè)時(shí)鐘信號(hào)
NOP
NOP
CLR T_SCLK
DJNZ R2,TIMEL1 ;循環(huán)8次
NOP
NOP
SETB T_PIO
CLR A
CLR C
MOV R2,#8 ;循環(huán)8次
TIMEL2:
MOV C,T_PIO ;讀1位
RRC A ;存于A
NOP
NOP
SETB T_SCLK ;發(fā)一時(shí)鐘脈沖
NOP
NOP
CLR T_SCLK
DJNZ R2,TIMEL2 ;8次
RET
/**********************************
啟動(dòng)AD轉(zhuǎn)換器
*********************************/
RD_AD:
CLR AD_CLK
SETB AD_CS
CLR AD_CS ;開始一個(gè)工作周期
MOV R4,#08 ;循環(huán)8次
MOV A,R7 ;通道值送A
SWAP A ;高低4位交換,使A成為控制字,控制字的底4位為0
AD1:
MOV C,DOUT ;取TLC2543輸出的一位數(shù)
RLC A
MOV DIN,C ;控制字一位給TLC2543
SETB AD_CLK ;產(chǎn)生一個(gè)時(shí)鐘脈沖
CLR AD_CLK
DJNZ R4,AD1 ;循環(huán)8次
MOV ADBUFA,A ;高8位存于ADBUFA
MOV A,#00H
MOV R4,#04H ;循環(huán)4次,取低4位
AD2:
MOV C,DOUT ;取TLC2543輸出的一位數(shù)
RLC A
SETB AD_CLK ;產(chǎn)生一個(gè)時(shí)鐘脈沖
CLR AD_CLK
DJNZ R4,AD2 ;循環(huán)4次
MOV ADBUFB,A ;低4位給ADBUFB
SETB AD_CS ;關(guān)閉TLC2543
RET
/****************************
寫HD7279
******************************/
SENDHD: ;寫8位
MOV R7,#08H
CLR CS ;使能有效
CALL LONG_DELAY ;長延時(shí)
SEND_LOOP:
RLC A ;將A中的值送入
MOV DAT,C ;送一位
SETB CLK ;發(fā)時(shí)鐘脈沖
CALL SHORT_DELAY ;短延時(shí)
CLR CLK
DJNZ R7,SEND_LOOP ;8次
RET
讀HD7279的鍵值:
READHD:
MOV R7,#08H ;讀8次
SETB DAT ;先寫1
CALL LONG_DELAY 長延時(shí)
READ_LOOP:
SETB CLK ;發(fā)時(shí)鐘脈沖
CALL SHORT_DELAY
RL A
MOV C,DAT
MOV ACC.0,C ;存于A
CLR CLK
CALL SHORT_DELAY ;短延時(shí)
DJNZ R7,READ_LOOP
MOV KYE,A ;將鍵值存放與KYE單元
RET
LONG_DELAY:
MOV TIMER,#25 ;約50us延時(shí)
DELAY_LOOP:
DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY:
MOV TIMER,#4 ;約8us延時(shí)
SHORT_LP:
DJNZ TIMER,SHORT_LP
RET
/*******************************
修改前保存先前值
******************************/
SAVE:
MOV A,DDMODE
RL A ;*2
ADD A,#40H
MOV R0,A
MOV SETBUFA,@R0
INC R0
MOV SETBUFB,@R0
RET
/*****************************************
修改值不合理時(shí),將先前值寫回
****************************************/
RESAVE:
MOV A,DDMODE
RL A
ADD A,#40H
MOV R0,A
MOV @R0,SETBUFA
INC R0
MOV @R0,SETBUFB
RET
/**********************************
格式調(diào)整,要將輸入的0~9轉(zhuǎn)換到相應(yīng)壓縮BCD位
**********************************/
REGULATE:
MOV A,DMODE
RL A
ADD A,#40H
MOV R0,A
JNB FLASH_A,REG1
MOV A,@R0
SWAP A
MOV @R0,A ;1
MOV A,KYE
XCHD A,@R0
MOV A,@R0
SWAP A
MOV @R0,A
MOV FLASH,#00000100B
AJMP REG5
REG1:
JNB FLASH_B,REG2
MOV A,KYE
XCHD A,@R0
MOV FLASH,#00000010B
AJMP REG5
REG2:
INC R0
JNB FLASH_C,REG3
MOV A,@R0
SWAP A
MOV @R0,A ;1
MOV A,KYE
XCHD A,@R0
MOV A,@R0
SWAP A
MOV @R0,A
MOV FLASH,#00000001B
AJMP REG5
REG3:
MOV A,KYE
XCHD A,@R0
MOV FLASH,#00001000B
REG5:
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -