;/*****************************************************************
;** 函数名:AT93C46的子程序库
;** 输 入:
;** a---
;** b---
;** c---
;** 输 出: no
;**
;** 功能描述:at93c46 有7个指令: EWEN 擦写使能 ;EARSE擦指令
WRITE写指令; WRAL 全写
;** EWDS 擦写禁能;READ 读一个字节
;** 全局变量:AH AL BH CL
;** 调用模块: EWEN EARSE WRITE WRAL EWDS READ
;** 作 者:李军
;** 日 期:
;** 修 改:
;** 日 期:
;** 版本1.0
;****************************************************************/
;Used register:AL, CL
OpCode ;入口参数:AL(要发送的sb and option code)
MOVLW 4 ;3-->CL
MOVWF CL
BSF CS ;select AT93c46
BCF SK
BCF DI
NOP
NOP
OpCode_1 ;Transmit SB(start byte)
BSF SK
NOP
NOP
BCF SK
RLF AL,1
;{ ;if (c=1) then (di=1) else (di=0)
BTFSC STATUS,C
GOTO E1
BCF DI
GOTO E2
E1 BSF DI
E2 NOP
;}
DECFSZ CL
GOTO OpCode_1
RETURN
;*****************************************
;Used register :AH, CL
Trans_bits ;入口参数:AH (要发送的数据或地址) CL (要发送的位数)
Tr_1
RLF AH,1
;{
BTFSC STATUS,C
GOTO E3
BCF DI
GOTO E4
E3 BSF DI
E4 NOP
;}
BSF SK
NOP
NOP
BCF SK
DECFSZ CL,1
GOTO Tr_1
BCF DI ;++++
RETURN
;******************************************
;Used register:AL, AH ,CL
EWEN ;擦写使能
MOVLW 0x80 ;B'100XXXXXX'--->AL
MOVWF AL
CALL OpCode
MOVLW 0xFF ;B'11XXXXXX'--->AH
MOVWF AH
MOVLW 7
MOVWF CL
CALL Trans_bits
BCF CS
RETURN
;*************************************
;Input register:AH
;Output register:no
;Used register:AL CL AH
EARSE ;擦指令。 入口参数:AH (要擦除存储器的地址)
MOVLW 0xFF
MOVWF AL
CALL OpCode
MOVLW 7
MOVWF CL
CALL Trans_bits
BCF CS
NOP
NOP
NOP
NOP
BSF CS ;check status
EARSE_1
BTFSS DO ;busy or ready ?
GOTO EARSE_1
BCF CS
RETURN
;*********************************
;Input register:AH,BH
;Output register:no
;Used register:AH,BH,CL
WRITE ;写指令。input register: AH BH (AH是要写入的地址;BH是要写入的数据)
MOVLW 0xA0
MOVWF AL
CALL OpCode
RLF AH
MOVLW 7
MOVWF CL
CALL Trans_bits ;发送地址
MOV AH,BH
MOVLW 8
MOVWF CL
CALL Trans_bits ;写入数据
BCF CS
NOP
BSF CS
WRITE_1 ;是否写入 ?
BTFSS DO
GOTO WRITE_1
BCF DI
BCF CS
RETURN
;***********************************
;Input register:no
;Output register:no
;Used register:AL ,AH,CL
WRAL
MOVLW 0x80
MOVWF AL
CALL OpCode
MOVLW 0x40
MOVWF AH
MOVLW 7
MOVWF CL
CALL Trans_bits
MOVLW 0x55
MOVF AH
MOVLW 8
MOVWF CL
CALL Trans_bits
BCF CS
NOP
BSF CS
WRAL_1
BTFSS DO
GOTO WRAL_1
BCF DI
BCF CS
RETURN
;***********************************
;Used register:AL CL AH
EWDS
MOVLW 0x80
MOVWF AL
CALL OpCode
MOVLW 7
MOVWF CL
CLRW
MOVWF AH
CALL Trans_bits
BCF CS
RETURN
;*************************************
;Input register :AH
;Output register:BH
;Used register:AL CL AH BH
READ ;读一个字节,input register:AH(要读出的地址) ;output register: BH(已读出的数据)
MOVLW 0xC0
MOVWF AL
CALL OpCode
CLC
RLF AH
MOVLW 7
MOVWF CL
CALL Trans_bits
MOVLW 8
MOVWF CL
READ_1
BSF SK
NOP
NOP
BCF SK
CLC
BTFSC DO
STC
RLF BH
DECFSZ CL
GOTO READ_1
BCF DI
BCF CS
RETURN
文章评论(0条评论)
登录后参与讨论