|
本帖最后由 haikuotian 于 2020-5-5 20:40 編輯
還在改寫,完善中
;可充電電池測試器程序2020 05 1 STC12C5A60S2
ORG 0000H ;
LJMP CHUSI
ORG 0003H
RETI
ORG 000BH ;定時(shí)器0中斷向量用于顯示
LJMP XIANSHI ;點(diǎn)亮8位顯示器
ORG 0013H
RETI
ORG 001BH ;定時(shí)器1中斷向量
RETI
ORG 0023H ;串口中斷向量
RETI ;串口中斷響應(yīng)
RETI
NOP
NOP
NOP
NOP
ORG 0064H ;初始化和定義寄存器用途
CHUSI: CLR A ;清零
MOV 87H,A ;置CPU功率方式
MOV IE,A ;禁止中斷
MOV IP,A ;禁止中斷優(yōu)先控制
MOV SCON,A ;關(guān)閉串行控制
MOV TMOD,A ;計(jì)數(shù)器控制
MOV TCON,A ;計(jì)數(shù)器控制
SETB P1.0 ;放電電流檢測片選IC5 0有效
SETB P1.2 ;充電電流檢測片選IC3 0有效
SETB P1.4 ;電壓檢測片選IC4 0有效
SETB P1.1 ;SDO數(shù)據(jù)線
CLR P1.3 ;SCLK 讀取用移位脈沖 超過高電平2ms會(huì)休眠
SETB P1.5 ;空 用于測試
SETB P1.6 ;溫度讀取
SETB P1.7 ;放電控制 0放 1停
SETB P3.2 ;充電控制 0充 1停
MOV P0,#0FFH ;用于顯示劃驅(qū)動(dòng) 低有效
MOV P2,#0FFH ;用于顯示位驅(qū)動(dòng)P2.7 第一位 P2.0 第8位
MOV 20H,#0H ; A/D 轉(zhuǎn)換暫存數(shù)據(jù)高8位07-00
MOV 21H,#0H ; A/D 轉(zhuǎn)換暫存數(shù)據(jù)低8位0F-08
MOV 22H,#0H ;02 電壓A/D1 1轉(zhuǎn)換后數(shù)據(jù)高8位
MOV 23H,#0H ;03 電壓A/D1 1轉(zhuǎn)換后數(shù)據(jù)低8位
MOV 24H,#0H ;04 電流A/D2 轉(zhuǎn)換后數(shù)據(jù)高8位
MOV 25H,#0H ;05 電流A/D2 轉(zhuǎn)換后數(shù)據(jù)高8位
MOV 26H,#0H ;06 電壓A/D1 2轉(zhuǎn)換后數(shù)據(jù)高8位
MOV 27H,#0H ;07 電壓A/D1 2轉(zhuǎn)換后數(shù)據(jù)低8位
MOV 28H,#0H ;08 18B20
MOV 29H,#0H ;09 18B20
MOV 2AH,#1H ;10 存預(yù)設(shè)充電終止電壓 伏特位
MOV 2BH,#5H ;11 存預(yù)設(shè)充電終止電壓 百毫伏特位
MOV 2CH,#6H ;12 存預(yù)設(shè)充電終止電壓 十毫伏特位
MOV 2DH,#7H ;13 存預(yù)設(shè)充電終止電壓 毫伏特位
MOV 2EH,#3H ;14 充/放電標(biāo)志 3停/1充/2放
MOV 2FH,#0H ;15
MOV 30H,#0H ;16 顯示計(jì)數(shù)器
MOV 31H,#0H ;17 顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 伏特位
MOV 32H,#0H ;18 顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 百毫伏特位
MOV 33H,#0H ;19 顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 十毫伏特位
MOV 34H,#0H ;20 顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 毫伏特位
MOV 35H,#0BFH ;21 顯示存儲器 顯示設(shè)定狀態(tài) A劃/D劃 FEH/F7H
MOV 36H,#0H ;22 顯示存儲器 模數(shù)轉(zhuǎn)換后電流 百毫安培位
MOV 37H,#0H ;23 顯示存儲器 模數(shù)轉(zhuǎn)換后電流 十毫安培位
MOV 38H,#0H ;24 顯示存儲器 模數(shù)轉(zhuǎn)換后電流 毫安培位
MOV 39H,#8H ;25 充/過放計(jì)數(shù)器
MOV 3AH,#0H ;26 存預(yù)設(shè)放電終止電壓 伏特位
MOV 3BH,#8H ;27 存預(yù)設(shè)放電終止電壓 百毫伏特位
MOV 3CH,#7H ;28 存預(yù)設(shè)放電終止電壓 十毫伏特位
MOV 3DH,#6H ;29 存預(yù)設(shè)放電終止電壓 毫伏特位
MOV 3EH,#0H ;30 充/放電計(jì)數(shù)器 小時(shí)(16進(jìn)制)
MOV 3FH,#0H ;31 充/放電計(jì)數(shù)器 分鐘(16進(jìn)制)
MOV 40H,#0H ;32 充/放電計(jì)數(shù)器 秒(60進(jìn)制)
MOV 41H,#0H ;33 發(fā)送代碼和
MOV 42H,#0H ;34 臨時(shí)計(jì)數(shù)器
MOV 43H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 44H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 45H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 46H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 47H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 48H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 49H,#0H ;臨時(shí)計(jì)數(shù)器
MOV 91H,#0H ;設(shè)定P1.7輸出推挽模式 STC12C5A60S2 P1M1
MOV 92H,#80H ;設(shè)定P1.7輸出推挽模式 STC12C5A60S2 P1M0
MOV 0B1H,#0H ;設(shè)定P3.2輸出推挽模式 STC12C5A60S2 P3M1
MOV 0B2H,#04H ;設(shè)定P3.2輸出推挽模式 STC12C5A60S2 P3M0
MOV 0BBH,#70H ;設(shè)定P4(C0) -4-5-6 I/O 模式端口在 C4H C5H C6H
MOV 0B3H,#0H ;設(shè)定P4 普通弱上拉
MOV 0B4H,#0H ;設(shè)定P4 普通弱上拉
MOV 0C1H,#0H ;不使用看門狗
MOV SP,#80H ;設(shè)置棧底
SETB TR0 ;使用11059200晶振
MOV 87H,#0H ;波特率不加倍
MOV 8EH,#11H ;使用獨(dú)立波特率發(fā)生器STC12C5A60S2
MOV 9CH,#0F4H ;獨(dú)立波特率發(fā)生器重裝寄存器(2400BT)
MOV 8AH,#0H ;定時(shí)器0 16位計(jì)數(shù)低8位
MOV 8CH,#0F7H ;16位計(jì)數(shù)高8位 4毫秒中斷 顯示用
;定時(shí)器0 方式2 8位自動(dòng)重裝入定時(shí)器1 工作1 16位計(jì)數(shù)器
NOP ; TMOD GATE C/T M1 M0 GATE C/T M1 M0
MOV TMOD,#11H ;定時(shí)/計(jì)數(shù) 0 0 0 1 0 0 0 1
;
NOP ; TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
MOV TCON,#10H ;啟動(dòng)定時(shí)器 0 0 0 1 0 0 0 0
; SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
MOV SCON,#40H ; 0 1 0 0 0 0 0 0
MOV IP,#0H ;中斷優(yōu)先控制 X X PT2 PS PT1 PX1 PT0 PX0
; 0 0 0 0 0 0 0 0
;
;中斷控制 EA - ET2 ES ET1 EX1 ET0 EX0
MOV IE,#10000010B; 1 0 0 0 0 1 0
;
NOP
NOP
NOP
KAISHI: NOP ;顯示開機(jī)畫面12345678
MOV 0C1H,#0H ;不使用看門狗
MOV 31H,#1H ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 伏特位
MOV 32H,#2H ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 百毫伏特位
MOV 33H,#3H ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 十毫伏特位
MOV 34H,#4H ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 毫伏特位
MOV 35H,#92H ;顯示存儲器 顯示設(shè)定狀態(tài) A劃/D劃 FEH/F7H
MOV 36H,#6H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 百毫安培位
MOV 37H,#7H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 十毫安培位
MOV 38H,#8H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 毫安培位
MOV 44H,#30 ;延時(shí)3秒
YS1: LCALL YSCX100 ;延時(shí)100mS
DJNZ 44H,YS1 ;重復(fù)30次 滅一下
MOV 31H,#0FFH ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 伏特位
MOV 32H,#0FFH ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 百毫伏特位
MOV 33H,#0FFH ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 十毫伏特位
MOV 34H,#0FFH ;顯示存儲器 存模數(shù)轉(zhuǎn)換后電壓 毫伏特位
MOV 35H,#0BFH ;顯示存儲器 顯示設(shè)定狀態(tài) A劃/D劃 FEH/F7H
MOV 36H,#0FFH ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 百毫安培位
MOV 37H,#0FFH ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 十毫安培位
MOV 38H,#0FFH ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 毫安培位
MOV 0C1H,#0H ;不使用看門狗
MOV 44H,#20 ;延時(shí)2秒
YS2: LCALL YSCX100 ;延時(shí)100mS
DJNZ 44H,YS2 ;重復(fù)20次
LCALL DYCS2 ;無顯示測電壓 估算電源電壓
NOP
MOV A,#60H ;大約2.4伏
CJNE A,26H,P26DX ;和26H數(shù)據(jù)比較2.5伏分界
LJMP JC012
P26DX: JNC JC012 ;如果超過2.4 就設(shè)成4.312 和 2.876
MOV 2AH,#4H ;存預(yù)設(shè)充電終止電壓 伏特位
MOV 2BH,#3H ;存預(yù)設(shè)充電終止電壓 百毫伏特位
MOV 2CH,#1H ;存預(yù)設(shè)充電終止電壓 十毫伏特位
MOV 2DH,#2H ;存預(yù)設(shè)充電終止電壓 毫伏特位
MOV 3AH,#2H ;存預(yù)設(shè)放電終止電壓 伏特位
MOV 3BH,#8H ;存預(yù)設(shè)放電終止電壓 百毫伏特位
MOV 3CH,#7H ;存預(yù)設(shè)放電終止電壓 十毫伏特位
MOV 3DH,#6H ;存預(yù)設(shè)放電終止電壓 毫伏特位
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
JC012: NOP ;程序從這里開始
MOV 0C1H,#0H ;不使用看門狗
NOP ;檢查按鍵 S1(P36)S2(P37)S3(P35)S4(P34)S5(P33)
ANJIAN: NOP
JNB P3.6,S1 ;檢查S1 0轉(zhuǎn)移
JNB P3.7,S2 ;檢查S2 0轉(zhuǎn)移
JNB P3.5,S3 ;檢查S3 0轉(zhuǎn)移
JNB P3.4,S4 ;檢查S4 0轉(zhuǎn)移
JNB P3.3,S5 ;檢查S5 0轉(zhuǎn)移
AJFH: LJMP JC0121 ;沒有按鍵 轉(zhuǎn)移到工作
S1: LJMP S1C
S2: LJMP S2C
S3: LJMP S3C
S4: LJMP S4C
S5: LJMP S5C
NOP
S1C: LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
JB P3.6,AJFH ;檢查S1 1轉(zhuǎn)移 沒按則轉(zhuǎn)移
MOV A,2EH ;2E存工作模式
CJNE A,#1,XSF2 ;顯充電終止電壓
MOV 31H,2AH ;充電
MOV 32H,2BH
MOV 33H,2CH
MOV 34H,2DH
LJMP S1T2
XSF2: CJNE A,#2,XSF3 ;顯放電終止電壓
MOV 31H,3AH ;放電
MOV 32H,3BH
MOV 33H,3CH
MOV 34H,3DH
LJMP S1T2
XSF3: LJMP JC0121
S1T2: JB P3.7,S1T3 ;若S2未按 則檢查S3 1轉(zhuǎn)移 調(diào)第一位
LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
MOV A,2EH ;若按 則判2E是1或2
CJNE A,#1,TZFD1 ;調(diào)整充電終止電壓
INC 2AH
MOV A,2AH
CJNE A,#5,S1T1XH
MOV 2AH,#1
S1T1XH: MOV 31H,2AH ;顯充電終止值
MOV 32H,2BH
MOV 33H,2CH
MOV 34H,2DH
S1FH1: LJMP JC012
TZFD1: CJNE A,#2,S1FH1 ;調(diào)整放電終止電壓
DEC 3AH
MOV A,3AH
CJNE A,#0FFH,S1T2XH
MOV 3AH,#4
S1T2XH: MOV 31H,3AH ;放電
MOV 32H,3BH
MOV 33H,3CH
MOV 34H,3DH
LJMP JC012 ;顯充電終止值
S1T3: JB P3.5,S1T4 ;若S2未按 則檢查S3 1轉(zhuǎn)移 調(diào)第二位
LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
MOV A,2EH ;若按 則判2E是1或2
CJNE A,#1,TZFD2 ;調(diào)整充電終止電壓
INC 2BH
MOV A,2BH
CJNE A,#10,S1T3XH
MOV 2BH,#0
S1T3XH: MOV 31H,2AH ;顯充電終止值
MOV 32H,2BH
MOV 33H,2CH
MOV 34H,2DH
LJMP JC012
TZFD2: CJNE A,#2,S1FH1 ;調(diào)整放電終止電壓
DEC 3BH
MOV A,3BH
CJNE A,#0FFH,S1T4XH
MOV 3BH,#9
S1T4XH: MOV 31H,3AH ;放電
MOV 32H,3BH
MOV 33H,3CH
MOV 34H,3DH
LJMP JC012 ;顯充電終止值
S1T4: JB P3.4,S1T5 ;若S2未按 則檢查S3 1轉(zhuǎn)移 第三位
LCALL YSCX100 ;調(diào)用防抖
MOV A,2EH ;若按 則判2E是1或2
CJNE A,#1,TZFD3 ;調(diào)整充電終止電壓
INC 2CH
MOV A,2CH
CJNE A,#10,S1T5XH
MOV 2CH,#0
S1T5XH: MOV 31H,2AH ;顯充電終止值
MOV 32H,2BH
MOV 33H,2CH
MOV 34H,2DH
LJMP JC012
TZFD3: CJNE A,#2,S1FH ;調(diào)整放電終止電壓
DEC 3CH
MOV A,3CH
CJNE A,#0FFH,S1T6XH
MOV 3CH,#9
S1T6XH: MOV 31H,3AH ;放電
MOV 32H,3BH
MOV 33H,3CH
MOV 34H,3DH
LJMP JC012 ;顯充電終止值
S1T5: JB P3.3,S1T6 ;若S2未按 則檢查S3 1轉(zhuǎn)移 第四位
LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
MOV A,2EH ;若按 則判2E是1或2
CJNE A,#1,TZFD5 ;調(diào)整充電終止電壓
INC 2DH
MOV A,2DH
CJNE A,#10,S1T7XH
MOV 2DH,#0
S1T7XH: MOV 31H,2AH ;顯充電終止值
MOV 32H,2BH
MOV 33H,2CH
MOV 34H,2DH
LJMP JC012
TZFD5: CJNE A,#2,S1FH ;調(diào)整放電終止電壓
DEC 3DH
MOV A,3DH
CJNE A,#0FFH,S1T8XH
MOV 3DH,#9
S1T8XH: MOV 31H,3AH ;放電
MOV 32H,3BH
MOV 33H,3CH
MOV 34H,3DH
S1T6: NOP
S1FH: LJMP JC012
S5CFH: LJMP JC0121
S5C: LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
JB P3.3,S5CFH ;檢查S5 1轉(zhuǎn)移 沒按則轉(zhuǎn)移 防抖
MOV 2EH,#1 ;充電
MOV 35H,#0FEH
MOV 3EH,#0H ;充/放電計(jì)數(shù)器 小時(shí)(16進(jìn)制)
MOV 3FH,#0H ;充/放電計(jì)數(shù)器 分鐘(16進(jìn)制)
MOV 40H,#0H ;充/放電計(jì)數(shù)器 秒(60進(jìn)制)
MOV 39H,#0 ;過濾器
LJMP JC0121
S4C: LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
JB P3.4,S1FH ;檢查S2 1轉(zhuǎn)移 沒按則轉(zhuǎn)移
MOV 2EH,#2 ;放電
MOV 35H,#0F7H
MOV 3EH,#0H ;充/放電計(jì)數(shù)器 小時(shí)(16進(jìn)制)
MOV 3FH,#0H ;充/放電計(jì)數(shù)器 分鐘(16進(jìn)制)
MOV 40H,#0H ;充/放電計(jì)數(shù)器 秒(60進(jìn)制)
MOV 39H,#0 ;過濾器
LJMP JC0121
S3C: LCALL YSCX100 ;調(diào)用防抖 顯示終止電壓
JB P3.5,JC0121 ;檢查S2 1轉(zhuǎn)移 沒按則轉(zhuǎn)移
MOV 2EH,#3 ;暫停
MOV 35H,#0BFH
MOV 3EH,#0H ;充/放電計(jì)數(shù)器 小時(shí)(16進(jìn)制)
MOV 3FH,#0H ;充/放電計(jì)數(shù)器 分鐘(16進(jìn)制)
MOV 40H,#0H ;充/放電計(jì)數(shù)器 秒(60進(jìn)制)
MOV 39H,#0 ;過濾器
LJMP JC0121
NOP
NOP
NOP
S2C: LJMP CHUSI
NOP
NOP
NOP
JC0121: MOV 0C1H,#0H ;不使用看門狗
NOP ;檢查2EH有關(guān)鍵字 1 2 3
MOV A,2EH ;讀2EH到A
CJNE A,#3,JCS1 ;2EH是0 轉(zhuǎn)移到空操作
LJMP KCZ
JCS1: CJNE A,#1,JCS2 ;2EH 不是1 轉(zhuǎn)移到放電操作
LJMP CDCZ
JCS2: CJNE A,#2,JCS3
LJMP FDCZ
JCS3: LJMP KCZ
NOP
NOP
NOP
CDCZ: LJMP CDCZKS ;轉(zhuǎn)到充電操作
NOP
FDCZ: LJMP FDCZKS ;2EH 是2 轉(zhuǎn)移到放電操作
NOP
KCZ: NOP ;轉(zhuǎn)到空操作
NOP ;空操作 測試電壓,發(fā)送數(shù)據(jù),延時(shí)
SETB P3.2 ;低電平充電,高停
SETB P1.7 ;低電平放電 高停
LCALL DYCS1 ;監(jiān)測電池電壓 P14
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
CXS: MOV 36H,#0H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 百毫安培位
MOV 37H,#0H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 十毫安培位
MOV 38H,#0H ;顯示存儲器 模數(shù)轉(zhuǎn)換后電流 毫安培位
MOV 24H,#0 ;清除殘存
MOV 25H,#0 ;清除殘存
MOV 26H,#0 ;清除殘存
MOV 27H,#0 ;清除殘存
LCALL FS232 ;調(diào)用發(fā)送232程序
LCALL WDCS ;調(diào)用溫度測試程序
LJMP JC012 ;轉(zhuǎn)到下一周期
NOP
NOP
NOP
CDCZKS: NOP ;充電操作 測試電壓,發(fā)送數(shù)據(jù),延時(shí)
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DYCS1 ;調(diào)用電壓轉(zhuǎn)換程序 無充電測試 P14
NOP ;以下判別充電到位過充
MOV A,2AH ;讀取預(yù)存千位
CJNE A,31H,KYCD ;不相等 轉(zhuǎn)移
MOV A,2BH ;讀取預(yù)存百位
CJNE A,32H,KYCD ;不相等 轉(zhuǎn)移
MOV A,2CH ;讀取預(yù)存十位
CJNE A,33H,KYCD ;不相等 轉(zhuǎn)移
MOV A,2DH ;讀取預(yù)存?zhèn)位
CJNE A,34H,KYCD ;不相等 轉(zhuǎn)移
BNCD: NOP
CLR C ;
INC 39H ;過充計(jì)數(shù)
MOV A,39H ;
CJNE A,#10,KYCD1 ;比較過充計(jì)數(shù)
MOV 35H,#0BFH
MOV 39H,#0 ;滿足條件
MOV 2EH,#3H ;全相等 停充
LJMP JC012 ;不充電 轉(zhuǎn)移
KYCD: JC BNCD ;大于比較值 不能充電
KYCD1: NOP ;充電
NOP
NOP ;
CLR P3.2 ;低電平充電,高停
SETB P1.7 ;低電平放電 高停
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DLCSC ;調(diào)用電流轉(zhuǎn)換程序1 充電 P12
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL FS232 ;調(diào)用發(fā)送232程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DYCS2 ;調(diào)用電壓轉(zhuǎn)換程序2 有充電測試 P14
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
SETB P3.2 ;高電平充電,低停
SETB P1.7 ;低電平放電 高停
LCALL WDCS ;調(diào)用溫度測試程序
LCALL JSQCX ;調(diào)用計(jì)時(shí)程序
LJMP JC012 ;轉(zhuǎn)到下一周期
NOP
NOP
NOP
FDCZKS:NOP ;放電操作 測試電壓,發(fā)送數(shù)據(jù),延時(shí),
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DYCS1 ;調(diào)用電壓轉(zhuǎn)換程序 無放電測試 P14
NOP
NOP
NOP ;以下檢查過放
MOV A,31H ;讀取預(yù)存千位
CJNE A,3AH,KYFD ;不相等 轉(zhuǎn)移
MOV A,32H ;讀取預(yù)存百位
CJNE A,3BH,KYFD ;不相等 轉(zhuǎn)移
MOV A,33H ;讀取預(yù)存十位
CJNE A,3CH,KYFD ;不相等 轉(zhuǎn)移
MOV A,34H ;讀取預(yù)存?zhèn)位
CJNE A,3DH,KYFD ;不相等 轉(zhuǎn)移
BNFD: NOP
CLR C
INC 39H
MOV A,39H
CJNE A,#10,KYFD1
MOV 35H,#0BFH
MOV 39H,#0
MOV 2EH,#3H ;全相等 停放
LJMP JC012 ;不放電 轉(zhuǎn)移
KYFD: JC BNFD ;大于比較值 不能放電
KYFD1: NOP ;放電
SETB P3.2 ;低電平充電,高停
CLR P1.7 ;低電平放電 高停
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DLCSF ;調(diào)用電流轉(zhuǎn)換程序2 P10
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL FS232
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL DYCS2 ;調(diào)用電壓轉(zhuǎn)換程序2 帶電測試 P14
LCALL YSCX100 ;調(diào)用延時(shí)100毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL YS10 ;調(diào)用延時(shí)10毫秒程序
LCALL WDCS ;調(diào)用溫度測試程序
SETB P3.2 ;低電平充電,高停
SETB P1.7 ;低電平放電 高停
LCALL JSQCX ;調(diào)用計(jì)時(shí)程序
LJMP JC012 ;轉(zhuǎn)到下一周期
NOP
NOP
NOP
JSQCX: INC 40H ;脈沖計(jì)數(shù)器 秒脈沖加1
MOV A,40H ;讀秒到累加
CJNE A,#60,JSFH ;60秒 進(jìn)位
MOV 40H,#0 ;秒清零
MOV 39H,#0 ;充放監(jiān)測延時(shí)清零
INC 3FH ;分加1
MOV A,3FH ;讀分到累加
CJNE A,#60,JSFH ;和60比較
MOV 3FH,#0 ;等于60 清零
INC 3EH ;小時(shí)加1
JSFH: RET ;返回
NOP
NOP
NOP
DYCS1: NOP ;電壓測試程序1 純電壓 送顯
CLR P1.4 ;IC4 電壓片選線
NOP
NOP
SETB P1.1 ;SDO 數(shù)據(jù)線
LCALL ADZH1 ;調(diào)用AD轉(zhuǎn)換程序
SETB P1.4 ;選中 釋放
NOP ;20H 21H 存電壓 高位和低位(16位)
CLR P1.3 ; 時(shí)鐘脈沖線~|_
NOP
MOV A,20H ;
MOV 22H,A ;保存至電壓寄存器 高位
MOV R6,A ;16位被除數(shù)高8位
MOV A,21H
MOV 23H,A ;保存至電壓寄存器 低位
MOV R7,A ;16位被除數(shù)低8位
LCALL CFDYCX ;調(diào)用除法電壓程序 并送顯
RET
NOP
NOP
NOP
RET ;電壓測試結(jié)束
DYCS2: NOP ;電壓測試程序2 帶載電壓 不送顯
CLR P1.4 ;IC4 電壓片選線
NOP
NOP
SETB P1.1 ;SDO 數(shù)據(jù)線
LCALL ADZH1 ;調(diào)用AD轉(zhuǎn)換程序
SETB P1.4 ;撤銷選中
NOP ;20H 21H 存電壓 高位和低位(16位)
CLR P1.3 ; 時(shí)鐘脈沖線~|_
MOV A,20H ;
MOV 26H,A ;保存至電壓寄存器 高位
MOV A,21H
MOV 27H,A ;保存至電壓寄存器 低位
RET
NOP
NOP
RET ;電壓測試結(jié)束
DLCSC: NOP ;電流測試程序1 送顯
CLR P1.2 ;IC3 電流片選線
NOP
NOP
SETB P1.1 ;SDO 數(shù)據(jù)線
LCALL ADZH2 ;調(diào)用AD轉(zhuǎn)換程序
SETB P1.2 ;選中撤銷
NOP ;20H 21H 存電壓 高位和低位(16位)
CLR P1.3 ; 時(shí)鐘脈沖線~|_
MOV A,20H ;
MOV 24H,A ;保存至電壓寄存器 高位
MOV A,21H
MOV 25H,A ;保存至電壓寄存器 低位
MOV R6,24H ;16位被除數(shù)高8位
MOV R7,25H ;16位被除數(shù)低8位
LCALL CFDLCX ;調(diào)用除法電流程序 并送顯
RET
DLCSF: NOP ;電流測試程序1
CLR P1.0 ;IC5 電流片選線
NOP
NOP
SETB P1.1 ;SDO 數(shù)據(jù)線
LCALL ADZH2 ;調(diào)用AD轉(zhuǎn)換程序
SETB P1.0 ;釋放選中
NOP ;20H 21H 存電壓 高位和低位(16位)
CLR P1.3 ; 時(shí)鐘脈沖線~|_
MOV A,20H ;
MOV 24H,A ;保存至電壓寄存器 高位
MOV A,21H
MOV 25H,A ;保存至電壓寄存器 低位
MOV R6,24H ;16位被除數(shù)高8位
MOV R7,25H ;16位被除數(shù)低8位
LCALL CFDLCX ;調(diào)用除法電壓程序 并送顯
NOP
NOP
NOP
RET ;電流測試結(jié)束
ADZH1: JB P1.1,ADZH1 ;等待轉(zhuǎn)換完成
LCALL DYAD ;D23 調(diào)用讀端口
MOV 127,C ;
LCALL DYAD ;D22
MOV 126,C
LCALL DYAD ;D21
MOV 125,C
LCALL DYAD ;D20
MOV 124,C
LCALL DYAD ;D19
MOV 123,C
LCALL DYAD ;D18
MOV 7H,C ;數(shù)據(jù)送20.7
LCALL DYAD ;D17
MOV 6H,C ;數(shù)據(jù)送20.6
LCALL DYAD ;D16
MOV 5H,C ;數(shù)據(jù)送20.5
LCALL DYAD ;D15
MOV 4H,C ;數(shù)據(jù)送20.4
LCALL DYAD ;D14
MOV 3H,C ;數(shù)據(jù)送20.3
LCALL DYAD ;D13
MOV 2H,C ;數(shù)據(jù)送20.2
LCALL DYAD ;D12
MOV 1H,C ;數(shù)據(jù)送20.1
LCALL DYAD ;D11
MOV 0H,C ;數(shù)據(jù)送20.0
LCALL DYAD ;D10
MOV 0FH,C ;數(shù)據(jù)送21.7
LCALL DYAD ;D9
MOV 0EH,C ;數(shù)據(jù)送21.6
LCALL DYAD ;D8
MOV 0DH,C ;數(shù)據(jù)送21.5
LCALL DYAD ;D7
MOV 0CH,C ;數(shù)據(jù)送21.4
LCALL DYAD ;D6
MOV 0BH,C ;數(shù)據(jù)送21.3
LCALL DYAD ;D5
MOV 0AH,C ;數(shù)據(jù)送21.2
LCALL DYAD ;D4
MOV 9H,C ;數(shù)據(jù)送21.1
LCALL DYAD ;D3
MOV 8H,C ;數(shù)據(jù)送21.0
LCALL DYAD ;D2
MOV 122,C
LCALL DYAD ;D1
MOV 121,C
LCALL DYAD ;D0
MOV 120,C
;LCALL DYAD ;D0
RET
DYAD: SETB P1.3 ;__|~ 在上升沿后讀取數(shù)據(jù)
MOV C,P1.1 ;讀數(shù)據(jù)
CLR P1.3 ;~|_ 下降
RET
NOP
NOP
RET
ADZH2: JB P1.1,ADZH2 ;等待轉(zhuǎn)換完成
LCALL DYAD ;D23 調(diào)用讀端口
LCALL DYAD ;D22
LCALL DYAD ;D21
LCALL DYAD ;D20
LCALL DYAD ;D19
LCALL DYAD ;D18
MOV 7H,C ;數(shù)據(jù)送20.7
LCALL DYAD ;D17
MOV 6H,C ;數(shù)據(jù)送20.6
LCALL DYAD ;D16
MOV 5H,C ;數(shù)據(jù)送20.5
LCALL DYAD ;D15
MOV 4H,C ;數(shù)據(jù)送20.4
LCALL DYAD ;D14
MOV 3H,C ;數(shù)據(jù)送20.3
LCALL DYAD ;D13
MOV 2H,C ;數(shù)據(jù)送20.2
LCALL DYAD ;D12
MOV 1H,C ;數(shù)據(jù)送20.1
LCALL DYAD ;D11
MOV 0H,C ;數(shù)據(jù)送20.0
LCALL DYAD ;D10
MOV 0FH,C ;數(shù)據(jù)送21.7
LCALL DYAD ;D9
MOV 0EH,C ;數(shù)據(jù)送21.6
LCALL DYAD ;D8
MOV 0DH,C ;數(shù)據(jù)送21.5
LCALL DYAD ;D7
MOV 0CH,C ;數(shù)據(jù)送21.4
LCALL DYAD ;D6
MOV 0BH,C ;數(shù)據(jù)送21.3
LCALL DYAD ;D5
MOV 0AH,C ;數(shù)據(jù)送21.2
LCALL DYAD ;D4
MOV 9H,C ;數(shù)據(jù)送21.1
LCALL DYAD ;D3
MOV 8H,C ;數(shù)據(jù)送21.0
LCALL DYAD ;D2
LCALL DYAD ;D1
LCALL DYAD ;D0
;LCALL DYAD ;D0
NOP
NOP
NOP
RET
NOP
CFDYCX: NOP ;除法子程序 R6存高八位 R7存低八位
MOV R4,#27H ;除數(shù)10000 2710H
MOV R5,#10H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
MOV 31H,R7 ;千位送顯存
NOP
MOV A,R4
MOV R6,A ;16位余除數(shù)高8位
MOV A,R5
MOV R7,A ;16位余除數(shù)低8位
MOV R4,#3H ;除數(shù)1000 3E8H
MOV R5,#0E8H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
MOV 32H,R7 ;百位送顯存
NOP
MOV A,R4
MOV R6,A ;16位余除數(shù)高8位
MOV A,R5
MOV R7,A ;16位余除數(shù)低8位
MOV R4,#0H ;除數(shù)100 64H
MOV R5,#64H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
MOV 33H,R7 ;十位送顯存
NOP
MOV A,R5
MOV B,#0AH
DIV AB
MOV 34H,A ;個(gè)位送顯存
RET
NOP
NOP
NOP
LJMP JC012
CFDLCX: NOP ;除法電流程序 R6存高八位 R7存低八位
MOV R4,#27H ;除數(shù)10000 2710H
MOV R5,#10H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
NOP ;MOV 36H,R7 千位送顯存
NOP
MOV A,R4
MOV R6,A ;16位余除數(shù)高8位
MOV A,R5
MOV R7,A ;16位余除數(shù)低8位
MOV R4,#3H ;除數(shù)1000 3E8H
MOV R5,#0E8H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
MOV 36H,R7 ;百位送顯存
NOP
MOV A,R4
MOV R6,A ;16位余除數(shù)高8位
MOV A,R5
MOV R7,A ;16位余除數(shù)低8位
MOV R4,#0H ;除數(shù)100 64H
MOV R5,#64H ;
LCALL CF16 ;R7存商 R4(H)R5(L)為余數(shù)
MOV 37H,R7 ;十位送顯存
NOP
MOV A,R5
MOV B,#0AH
DIV AB
MOV 38H,A ;個(gè)位送顯存
NOP
RET
NOP
NOP
NOP
CF16: NOP
CJNE R4,#00H,DIV_H1
CJNE R6,#00H,DIV_H2
ALLDIV_L:NOP
MOV A,R7
MOV B,R5
DIV AB
MOV R7,A
MOV R5,B
RET
DIV_H1: NOP
CLR A
XCH A,R4
MOV R0,A
MOV B,#08H
UIDIV_LOOP1:NOP
MOV A,R7
ADD A,R7
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R6
SUBB A,R5
MOV A,R4
SUBB A,R0
JC R4_HIGH
R4_EQU_LOW:NOP
MOV R4,A
MOV A,R6
SUBB A,R5
MOV R6,A
INC R7
R4_HIGH: NOP
DJNZ B,UIDIV_LOOP1
CLR A
XCH A,R6
MOV R5,A
RET
DIV_H2: NOP
MOV A,R5
MOV R0,A
MOV B,A
MOV A,R6
DIV AB
JB OV,UIDIV_END
MOV R6,A
MOV R5,B
MOV B,#08H
UIDIV_LOOP2:NOP
MOV A,R7
ADD A,R7
MOV R7,A
MOV A,R5
RLC A
MOV R5,A
JC UIDIV_NEXT
SUBB A,R0
JNC RE_EQU_LOW
RE_HIGH: NOP
DJNZ B,UIDIV_LOOP2
RET
UIDIV_NEXT:NOP
CLR C
SUBB A,R0
RE_EQU_LOW:NOP
MOV R5,A
INC R7
DJNZ B,UIDIV_LOOP2
UIDIV_END: NOP
NOP
RET
NOP
NOP
NOP
FS232: NOP ;發(fā)送數(shù)據(jù),22H-41H
MOV A,#55H
LCALL FSCXK ;FE送發(fā)送器
MOV A,#0AAH
LCALL FSCXK ;送字節(jié)發(fā)送器
MOV R1,#22H ;發(fā)送數(shù)據(jù)地址指針
MOV R2,#34 ;發(fā)送數(shù)據(jù)字?jǐn)?shù)
MOV 41H,#0 ;清零代碼和
FSSS: MOV A,@R1 ;R1指向數(shù)據(jù)
LCALL FSCXK ;第16字節(jié)送發(fā)送器
INC R1
DJNZ R2,FSSS ;
RET
NOP
NOP
NOP
FSCXK: MOV SBUF,A ;字節(jié)送發(fā)送器
ADD A,41H
MOV 41H,A
JNB TI,$ ;等待發(fā)完
CLR TI
RET ;
NOP
NOP
NOP
YS10: NOP ;延時(shí)/防抖 10mS t=0.0904微秒
MOV 50H,#48H ;10毫秒 *
YS11: MOV 51H,#0FFH ;255*T 2t 138 微秒
YS12: NOP ;1t 11059200
DJNZ 51H,YS12 ;5t
DJNZ 50H,YS11 ;
RET ;延時(shí)/防抖結(jié)束
NOP
NOP
NOP
YSCX100: NOP ;100毫秒延時(shí)
MOV 53H,#10 ;10*10毫秒=100毫秒
YSCX103: MOV 54H,#97 ;100*100微秒=10毫秒
YSCX102: MOV 55H,#162 ;循環(huán)7t*160*0.0904=100微秒(99.982)
YSCX101: NOP
NOP
DJNZ 55H,YSCX101 ;100微秒循環(huán)
DJNZ 54H,YSCX102 ;10毫秒循環(huán)
DJNZ 53H,YSCX103 ;100毫秒循環(huán)
RET
NOP
NOP
NOP
NOP ;串口中斷響應(yīng)
CKZD: RETI ;如果是接收則響應(yīng) RI=1 ;如果不是接收則返回RI=0
NOP
NOP
NOP
LJMP JC012
NOP
NOP
NOP
XIANSHI: NOP ;不使用看門狗 從中斷進(jìn)入顯示程序
PUSH PSW ;程序狀態(tài)字入棧
PUSH ACC ;累加器入棧
PUSH B ;累加器入棧
MOV 8AH,#0H ;定時(shí)器0 16位計(jì)數(shù)低8位 重裝
MOV 8CH,#0F7H ;16位計(jì)數(shù)高8位 2.5毫秒中斷 顯示用
SETB TR0 ;允許計(jì)數(shù)
MOV A,30H ;讀取要顯示的位
MOV DPTR,#ZYDZ ;設(shè)置轉(zhuǎn)移地址
MOV B,#3 ;位移
MUL AB ;乘法得地址位移量
JMP @A+DPTR ;根據(jù)地址位移量轉(zhuǎn)移
NOP
NOP
NOP
ZYDZ: LJMP D1W ;轉(zhuǎn)移指向SM8
LJMP D2W ;轉(zhuǎn)移指向SM7
LJMP D3W ;轉(zhuǎn)移指向SM6
LJMP D4W ;轉(zhuǎn)移指向SM5
LJMP D5W ;轉(zhuǎn)移指向SM4
LJMP D6W ;轉(zhuǎn)移指向SM3
LJMP D7W ;轉(zhuǎn)移指向SM2
LJMP D8W ;轉(zhuǎn)移指向SM1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV 30H,#0 ;顯示的位計(jì)數(shù)器
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
D1W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第一位 最左一位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,31H ;SM8
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.7 ;顯示第一位
INC 30H ;準(zhǔn)備SM7
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
D2W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第二位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,32H ;SM7
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.6 ;顯示第二位
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
NOP
D3W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第三位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,33H ;SM6
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.5 ;顯示第三位
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
NOP
D4W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第四位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,34H ;SM5
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.4 ;顯示第四位
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
NOP
D5W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第五位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,35H ;SM4 這里不用譯碼 直接送
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.3 ;顯示第五位
LCALL YMQ ;調(diào)用譯碼器 占用時(shí)間
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
NOP
D6W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第六位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,36H ;SM3
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.2 ;顯示第六位
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
NOP
D7W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第七位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,37H ;SM2
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.1 ;顯示第七位
INC 30H ;準(zhǔn)備下一位
LJMP XIANSHIW ;轉(zhuǎn)移到返回
NOP
NOP
D8W: MOV P0,#0FFH ;關(guān)閉顯示劃驅(qū)動(dòng),準(zhǔn)備顯示第八位
MOV P2,#0FFH ;關(guān)閉顯示位驅(qū)動(dòng)
MOV A,38H ;SM1
LCALL YMQ ;調(diào)用譯碼器
MOV P0,A ;顯示劃驅(qū)動(dòng)
CLR P2.0 ;顯示第八位
MOV 30H,#0 ;準(zhǔn)備下一循環(huán)位
XIANSHIW: POP B ;累加器出棧
POP ACC ;累加器出棧
POP PSW ;程序狀態(tài)字出棧
RETI ;從定時(shí)器0中斷返回
NOP
NOP
YMQ: MOV DPTR,#YMSJ ;設(shè)置譯碼數(shù)據(jù)地址指針
MOVC A,@A+DPTR ;讀取譯碼數(shù)據(jù)
RET
RET
NOP
YMSJ: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0H,0F7H,0FEH,0BFH,0H,0H
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LJMP XIANSHIW
NOP
NOP
WDCS: NOP ;溫度測試
RET ;返回
NOP
NOP
END
|
|