⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 96_25045.asm

📁 x25045的编程应用
💻 ASM
字号:
CPU 80C196KC
;***********************************************
; X25045子程序  SJR_9900S
; _CS ==> P1.5(30), SO ==> P0.3(4)
; SI ==> P2.6(33), SCK==> P1.6(31)
;***********************************************
_CS             EQU     PORT1
SO              EQU     PORT0
SI              EQU     PORT2
SCK             EQU     PORT1
WP              EQU     PORT2 ;0 ENBALE
CS_L            EQU     11011111B
CS_H            EQU     00100000B
SI_L            EQU     10111111B
SI_H            EQU     01000000B
SCK_L           EQU     10111111B
SCK_H           EQU     01000000B

WREN            EQU     00000110B ;设置写使能锁存器(准许)
WRDI            EQU     00000100B ;复位写使能锁存器(禁止)
RDSR            EQU     00000101B ;读状态寄存器
WRSR            EQU     00000001B ;写状态寄存器

READ0           EQU     03H       ;读000-0FFH
READ1           EQU     0BH       ;读100-1FFH
WRITE0          EQU     02H       ;写000-0FFH
WRITE1          EQU     0AH       ;写100-1FFH
ADDRESS         EQU     00H       ;读写起始地址  
;==================系统设置=================
CHECK      EQU     30H
STATE1     EQU     31H
STATE2     EQU     32H
STATE3     EQU     33H
BYTE_WR_R       EQU     38H
BYTE_RD_R       EQU     39H       
COUNT           EQU     40H; 计数器
IOC2            EQU     0BH
IOC3            EQU     0CH
INT_PEND1       EQU     12H
INT_MASK1       EQU     13H
WSR             EQU     14H
;====================主程序=================
                ORG     2018H
                DB      0CEH
                ORG     2080H
                DI
                DPTS
                LD      SP,#0BEH
                LDB     WSR,#00H
                LDB     IOC0,#80H   ;HSI 定义
                LDB     IOC1,#20H   ;中断定义
                LDB     IOC2,#00H
                LDB     WSR,#01H
                LDB     IOC3,#00H
                LDB     INT_PEND1,#00H ;中断悬挂寄存器1
                LDB     INT_MASK1,#00H ;中断屏蔽寄存器1
                LDB     WSR,#00H

X25045:         NOP
                LCALL   READ_X 
                SUBB    CHECK,#33H
                JE      OUTPUT
INPUT:          LCALL   WRITE_X ;写入4个(CHECK[固定33H],STATE1,STATE2,STATE3)
                RET
OUTPUT:         LCALL   READ_X  ;读出4个(CHECK,STATE1,STATE2,STATE3)
                RET

;-----------------------------------------------
;(1)X25045数据写入程序
; 功能:将STATE区数据写入指定地址ADDRESS开始的单元
WRITE_X:        
                LCALL   WIP_CHK ;等待WIP=0
                LCALL   STARX
                LCALL   WREN_SR ;设置写使能
                
                LCALL   STARX
                LDB     BYTE_WR_R,#WRITE0     ;写最高位
                SCALL   BYTE_WR
                LDB     BYTE_WR_R,#ADDRESS    ;单元地址低八位
                SCALL   BYTE_WR
                
                LDB     CHECK,#33H
                LDB     BYTE_WR_R,CHECK  ;写入内容
                SCALL   BYTE_WR
                LDB     BYTE_WR_R,STATE1  
                SCALL   BYTE_WR   
                LDB     BYTE_WR_R,STATE2 
                SCALL   BYTE_WR
                LDB     BYTE_WR_R,STATE3
                SCALL   BYTE_WR                                            
              
                LCALL   WRDI_SR ;复位写使能
                LCALL   ENDX    ;指令结束
                
                RET
;-----------------------------------------------
;(2)X25045数据读出程序
; 功能:把指定地址ADDRESS开始的单元数据读出并放入STATE区
READ_X:         
                LCALL   WIP_CHK ;等待WIP=0
                LCALL   STARX
                LDB     BYTE_WR_R,#READ0     ;读地址区域,最高位
                SCALL   BYTE_WR
                LDB     BYTE_WR_R,#ADDRESS   ;单元地址低八位 
                SCALL   BYTE_WR
              
                SCALL   BYTE_RD               ;读出内容
                LDB     CHECK,BYTE_RD_R
                SCALL   BYTE_RD             
                LDB     STATE1,BYTE_RD_R
                SCALL   BYTE_RD               
                LDB     STATE2,BYTE_RD_R
                SCALL   BYTE_RD               
                LDB     STATE3,BYTE_RD_R
 
                LCALL   ENDX
                RET

;----------------------------------------------
;(3)X25045状态寄存器写入程序
; 功能:对状态寄存器进行设置(写入)。
WRITE_SR:       LCALL   WIP_CHK
                LCALL   STARX 
                LCALL   WREN_SR
                LCALL   STARX
                LDB     BYTE_WR_R,#WRSR
                SCALL   BYTE_WR  ;传送写状态指令
                LDB     BYTE_WR_R,#00111100B
                SCALL   BYTE_WR  ;传送状态数据  
                LCALL   WRDI_SR
                LCALL   ENDX  

                RET
;----------------------------------------------
;(4)X25045状态寄存器读出程序
; 功能:读出状态寄存器当前值。
READ_SR:        LCALL   STARX 
                LDB     BYTE_WR_R,#RDSR
                SCALL   BYTE_WR
                SCALL   BYTE_RD
                LCALL   ENDX  
                RET    
;-----------------------------------------------
;向X25045写入一字节数据(进口是BYTE_WR_R)
BYTE_WR:         LDB		COUNT,#8
BYTE_WR_1:       JBS     BYTE_WR_R,7,BYTE_WR_2
                ANDB    SI,SI_L  
                SJMP    BYTE_WR_3
BYTE_WR_2:       ORB     SI,#SI_H 
BYTE_WR_3:       ANDB    SCK,#SCK_L ;0
                ORB     SCK,#SCK_H ;1 上升沿锁存
                SHLB    BYTE_WR_R,#1
                DJNZ    COUNT,BYTE_WR_1
                RET
;-----------------------------------------------
;从X25045读出一字节数据(出口是BYTE_RD_R)
BYTE_RD:          LDB     COUNT,#8
BYTE_RD_1:        SHLB    BYTE_RD_R,#1
                ORB     SCK,#SCK_H ;1
                ANDB    SCK,#SCK_L ;0 下降沿锁存
                JBS     SO,3,BYTE_RD_2 ;P0.3
                ANDB    BYTE_RD_R,#11111110B
                SJMP    BYTE_RD_3
BYTE_RD_2:        ORB     BYTE_RD_R,#00000001B
BYTE_RD_3:        DJNZ    COUNT,BYTE_RD_1
                RET 
   
RST_DOG: ORB  _CS,#CS_H ;复位看门狗定时器
         ANDB _CS,#CS_L
         ORB  _CS,#CS_H
         RET 
                         
WIP_CHK: LCALL READ_SR  ;等待X25045结束内部写周期
         JBS   BYTE_RD_R,0,WIP_CHK 
         RET
         
STARX:   ORB  _CS,#CS_H    ;启动X25045指令
         NOP               ;先拉高CS,再拉低SCK,最后拉低CS
         ANDB SCK,#SCK_L
         ANDB _CS,#CS_L
         NOP
         RET

ENDX:    ANDB SCK,#SCK_L  ;结束X25045指令
         ORB  _CS,#CS_H   ;先拉低SCK后拉高CS
         NOP
         RET             
               
; 设置写使能锁存器(WREN_SR)
WREN_SR:        LCALL   READ_SR  
                JBS     BYTE_RD_R,1,WREN_END
                LCALL   STARX
                LDB     BYTE_WR_R,#WREN
                SCALL   BYTE_WR   
                LCALL   ENDX
WREN_END:       RET

; 复位写使能锁存器(WRDI_SR)
WRDI_SR:        LCALL   READ_SR  
                JBC     BYTE_RD_R,1,WRDI_END
                LCALL   STARX
                LDB     BYTE_WR_R,#WRDI
                SCALL   BYTE_WR
                LCALL   ENDX
WRDI_END:       RET
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -