?? ada682.asm
字號:
;***********************************************************
; MCU:EM78P418NP OSC:4M(內(nèi)置RC) 2個時鐘,2個周期
; 作者:chenxiongbin
; 日期:
; 開始:2006-10-8
; 結(jié)束:2006-11-2
; 型號:ADA682
;***********************************************************
;*****************特殊功能寄存器定義************************
IOC50 EQU 0X05 ;端口5寄存器(0段寄存器)
IOC60 EQU 0X06 ;端口6寄存器
IOC70 EQU 0X07 ;端口7寄存器
IOC80 EQU 0X08 ;PWM控制寄存器
IOC90 EQU 0X09 ;定時器控制寄存器
IOCA0 EQU 0X0A ;比較器控制寄存器
IOCB0 EQU 0X0B ;端口6的下拉控制寄存器
IOCC0 EQU 0X0C ;端口5漏極開路控制寄存器
IOCD0 EQU 0X0D ;上拉控制寄存器
IOCE0 EQU 0X0E ;WDT控制寄存器
IOCF0 EQU 0X0F ;中斷屏蔽寄存器
IOC51 EQU 0X05 ;PWM1的周期PRD1(1段寄存器)
IOC61 EQU 0X06 ;PWM2的周期PRD2
IOC71 EQU 0X07 ;PWM3的周期PRD3
;******************操作寄存器定義***************************
IAR EQU 0X00 ;間接尋址寄存器
TCC EQU 0X01 ;時鐘/計數(shù)器
STATUS EQU 0X03 ;狀態(tài)寄存器
RSR EQU 0X04 ;存儲區(qū)選擇寄存器
PORT5 EQU 0X05 ;端口5
PORT6 EQU 0X06 ;端口6
PORT7 EQU 0X07 ;端口7
ADISR EQU 0X08 ;ADC輸出選擇寄存器
ADCON EQU 0X09 ;A/D控制寄存器
ADRUN EQU 4 ;ADC開始運行位,1為一個A/D轉(zhuǎn)換開始、0為轉(zhuǎn)換的復(fù)位完成
ADC_H EQU 0X0C ;A/D轉(zhuǎn)換值
ADC_L EQU 0X0D ;A/D轉(zhuǎn)換值
IMR EQU 0X0F ;中斷標志寄存器
STORE_A EQU 0X10 ;存累加器ACC內(nèi)容
STORE_STATUS EQU 0X11 ;存STATUS內(nèi)容
TIME1 EQU 0X12 ;12.5MS計數(shù)寄存器(定時器變量寄存器)
TIME2 EQU 0X13 ;秒計數(shù)寄存器
TIME3 EQU 0X14 ;分計數(shù)寄存器
TIME4 EQU 0X15 ;小時計數(shù)寄存器
JZDY_L EQU 0X16 ;預(yù)熱5分鐘測得的電壓作為基準電壓
JZDY_H EQU 0X17
CKDY_L EQU 0X18 ;每隔0.5V為一個電壓比較數(shù)據(jù)寄存器
CKDY_H EQU 0X19
FMQ1 EQU 0X1A
FMQ2 EQU 0X1B
DSCS EQU 0X1C ;定時參數(shù)變量寄存器
FSCS EQU 0X1D ;風速選擇參數(shù)寄存器
CNT1 EQU 0X1E
CNT2 EQU 0X1F
CNT3 EQU 0X20
CNT4 EQU 0X21
DEL1 EQU 0X22 ;延時變量寄存器
DEL2 EQU 0X23
DEL3 EQU 0X24
HWX1 EQU 0X25 ;遙控信號碼寄存器
HWX2 EQU 0X26
HWX3 EQU 0X27
KJTM EQU 0X28
AUTO_30S EQU 0X29
ZTBZ1 EQU 0X2D ;狀態(tài)標志位
ZTBZ2 EQU 0X2E
;***********************************************************
; 主程序
;***********************************************************
ORG 0X000
JMP MAIN ;轉(zhuǎn)主程序
NOP
NOP
NOP
NOP
NOP
NOP
NOP
ORG 0X008
JMP ZDFWCX ;轉(zhuǎn)中斷服務(wù)程序
MAIN:DISI ;關(guān)中斷
BC STATUS,7 ;選擇0段控制寄存器(IOC50~IOCF0)
BC STATUS,6 ;選擇第一頁程序存儲頁(000-3FF)
BC STATUS,5
BC RSR,7 ;選擇存儲區(qū)
BC RSR,6
MOV A,@0X10 ;通用寄存器從0X10開始,到0X3F結(jié)束,0X00到0X0F為特殊功能寄存器
MOV RSR,A
CSH0:CLR IAR
INC RSR
MOV A,RSR
AND A,@0X3F
XOR A,@0X3F
JBS STATUS,2
JMP CSH0
MOV A,@0X81
IOW IOC50
MOV A,@0X0B
IOW IOC60
MOV A,@0X0FF ;禁止PORT6口內(nèi)部上拉
IOW IOCD0
MOV A,@0X02 ;選擇P61為模擬輸入口
MOV ADISR,A
MOV A,@0X01 ;模擬輸入選擇P61,ADC中VREF與VDD相連
MOV ADCON,A
MOV A,@0X01
IOW IOC70
MOV A,@0X19 ;允許PWM1IE中斷、ADIE中斷、EXIE中斷、ICIE中斷、TCIE中斷
IOW IOCF0
MOV A,@0X3C ;允許看門狗計時,WDT比率為1:256,P50口為外部中斷輸入引腳
IOW IOCE0
MOV A,@0X0F ;開啟TMR1定時,分頻比為1:256
IOW IOC80
MOV A,@0X3F ;關(guān)閉定時器TMR2、TMR3
IOW IOC90
MOV A,@0X4F ;INT引腳信號由下降沿引起中斷,TCC由低到高變化時加1,TCC比率設(shè)置為1:256
CONTW
BS PORT6,6 ;粉塵器開關(guān)為關(guān)狀態(tài)
CLR FSCS
CLR DSCS ;清定時變量寄存器
CLR ZTBZ1 ;清各狀態(tài)標志位
CLR ZTBZ2 ;定時參數(shù)變量賦初值(即剛開機不進行定時設(shè)置)
CLR AUTO_30S
BC PORT5,5 ;電機剛開始不工作
BC PORT6,2
BC PORT6,4
BC PORT6,5 ;負離子燈及發(fā)生器為關(guān)狀態(tài)
BS ZTBZ1,2 ;蜂鳴器標志位
MOV A,@0X3C ;裝載TCC計數(shù)初值
MOV TCC,A
ENI ;開中斷
MAIN_1:WDTC ;清看門狗
CALL LED_GZ ;調(diào)用指示燈顯示程序
CALL GZMS ;調(diào)用按鍵掃描控制程序
JBS ZTBZ2,5
JMP MAIN_2
MOV A,TIME2
XOR A,@0X02
JBS STATUS,2
JMP MAIN_2
BC ZTBZ2,5
CALL ZS_L
MOV A,@0X02
MOV FSCS,A
MAIN_2:MOV A,DSCS
XOR A,@0X0
JBC STATUS,2
CLR TIME4 ;清小時變量遞增寄存器(沒有定時一定要清0)
JBS ZTBZ2,3 ;判斷是否工作在AUTO模式?
JMP MAIN_1 ;不是,繼續(xù)循環(huán)
JBS ZTBZ2,0 ;到了,檢測是否有第一次測量標志?
JMP MAIN_3
MOV A,KJTM
XOR A,@0X05
JBS STATUS,2 ;5分鐘是否到了?
JMP MAIN_1
BS ADCON,ADRUN ;第一次測量作為基準電壓
BC ZTBZ2,0 ;取消第一次測量標志
MAIN_3:MOV A,AUTO_30S
XOR A,@0X1E
JBS STATUS,2
JMP MAIN_1
CLR AUTO_30S
CALL FCCGQ
JBC ZTBZ2,1
BS ADCON,ADRUN ;置ADRUN=1,啟動ADC工作
JMP MAIN_1
;***********************************************************
; 指示燈工作狀態(tài)控制程序
;***********************************************************
LED_GZ:JBC ZTBZ1,0 ;檢測開關(guān)狀態(tài)標志
JMP LED_1
MOV A,@0XCF
IOW IOC50
NOP
JMP LED_4
LED_1:MOV A,@0X01 ;置P50為輸入口
IOW IOC50
MOV A,@0X0A ;置P63、P61為輸入口
IOW IOC60
MOV A,@0X0 ;置P70為輸出口
IOW IOC70
NOP
BC PORT5,3 ;掃描
BC PORT5,2
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,6
JBC ZTBZ1,0 ;判開關(guān)狀態(tài)?
BC PORT5,7 ;開關(guān)為開狀態(tài),POWER指示燈亮
JBS ZTBZ1,0
BS PORT5,7 ;開關(guān)為開狀態(tài),POWER指示燈滅
CALL DELAY_1 ;0.05MS延時
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判斷是否是定時2小時?
XOR A,@0X02
JBC STATUS,2
BC PORT7,0 ;是,2H指示燈亮
JBS STATUS,2
BS PORT7,0 ;不是,2H指示燈滅
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判電機是否在L檔?
XOR A,@0X02
JBC STATUS,2
BC PORT6,0 ;是,L檔指示燈亮
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,2
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,3
JBS ZTBZ2,1 ;判電機的工作狀態(tài)是否為MANUAL模式?
BC PORT5,7
JBC ZTBZ2,1
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判電機是否是定時4小時?
XOR A,@0X04
JBC STATUS,2
BC PORT7,0
JBS STATUS,2
BS PORT7,0
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判電機是否在M檔?
XOR A,@0X03
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,3
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,2
JBS ZTBZ2,3 ;判斷電機的工作狀態(tài)是否為AUTO工作模式?
JMP LED_2 ;凈化器在AUTO工作模式時,AUTO指示燈閃爍點亮
JBC TIME1,5
BC PORT5,7
JBS TIME1,5
BS PORT5,7
JMP LED_3
LED_2:JBC ZTBZ2,3
BC PORT5,7
LED_3:JBS ZTBZ2,3
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判斷是否定時8小時?
XOR A,@0X08
JBC STATUS,2
BC PORT7,0
JBS STATUS,2
BS PORT7,0
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判斷電機是否在H檔?
XOR A,@0X04
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,3
BC PORT5,2
BS PORT7,0
BS PORT6,0
BS PORT5,1
JBC ZTBZ1,1 ;判斷負離子工作狀態(tài)?
BC PORT5,7
JBS ZTBZ1,1
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判斷靜音檔?
XOR A,@0X01
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
LED_4:RET
;***********************************************************
; 按鍵掃描控制程序
;***********************************************************
GZMS:WDTC ;清WDT
MOV A,@0X89 ;掃描鍵盤,置初值,P57、P70、P60設(shè)為輸入口,P53、P56設(shè)為輸出口
IOW IOC50
MOV A,@0X0A ;P61為A/D輸入口,P63為粉塵檢測輸入口
IOW IOC60
MOV A,@0X00
IOW IOC70
NOP
BS PORT7,0
BS PORT6,0
BC PORT5,2
BC PORT5,1
BC PORT5,6
NOP
JBC PORT5,7 ;檢測開關(guān)鍵S1是否按下?
BC ZTBZ1,5
JBC ZTBZ1,5
JMP GZMA
JBC ZTBZ1,6
JMP GZMA
JBC ZTBZ1,4
JMP GZMA
JBC ZTBZ2,6
JMP GZMA
JBC ZTBZ1,7
JMP GZMA
JBC ZTBZ2,7
JMP GZMA
JBS PORT5,7
CALL SET_1 ;調(diào)用開關(guān)狀態(tài)控制子程序
GZMA:JBS ZTBZ1,0 ;判斷開關(guān)狀態(tài)是否為ON?
JMP GZM6 ;不是,返回
GZM1:MOV A,@0X09 ;是,繼續(xù)掃描
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X01
IOW IOC70
NOP
BS PORT5,7
BS PORT6,0
BC PORT5,2
BC PORT5,1
BC PORT5,6
NOP
JBC PORT7,0 ;檢測UV燈鍵S2是否按下?
BC ZTBZ1,6
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -