您的位置 首页 培训

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

;程序说明:将MPU内部的55h~~~58h中的内容由外部中断0经I2C总线写到24c02中,然后由外部中断1将所写的内容读到;MPU内部数据存储器60H~~63HSCL

;程序阐明:将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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/255881.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部