?? fengmingqi.txt
字號:
MEM_SO BIT P3.0
MEM_SCK BIT P3.1
MEM_SI BIT P3.2
MEM_CS BIT P1.7
BEEP_PORT BIT P3.4 ;蜂鳴器控制端口
WORK_PORT EQU P2 ;系統升級時的工作端口
SHAKE_HIGH EQU 0F7H ;11110111B
SHAKE_LOW EQU 0FBH ;11111011B
RECEIVE1 EQU 03H ;器件在線升級時的數據接收端口1(P2.3)
RECEIVE2 EQU 02H ;器件在線升級時的數據接收端口1(P2.2)
SEND_PORT1 BIT P2.3 ;器件在線升級時的數據發送端口1
SEND_PORT2 BIT P2.2 ;器件在線升級時的數據發送端口2
READ_CODE BIT P2.1
WRITE_CODE BIT P2.0
;CHPCON EQU 0BFH ;W78E58B專用寄存器
;CHPENR EQU 0F6H ;W78E58B專用寄存器
;SFRAL EQU 0C4H ;W78E58B專用寄存器
;SFRAH EQU 0C5H ;W78E58B專用寄存器
;SFRFD EQU 0C6H ;W78E58B專用寄存器
;SFRCN EQU 0C7H ;W78E58B專用寄存器
;T2MOD EQU 0C9H ;W78E58B定時器2工作模式寄存器
IDLE_L8 EQU 0F0H
IDLE_H8 EQU 0FFH
KEY_ACK BIT 20H.0 ;按鍵已響應標志
UPDATE_EN BIT 20H.1 ;軟件升級時握手成功標志,為1時有效
LEFT_RIGHT BIT 20H.2 ;屏幕左邊數據已顯示完標志,為1有效
IN_BLANK BIT 20H.3 ;處于閃爍顯示時,定時更換顯示標志
SHAKE_ENABLE BIT 20H.4 ;允許發送軟件升級的握手信號標志
CHANGE_PORT BIT 20H.5 ;定時更換端口數據狀態標志
BEEP_FLAG BIT 20H.6 ;蜂鳴器工作允許標志
START_EN BIT 20H.7 ;允許啟動升級標志
BEEP_ON_TIME EQU 05H ;蜂鳴器發聲時間
SHAKE_HAND1 EQU 0C6H ;系統握手數據1
SHAKE_HAND2 EQU 03AH ;系統握手數據2
SHAKE_HAND3 EQU 09EH ;系統握手數據3
SHAKE_HAND4 EQU 0B5H ;系統握手數據4
ISP_SHAKE0 EQU 90H ;在線編程握手標志數據0
ISP_SHAKE1 EQU 06H ;在線編程握手標志數據1
ISP_SHAKE2 EQU 4CH ;在線編程握手標志數據2
ISP_SHAKE3 EQU 12H ;在線編程握手標志數據3
ISP_SHAKE4 EQU 01H ;在線編程握手標志數據4
ISP_SHAKE5 EQU 0F0H ;在線編程握手標志數據5
ISP_SHAKE6 EQU 75H ;在線編程握手標志數據6
ISP_SHAKE7 EQU 0A8H ;在線編程握手標志數據7
ISP_SHAKE8 EQU 82H ;在線編程握手標志數據8
ISP_SHAKE9 EQU 0C2H ;在線編程握手標志數據9
ISP_SHAKEA EQU 97H ;在線編程握手標志數據A
ISP_SHAKEB EQU 55H ;在線編程握手標志數據B
ISP_SHAKEC EQU 0C2H ;在線編程握手標志數據C
ISP_SHAKED EQU 0AAH ;在線編程握手標志數據D
ISP_SHAKEE EQU 74H ;在線編程握手標志數據E
ISP_SHAKEF EQU 14H ;在線編程握手標志數據F
ISP_SHAKEG EQU 19H ;在線編程握手標志數據G
ISP_SHAKEH EQU 96H ;在線編程握手標志數據H
ISP_SHAKEI EQU 31H ;在線編程握手標志數據I
ISP_SHAKEJ EQU 0DEH ;在線編程握手標志數據J
T1_H8 EQU 0B1H ;20ms
T1_L8 EQU 0E0H
;以下是存儲單元分配使用情況
T0_H8 EQU 10H
T0_L8 EQU 11H
SYSTEM_STATUS EQU 16H ;系統工作狀態存放單元
KEY_DATA EQU 44H ;按鍵鍵值臨時存放單元
KEY_AGE_COUNT EQU 45H ;按鍵年齡計數單元
BEEP_WAVE EQU 47H ;蜂鳴器發聲時間
STACK_POINT EQU 69H ;系統堆棧指針,實質上堆棧區由6AH單元開始
ORG 0000H
LJMP MAIN_LOADER
ORG 000BH
CLR TR0 ;定時器T0停止運行
MOV A,T0_L8 ;重新設置定時器初值
MOV TL0,A
MOV A,T0_H8
MOV TH0,A
RETI
ORG 001BH ;10ms
MOV TH1,#T1_H8
MOV TL1,#T1_L8
CLR MEM_CS ;首先清除X5045的看門狗定時器
NOP
SETB MEM_CS
JB SHAKE_ENABLE,PRM
AJMP KEYBOARD
PRM: MOV A,#SHAKE_HIGH
JB CHANGE_PORT,PRN
MOV A,#SHAKE_LOW
PRN: MOV P2,A
CPL CHANGE_PORT
JB READ_CODE,PRQ
MOV P2,#0FFH
SETB START_EN
CLR SHAKE_ENABLE
PRQ: JB BEEP_FLAG,BEEP_WORK;蜂鳴器服務檢查程序
NOP ;冗余指令,抗干擾用
NOP
TASK_END: RETI
BEEP_WORK: DJNZ BEEP_WAVE,END_BEEP
SETB BEEP_PORT ;結束發聲
CLR BEEP_FLAG
END_BEEP: RETI
MAIN_LOADER: CLR EA
MOV SP,#STACK_POINT ;設置系統堆棧指針
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P2,A
MOV P3,A
CLR A
MOV IP,A
MOV IE,A
MOV PSW,A ;設定0區工作寄存器
MOV TCON,A
MOV T2CON,A
LCALL ALARM_OK
MOV CHPENR,#87H ;設置允許改變CHPCON數據命令
MOV CHPENR,#59H
MOV CHPCON,#13H ;進入在線編程狀態,同時使能片內AUX_RAM
CLR A
MOV CHPENR,A ;禁止改變CHPCON寄存器內容
MOV TCON,A
MOV IP,A
MOV IE,#82H ;允許定時器0中斷,準備從IDLE模式喚醒
MOV A,#IDLE_L8
MOV T0_L8,A
MOV TL0,A
MOV A,#IDLE_H8
MOV T0_H8,A
MOV TH0,A
MOV TMOD,#01H ;設置T0為16位定時器模式
MOV TCON,#10H ;啟動定時器0工作
MOV PCON,#01H ;進入IDLE工作模式,準備進入在線編程狀態
READY_UPDATE: CLR MEM_CS ;清除X5045的看門狗定時器
NOP
SETB MEM_CS
CLR A
MOV 20H,A ;系統工作標志單元
MOV 21H,A ;系統工作標志單元
MOV KEY_AGE_COUNT,A ;按鍵年齡
MOV KEY_DATA,A ;保存鍵值
MOV SYSTEM_STATUS,A
MOV TCON,A
MOV TMOD,#11H ;設置T0,T1為16位定時器模式
MOV TH1,#T1_H8
MOV TL1,#T1_L8
CLR TF1
SETB TR1 ;啟動定時器T1
SETB ET1 ;允許定時器T1中斷
SETB EA ;允許全局中斷
JNB UPDATE_EN,$ ;等待軟件升級的握手信號
CLR UPDATE_EN
LCALL RECEIVE_SHAKE ;等待接收芯片擦除并查空完畢信息
LCALL READ_APROM_SET ;器件編程
LCALL READ_PAGE
LCALL READ_APROM_SET ;編程效驗
LCALL READ_PAGE
MOV A,#0FFH
MOV P2,A
LCALL ALARM_OK
SJMP READY_UPDATE
KEYBOARD: MOV A,P1 ;讀取鍵盤口的狀態
ORL A,#11111001B ;屏蔽不需要的數據位,系統暫未用到
CPL A ;將ACC取反
JZ NO_KEY ;沒有鍵壓下,轉NO_KEY
INC KEY_AGE_COUNT ;按鍵年齡加一
XCH A,KEY_DATA ;保存鍵值
XRL A,KEY_DATA ;與上次按鍵相同否?
JZ SAME_KEY ;相同,轉SAME_KEY
NO_KEY: CLR A
MOV KEY_AGE_COUNT,A ;不同,按鍵年齡清零
CLR KEY_ACK ;清除'按鍵已響應'標志
RETI
SAME_KEY: MOV A,#0FEH ;單擊鍵年齡初始化為40ms
ADD A,KEY_AGE_COUNT
JC ACCEPT ;按鍵年齡已到,轉ACCEPT處理
MPY: RETI ;年齡未到,不作處理
ACCEPT: JB KEY_ACK,KEY_OFF
UPDATE_REQ: MOV A,KEY_DATA
JB ACC.1,SEND_EN
JB ACC.2,SEND_EN
SJMP KEY_OFF
SEND_EN: JB START_EN,SEND_COMMAND
SETB SHAKE_ENABLE ;設置允許發送軟件升級的握手信號標志
CLR CHANGE_PORT
LCALL BEEP_ONE
KEY_OFF: SETB KEY_ACK ;設置'按鍵已響應'標志
CLR A
MOV KEY_AGE_COUNT,A ;按鍵年齡清零
NRP: RETI
SEND_COMMAND: CLR WRITE_CODE ;接口信號
FKW: CLR MEM_CS ;首先清除X5045的看門狗定時器
NOP
SETB MEM_CS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -