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

📄 24c02.txt

📁 24C02读写程序。使用74ls164动态显示
💻 TXT
字号:
I2cdata   equ 4Fh           ;发送数据缓冲区的首址
 C2402data  equ 00h          ;接受缓冲区首址
 numdata  equ 08h            ;传送的字节数,传送8个字节
 Sda  bit p2.1
 Scl  bit p2.2
main:
clr p1.5
     
  mov 40h,#01h
     mov 41h,#02h
     mov 42h,#03h
     mov 43h,#04h  
	  SETB p2.0            ;位为0时选通
	  SETB P1.2
	  SETB P1.1
	  SETB P1.0
	ACALL Mainwr
     lcall d1s
	ACALL Mainre
       lcall d1s
     mov 39h,#00h
   
main1:   MOV 30H,40H
MOV 31H,41H
MOV 32H,42H
MOV 33H,43H
ACALL DIR
sjmp main1
Mainwr:Lcall init            ;初始化给30h,31h,32h中存入0,1,2的段码
        Lcall start2402     ;启动
        Mov r7,#0a0h
        Lcall send           ;发送写24C02的寻址字节
        Mov r7,#C2402data
        Lcall send           ;发送数据存入24C02的地址    
        Mov r5,#Numdata      ;欲发送的字节数
       Mov r0,#i2cdata       ;发送缓冲区的首址
wrloop: Mov a,@r0
        Mov r7,a
        Inc r0
        Lcall send
        Djnz r5, wrloop      ;把3个字节的数据发送出去
        lcall stop             ;停止
        lcall d1s  
	     ret 
Mainre:      
        lcall start2402             ;启动       
        Mov r7,#0a0h
        Lcall send           ;发送写24C02的寻址字节
        Mov r7,#C2402data
        Lcall send           ;发接受缓冲区首址
        Lcall start2402             ; 再次启动
        Mov r7,#0a1h
        Lcall send           ;发送读24C02的寻址字节
		mov r1,#40h
	    mov 24H,#Numdata     ; 要读取的字节数重新赋值
Reloop: Lcall read           ;调用读取一个字节数据的子程序
       ; mov p0,r7           ;把读进来的数送到p0口显示
        mov a,r7	
        mov @r1,a
		inc r1
       ; lcall d1s
       ; lcall d1s
       ; acall DTR
        Djnz 24H,reloop
        Lcall stop           ;3字节读取完毕发出停止信号
        ret
init:  
        mov 4Fh,#00h                     ;初始化,50h中存入
        mov 50h,#01h        
        mov 51h,#02h
        mov 52h,#03h
	mov 53h,#03h
	mov 54h,#03h
	mov 55h,#03h
	mov 56h,#03h

	
        ret
start2402: setb sda         ;启动信号子程序,大家可以参考开始信号的时序图
        setb scl
        lcall d5u
        clr sda
        lcall d5u
        clr scl
        ret
stop:   clr sda               ;停止信号子程序
        setb scl
        lcall d5u
        setb sda
        lcall d5u
        clr sda
        clr scl
        ret       
;send是发送一个字节子程序
send: mov r6,#08h            
        mov a,r7             ;要发送的数在r7中
sendlop1 : rlc a             ;左环移,把A的最高位移入cy
         mov sda,c           ;把cy的值通过sda发送出去
         setb scl            ;在scl上产生一个时钟
         lcall d5u
         clr scl
         djnz r6, sendlop1   ;重复8次,发送一个字节
 ;cack是检查应答信号的子程序
cack: setb sda                ;主机首先拉高sda
        setb scl              ;发出一个时钟
        lcall d5u
sendlop2:mov c,sda            ;读入sda的状态,如果是0表示接受到了应答
    jc sendlop2         
    clr scl                   ;接受到应答位,结束时钟
    ret      
read:     mov r6,#08h         ;读取一个字节子程序
readlop1:  setb sda           ;置sda为输入方式
         setb scl                   ;发出一个时钟 
         lcall d5u
         mov c,sda             ;读入sda状态
         rlc a                 ;把该位的状态移入A中 
         clr scl               ;结束时钟
         djnz r6,readlop1      ;重复8次,读入一个字节
         mov r7,a              ;读进来的数放在r7中 
;sack是发送应答位子程序
sack:  clr sda                  ;拉低sda线
         setb scl               ;发出时钟信号
         lcall d5u
         clr scl
         setb sda
         ret

d5u:     nop                     ;延时5us子程序
         nop
         nop
         nop
         nop
         ret
d1s:     mov r1,#100            ;延时1s子程序
del1:    mov r4,#20
del2:    mov r3,#0ffh  
del3:    djnz r3,del3
         djnz r4,del2
         djnz r1,del1
         ret
 DIR:MOV R0,#30H
    	MOV 39H,#00H          ;存4个显示状态
    	MOV R5,#04H          
L4:     CLR P1.4              ;产生脉冲
	MOV R6,#08H           ;数据端A,B要接受8位,点亮一个数码管
	MOV A,@R0             ;查表
	ADD A,#(TAB-L2)
	MOVC A,@A+PC

L2:	CLR P1.3              ;发送第一个数据到第一个数码管
	RRC A
	JNC L3
	SETB P1.3
L3:	SETB P1.4             ;发CP脉冲
	CLR P1.4
	DJNZ R6,L2

        MOV A,39H             ;判断状态,选中数码管
	CJNE A,#00H,B5
	MOV 39H,#04H
B5:	MOV A,39H
	CJNE A,#04H,B1
    clr p1.0
	SETB P1.2
	SETB P1.1
	SETB P2.0
B1:     CJNE A,#03H,B2
    CLR p1.1
	SETB P1.2
	SETB P1.0
	SETB P2.0
B2: 	CJNE A,#02H,B3
    clr p1.2
	SETB P1.0
	SETB P1.1
	SETB P2.0
B3:	CJNE A,#01H,B4
    clr p2.0
	SETB P1.2
	SETB P1.1
	SETB P1.0

	
B4:    ACALL DELYD             ;延时显数
        DEC 39H
        INC R0
	DJNZ R5,L4
	RET
TAB: DB 84H,0B7H,2CH,25H,17H,45H,44H,0A7H,04H,05H,16h,0c4h,34h    ;0-9,h,g,d
   DELYD:MOV R7,#09H
 DLD0:	MOV R6,#06aH
 DLD1:	DJNZ R6,DLD1
        DJNZ R7,DLD0
RET
 end

⌨️ 快捷键说明

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