原创 AT93C46的子程序库 pic16fxxx

2008-2-1 08:20 3076 7 7 分类: MCU/ 嵌入式

  ;/*****************************************************************
;** 函数名: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   

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条