×
单片机 > 单片机程序设计 > 详情

51单片机驱动I2C(24C02)汇编语言程序

发布时间:2020-06-15 发布时间:
|
;程序说明:将MPU内部的55h~~~58h中的内容由外部中断0经I2C总线写到24c02中,然后由外部中断1将所写的内容读到 
;MPU内部数据存储器60H~~63H 
 
SCL EQU P1.1  
SDA EQU P1.0  
org 0000h 
jmp begin 
org 0003H 
ljmp write 
org 0013H 
ljmp read 
 
;主程序 
begin: 
mov 55H,#41H 
mov 56h,#42h 
MOV 57h,#43H 
MOV 58H,#44H 
mov tcon,#0 
setb ex0 
setb ex1 
setb ea 
main: 
nop 
jmp main 
 
;********************************************************** 
;读24C02的数据的程序 
read:     
ACALL START ;开始信号 
MOV A,#0A0H ;发从机的地址 
ACALL SEND ;发送控制字 
ACALL ACKI;接收应答 
JC OUTEND ;不响应,转结束 
MOV A,#00H;设置要读取从器件的片内地址 
ACALL SEND 
ACALL ACKI 
JC OUTEND 
ACALL START ;开始信号 
ORL A,#0A1H;设置控制字,准备接收 
ACALL SEND ;发送控制字 
ACALL ACKI 
JC OUTEND 
MOV R2,#4 ;准备接收数据的字节数 
MOV R1,#60H ;接收字节存放在主器件中的地址60H 
IN0: 
ACALL REV ;接收一个字节 
ACALL ACKO;主机向24C02发送应答信号 
MOV @R1,A ;把接收到数据存放到存储单元中 
INC R1 
DEC R2 
CJNE R2,#1,IN0 ;判断是否为最后一个接收字节 
ACALL REV ;接收最后一个字节 
ACALL ACKN; 
MOV @R1,A ;把接收到数据存放到存储单元中 
OUTEND: 
ACALL STOP ;停止信号 
jnb p3.3,$ 
reti 
 
 
;********************************************************** 
;写24C02的数据的程序 
write: 
LCALL START ;开始信号 
MOV A,#0A0H ;定控制字,准备发送 
ACALL SEND ;发送控制字 
ACALL ACKI ;接收应答 
JC WRITEEND ;从器件不响应,转结束 
MOV A,#00H ;设置从器件片内地址 
ACALL SEND ;发送片内地址 
ACALL ACKI 
JC WRITEEND 
MOV R2,#4;设置发送字节数 
MOV R1,#55H ;主器件中要发送数据的头地址 
OUT1: 
MOV A,@R1 
ACALL SEND;发送数据 
ACALL ACKI; 
JC WRITEEND 
INC R1 
DJNZ R2,OUT1 ;发送未结束,继续发送 
WRITEEND: 
ACALL STOP ;停止信号 
jnb p3.2,$;防止再次中断 
reti 
;******************************************************** 
;******************** 
;I2C模拟程序 
;开始信号 
START: 
CLR SCL  
SETB SDA 
ACALL DELAY   
SETB SCL 
ACALL DELAY  
CLR SDA  
ACALL DELAY   
CLR SCL  
RET  
; 停止信号: 
 STOP:CLR SCL  
 CLR SDA  
 ACALL DELAY  
 SETB SCL  
 ACALL DELAY  
 SETB SDA  
 ACALL DELAY  
 RET  
; 接收一个字节 
 REV: MOV R0,#08H  
 REV0: SETB SCL  
 LCALL DELAY 
 MOV C,SDA 
 RLC A  
 CLR SCL  
 LCALL DELAY 
 DJNZ R0,REV0  
 RET  
;发送一个字节  
SEND: 
MOV R0,#08H  
CLR SCL  
SEND0: 
RLC A   
MOV SDA,C   
SETB SCL   
ACALL DELAY  
CLR SCL  
DJNZ R0,SEND0 
SETB SDA  
RET  
;接收一个应答位: 
ACKI: 
SETB SCL   
ACALL DELAY   
MOV C,SDA  
CLR SCL  
RET  
; 发送一个接收应答位 
 ACKO: 
 CLR SDA 
 ACALL DELAY 
 SETB SCL 
  ACALL DELAY 
 CLR SCL 
  ACALL DELAY 
 SETB SDA 
  ACALL DELAY 
 RET  
 ;发送一个非接收接收应答位 
 ACKN: 
 SETB SDA 
 ACALL DELAY 
 SETB SCL 
 ACALL DELAY 
 CLR SCL 
 ACALL DELAY 
DELAY: 
NOP 
NOP 
NOP 
RET 
END
关键字:51单片机  驱动I2C  汇编语言 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会