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

📄 test24c256.s43

📁 MSP430F133开发板代码包 独立按键(C) 5_1_6_1.c 扫描按键 key.s43 扫描按键(C) key.c ADC 5_1_8.s43 5_1_9_1.s43 I
💻 S43
字号:

;IIC器件的测试程序
;使用器件为24C01
;硬件连接为P4.2,P4.7
#include  "msp430x13x.h"

RXTXI2C     equ    202h      
DataConv    equ    203h      
ADDRI2C1     equ    204h     
ADDRI2C0      EQU   205H
DATAI2C     equ    206h      
BITI2C      equ    207h      
ScndBlck    equ    208h      
                             
STARPAGEI2C EQU    220H
Pagecount   EQU    20AH

#define     BitCnt R5   

SDA         equ    004h      
SCL         equ    080h      
Code        equ    0A0h      

Bitime_5    equ    0064      
Bitime      equ    0128      
Delta       equ    150       
RXD         set    004h      
TXD         set    002h      
LF          equ    0ah       
CR          equ    0dh       
R_I2C       EQU    210H 


            ORG     0F000h                  ; 

RESET       mov.w   #300h,SP           

MAIN      MOV.B  r7,   ADDRI2C0     ;要写入的器件内部地址
          MOV.B  r6,   ADDRI2C1
          MOV.B  r8,  DATAI2C       ;要写入的具体数据
          CALL  #Write_I2C          ;
         
         MOV   #01FFFH,R15
DLY0     DEC  R15
         JNZ  DLY0                  ;延时,等待写周期的结束
         
          MOV.B  r7,ADDRI2C0
          MOV.B  r6,   ADDRI2C1
          CALL  #Read_I2C           ;读出刚写入的数据
          mov.b R_I2C,r9
          JMP   MAIN


I2CDLY      NOP                     ;延时
            NOP
            NOP
            NOP
            NOP
            NOP
            RET
            
 
Wrpage_I2C  mov.b   #Code,RXTXI2C    ;  页写
            add.b   #0,RXTXI2C    ; 
            call    #I2C_Start     
            mov.b   ADDRI2C1,RXTXI2C  
            call    #I2C_TX           

            mov.b   ADDRI2C0,RXTXI2C  
            call    #I2C_TX           
            mov.b   #64,Pagecount 
            mov.b   #0,r15
Wrpage      mov.b   STARPAGEI2C(R15),RXTXI2C  
            call    #I2C_TX             
            INC     R15
            DEC.B   Pagecount
            jnz     Wrpage

            call    #I2C_Stop           
            ret           
            
            
Read_I2C    mov.b   #Code,RXTXI2C    ; 在具体的IIC器件中读某一个地址的数据
            add.b   #0,RXTXI2C    ; 
            call    #I2C_Start   
                   
            mov.b   ADDRI2C1,RXTXI2C    
            call    #I2C_TX   
            mov.b   ADDRI2C0,RXTXI2C  
            call    #I2C_TX             
            
            mov.b   #Code,RXTXI2C       
            add.b   #1,RXTXI2C    
            bis.b   #01h,RXTXI2C  
            call    #I2C_Start    
            
            call    #I2C_Read     
            
            call    #I2C_Stop     
            ret

;-------------------------------------------------------------------------------
I2C_Start   bic.b   #SCL+SDA,&P4DIR ; 启动总线
                                     
            bis.b   #SDA,&P4DIR     
            bis.b   #SCL,&P4DIR     
            CALL    #I2CDLY
;------------------------------------------------------------------------------- 
I2C_TX      mov.b   #08,BITI2C     ; 向总线发送一个字节的数据
I2C_Send    rla.b   RXTXI2C         
            jc      I2C_Send1       
I2C_Send0   bis.b   #SDA,&P4DIR     
            jmp     I2C_Sx          
I2C_Send1   bic.b   #SDA,&P4DIR     
I2C_Sx      bic.b   #SCL,&P4DIR     
            nop                     
            CALL    #I2CDLY 
            nop                     
            bis.b   #SCL,&P4DIR     
            dec.b   BITI2C          
            jnz     I2C_Send        
            bic.b   #SDA,&P4DIR     

;------------------------------------------------------------------------------- 
I2C_Ackn    bic.b   #SCL,&P4DIR   ;  应答信号
            nop  
            CALL    #I2CDLY         
            nop                     
            bis.b   #SCL,&P4DIR         
            ret                         
            
;------------------------------------------------------------------------------- 
I2C_Read    mov.b   #08,BITI2C      ;从总线读一个字节数据    
I2C_RX      bic.b   #SCL,&P4DIR         
            bit.b   #SDA,&P4IN          
            rlc.b   R_I2C             
            bis.b   #SCL,&P4DIR       
            dec.b   BITI2C            
            CALL    #I2CDLY            
            jnz     I2C_RX         
            jmp     I2C_Ackn       

;------------------------------------------------------------------------------- 
I2C_Stop    bis.b   #SDA,&P4DIR    ;停止总线
            bic.b   #SCL,&P4DIR    
            bic.b   #SDA,&P4DIR    
I2C_End     ret

;------------------------------------------------------------------------------- 
Write_I2C   mov.b   #Code,RXTXI2C     ; 向某一个IIC器件的某一地址写入具体的数据
            add.b   #0,RXTXI2C    
            call    #I2C_Start    
            
            mov.b   ADDRI2C1,RXTXI2C  ; 高地址
            call    #I2C_TX   
                    
            mov.b   ADDRI2C0,RXTXI2C  ; 低地址
            call    #I2C_TX   
            
            mov.b   DATAI2C,RXTXI2C   ; 数据 
            call    #I2C_TX           
            call    #I2C_Stop         
            ret
            
            ORG     0FFFEh            
            DW      RESET             
            END     

⌨️ 快捷键说明

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