?? fengmingqi.txt
字號:
JNB READ_CODE,FKW
MOV R7,#04H
MOV 30H,#SHAKE_HAND1
MOV 31H,#SHAKE_HAND2
MOV 32H,#SHAKE_HAND3
MOV 33H,#SHAKE_HAND4
MOV R0,#30H ;發送握手信號
NEXT_CMD: MOV A,@R0
MOV C,ACC.7 ;發送BIT7和比BIT6 7777
MOV SEND_PORT1,C
MOV C,ACC.6
MOV SEND_PORT2,C
SETB WRITE_CODE
JB READ_CODE,$
MOV C,ACC.5 ;發送BIT5和比BIT4
MOV SEND_PORT1,C
MOV C,ACC.4
MOV SEND_PORT2,C
CLR WRITE_CODE
JNB READ_CODE,$
MOV C,ACC.3 ;發送BIT3和比BIT2
MOV SEND_PORT1,C
MOV C,ACC.2
MOV SEND_PORT2,C
SETB WRITE_CODE
JB READ_CODE,$
MOV C,ACC.1 ;發送BIT1和比BIT0
MOV SEND_PORT1,C
MOV C,ACC.0
MOV SEND_PORT2,C
CLR WRITE_CODE
JNB READ_CODE,$
INC R0 ;指向下一個數據
DJNZ R7,NEXT_CMD
CLR TR1 ;停止運行定時器T1
CLR ET1 ;禁止定時器T1中斷
CLR TF1
MOV A,#0FFH
MOV P2,A
SETB UPDATE_EN
AJMP KEY_OFF
ALARM_OK: CLR BEEP_PORT
MOV R0,#00H ;延時約132ms
MOV R1,#00H
INIT_A: DJNZ R1,$
CLR MEM_CS ;清除X5045的看門狗定時器
NOP
SETB MEM_CS
DJNZ R0,INIT_A
SETB BEEP_PORT
RET
READ_APROM_SET: CLR A
MOV CHPENR,A ;禁止改變CHPCON寄存器內容
MOV TCON,A ;TR0=0,定時器0停止工作
MOV IP,A
MOV IE,#82H ;允許定時器0中斷
MOV TMOD,#01H ;設置T0為16位定時器模式
CLR A
MOV SFRCN,A ;讀取APROM命令代碼
MOV SFRAL,A ;設置讀取數據的器始地址
MOV SFRAH,A
MOV A,#0FEH ;定時時間為2us
MOV T0_L8,A
MOV TL0,A
MOV A,#0FFH
MOV T0_H8,A
MOV TH0,A
RET
READ_PAGE: MOV R0,#00H ;設置讀取的數據的存放首地址
READ_LOOP: SETB TR0
MOV PCON,#01H ;進入IDLE工作模式,準備讀取APROM中一個字節的內容
MOV A,SFRFD ;讀取APROM中一個字節的內容
MOVX @R0,A
INC SFRAL ;修改地址指針,指向下一個數據單元
INC R0
MOV A,R0
JNZ READ_LOOP
INC SFRAH
CLR WRITE_CODE ;設置數據傳送的握手信號
WAIT_SHAKE: CLR MEM_CS ;清除X5045的看門狗定時器
NOP
SETB MEM_CS
JB READ_CODE,WAIT_SHAKE;等待主機響應信號
MOV R7,#00H ;設置工作次數
MOV R0,#00H
NEXT_ROM: MOVX A,@R0
MOV C,ACC.7 ;發送BIT7和比BIT6 7777
MOV SEND_PORT1,C
MOV C,ACC.6
MOV SEND_PORT2,C
SETB WRITE_CODE
JNB READ_CODE,$
MOV C,ACC.5 ;發送BIT5和比BIT4
MOV SEND_PORT1,C
MOV C,ACC.4
MOV SEND_PORT2,C
CLR WRITE_CODE
JB READ_CODE,$
MOV C,ACC.3 ;發送BIT3和比BIT2
MOV SEND_PORT1,C
MOV C,ACC.2
MOV SEND_PORT2,C
SETB WRITE_CODE
JNB READ_CODE,$
MOV C,ACC.1 ;發送BIT1和比BIT0
MOV SEND_PORT1,C
MOV C,ACC.0
MOV SEND_PORT2,C
CLR WRITE_CODE
JB READ_CODE,$
INC R0 ;指向下一個數據
DJNZ R7,NEXT_ROM
MOV A,#0FFH
MOV P2,A
CLR WRITE_CODE
CLR MEM_CS ;清除X5045的看門狗定時器
NOP
SETB MEM_CS
MOV A,SFRAH
XRL A,#80H ;判斷是否到達終止地址7FFFH
JNZ READ_PAGE
RET
RECEIVE_SHAKE: MOV R7,#00H
DJNZ R7,$ ;延時等待512us
MOV P2,#0FFH
KHR: CLR MEM_CS ;清除X5045的看門狗定時器
NOP
SETB MEM_CS
JB WRITE_CODE,KHR ;等待芯片擦除并查空完畢
CLR READ_CODE ;設置響應獲取擦除信息的握手信號標志
MOV R7,#14H ;獲取芯片擦除狀態信息(共有20字節)
MOV R0,#90H
GET_BLANK: JNB WRITE_CODE,$ ;首先獲取7,6位數據
MOV A,P2
SETB READ_CODE
MOV C,ACC.RECEIVE1 ;保留7,6位數據
MOV B.7,C
MOV C,ACC.RECEIVE2
MOV B.6,C
JB WRITE_CODE,$ ;接著獲取5,4位數據
MOV A,P2
CLR READ_CODE
MOV C,ACC.RECEIVE1 ;保留5,4位數據
MOV B.5,C
MOV C,ACC.RECEIVE2
MOV B.4,C
JNB WRITE_CODE,$ ;獲取3,2位數據
MOV A,P2
SETB READ_CODE
MOV C,ACC.RECEIVE1 ;保留3,2位數據
MOV B.3,C
MOV C,ACC.RECEIVE2
MOV B.2,C
JB WRITE_CODE,$ ;接著獲取1,0位數據
MOV A,P2
CLR READ_CODE
MOV C,ACC.RECEIVE1 ;保留1,0位數據
MOV B.1,C
MOV C,ACC.RECEIVE2
MOV B.0,C
MOV A,B
MOV @R0,A
INC R0
DJNZ R7,GET_BLANK ;不到20個字節,繼續
MOV A,#0FFH
MOV P2,A
MOV R7,#14H ;獲取芯片擦除狀態信息(共有20字節)
MOV R0,#90H
MOV DPTR,#PROG_SHAKE
FKT: CLR A
MOVC A,@A+DPTR
XRL A,@R0 ;比較數據是否符合系統要求
JNZ SHAKE_ERROR
INC R0
INC DPTR
DJNZ R7,FKT
RET
SHAKE_ERROR: CLR MEM_CS ;在線編程握手信號錯誤,則不再響應命令
MOV A,#0FFH
MOV P2,A
SETB MEM_CS
SJMP SHAKE_ERROR
PROG_SHAKE: DB ISP_SHAKE0 ;在線編程握手標志數據0
DB ISP_SHAKE1 ;在線編程握手標志數據1
DB ISP_SHAKE2 ;在線編程握手標志數據2
DB ISP_SHAKE3 ;在線編程握手標志數據3
DB ISP_SHAKE4 ;在線編程握手標志數據4
DB ISP_SHAKE5 ;在線編程握手標志數據5
DB ISP_SHAKE6 ;在線編程握手標志數據6
DB ISP_SHAKE7 ;在線編程握手標志數據7
DB ISP_SHAKE8 ;在線編程握手標志數據8
DB ISP_SHAKE9 ;在線編程握手標志數據9
DB ISP_SHAKEA ;在線編程握手標志數據A
DB ISP_SHAKEB ;在線編程握手標志數據B
DB ISP_SHAKEC ;在線編程握手標志數據C
DB ISP_SHAKED ;在線編程握手標志數據D
DB ISP_SHAKEE ;在線編程握手標志數據E
DB ISP_SHAKEF ;在線編程握手標志數據F
DB ISP_SHAKEG ;在線編程握手標志數據G
DB ISP_SHAKEH ;在線編程握手標志數據H
DB ISP_SHAKEI ;在線編程握手標志數據I
DB ISP_SHAKEJ ;在線編程握手標志數據J
BEEP_ONE: MOV A,#BEEP_ON_TIME ;設置蜂鳴器發聲時間
MOV BEEP_WAVE,A
CLR BEEP_PORT ;打開蜂鳴器
SETB BEEP_FLAG
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -