📄 function.asm
字号:
.PW 128
.CHIP W65C02S
.GLOBALS ON
.INCLUDE SYSTEM.CFG
;***************************************************************************
;* global label definition
;*
;***************************************************************************
.PUBLIC Write_EPP128
.PUBLIC Verify_EPP128
;PUBLIC DelayTime
;***************************************************************************
.XDEF PC
.XDEF PCC
;***************************************************************************
;SYSRAM .SECTION REF_ONLY
;***************************************************************************
SDBuff .DS 1
RDBuff .DS 1
EPPAddH .DS 1
EPPAddL .DS 1
WriteBuff .DS 1
;***************************************************************************
;* Description: Section PS0
;*
;***************************************************************************
;PS0 .SECTION
;***************************************************************************
;======================================================
;Function: write 24CL128
;Input: EppAdd,
;PC0->SDA,PC1->SCL,PC2->WP
;======================================================
Write_EPP128:
RTS
;======================================================
;Function: Verify 24CL128
;Input: EppAdd,
;PC0->SDA,PC1->SCL,PC2->WP;
;======================================================
Verify_EPP128:
RTS
;======================================================
;Function: Read a byte from EPPROM
;
;PC0->SDA,PC1->SCL,PC2->WP
;======================================================
ReadByteEpp128:
JSR StartEpp
LDA #10100000B
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ ReadByteError
LDA EPPAddH
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ ReadByteError
LDA EPPAddL
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ ReadByteError
SMB0 <PC
SMB1 <PC
JSR StartEpp
LDA #10100001B
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ ReadByteError
LDA #11111110H ;PC0 as input
STA PCC
SMB0 <PC ;enable PC0 pull high
NOP
NOP
NOP
JSR InceptData
LDA #FFH
STA PCC
RMB0 <PC
JSR DelayTime
ReadByteError:
JSR StopEpp
RTS
;======================================================
;Function: Write a byte from EPPROM
;
;PC0->SDA,PC1->SCL,PC2->WP
;======================================================
WriteByteEpp128:
JSR StartEpp
LDA #10100000B
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ WriteByteError
LDA EPPAddH
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ WriteByteError
LDA EPPAddL
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ WriteByteError
LDA WriteBuff
STA SDBuff
JSR SendData
JSR CheckAck
CMP #0
BEQ WriteByteError
LDA #1
WriteByteError:
JSR StopEpp
RTS
;======================================================
;all subroutine for control the EEPROM 24C128 ||
;PC0->SDA,PC1->SCL,PC2->WP ||
;======================================================
SendData:
PHA
PHX
LDX #8
SendDataLP:
ASL SDBuff
BCC SendData1
JSR SendHigh
BRA SendData2
SendData1:
JSR SendLow
SendData2:
DEX
CPX #0
BNE SendDataLP
PLX
PLA
RTS
;======================================================
InceptData:
PHA
PHX
LDX #8
InceptLP:
SMB1 <PC
NOP
NOP
NOP
NOP
BBR0 <PC,StoreLow
;--- store hight bit ----
SEC
ROL RDBuff
BRA InceptD1
StoreLow:
CLC
ROL RDBuff
InceptD1:
RMB1 <PC
JSR DelayTime
DEX
CPX #0
BNE InceptLP
PLX
PLA
RTS
;======================================================
StartEpp:
RMB0 <PC ;SDA->LOW
JSR DelayTime
RMB1 <PC ;SCL->LOW
JSR DelayTime
RTS
;======================================================
EnableCEpp:
RMB2 <PC ;WP ->LOW
JSR DelayTime
RTS
;======================================================
StopEpp:
SMB1 <PC ;SCL->HIGH
JSR DelayTime
SMB0 <PC ;SDA->HIGH
JSR DelayTime
RTS
;======================================================
DisableCEpp:
SMB2 <PC
RTS
;======================================================
SendHigh:
SMB0 <PC ;SDA->HIGH
JSR DelayTime
SMB1 <PC ;SCL->HIGH
JSR DelayTime
RMB1 <PC
RMB0 <PC
RTS
;======================================================
SendLow:
RMB0 <PC ;SDA->HIGH
JSR DelayTime
SMB1 <PC ;SCL->HIGH
JSR DelayTime
RMB1 <PC
RMB0 <PC
RTS
;======================================================
DelayTime:
LDA #0
DEC
NOP
BNE $-2
RTS
;======================================================
;; If A=0 then ACK error
;; If A>0 then ACK right
;======================================================
CheckAck:
LDA #11111110H ;PC0 as input
STA PCC
SMB0 <PC ;enable PC0 pull high
NOP
NOP
NOP
LDA #255
SMB1 <PC ;SCL High
NOP
NOP
NOP
CheckAckLp:
BBR0 <PC,CheckAckNext
NOP
NOP
DEC
CMP #0
BNE CheckAckLp
CheckAckNext:
LDA #FFH
STA PCC
RMB1 <PC
RMB0 <PC
JSR DelayTime
RTS
;======================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -