您的位置 首页 IC

单片机汇编试验六:I2C串行总线存储器读写试验

实验要求:由AT89S52内部定时器1,按方式1工作,每1秒钟24C02的0001H单元内容加2,以键盘作为外部中断输入信号,有键按下时,读取0001H单元

试验要求:由AT89S52内部守时器1,按方法1作业,每1秒钟24C02的0001H单元内容加2,以键盘作为外部中止输入信号,有键按下时,读取0001H单元内容并由LED显现。

//This is the sixthprogramof the homework;
//Name :Wang Qi Date:2013/3/11 北京化工大学 自实1001
SDA EQU P2.0
SCL EQU P2.1
ORG 0000H //主函数进口
SJMP MAIN
ORG 0013H //外部中止1进口
LJMP WZD0
ORG 001BH //计时器1进口
LJMP WT1
ORG 0050H
MAIN: MOV SP,#60H
MOV TMOD,#10H //设置T1作业方法
MOV TH1,#4CH //设初值
MOV TL1,#00H
MOV R7,#10 //计数器
SETB EA //大局中止
SETB ET1 //答应守时器1
SETB TR1 //发动守时器1
SETB IT1 //外部中止跳变触发方法
SETB EX1 //答应外部中止1
OK: MOV C,P3.4 //扫描键盘
JNC OK1
MOV C,P3.5
JNC OK1
MOV C,P3.6
JNC OK1
MOV C,P3.7
JNC OK1
SJMP OK
OK1: CLR P3.3 //中止信号
SETB P3.3
SJMP OK
WZD0:
SETB P3.3 //中止程序
PUSH TH1 //维护现场
PUSH TL1
CLR TR1 //中止T1计数
MOV R2,#01H
CALL DU
MOV P1,R3
POP TL1
POP TH1
SETB TR1
RETI
WT1: MOV TH1,#4CH //守时函数
MOV TL1,#00H
DJNZ R7,RET0
MOV R7,#10 //1秒到来了
INC 30H
INC 30H
mov R2,#01H
MOV R3,30H
CALL XIE
RET0: RETI

//////////////I2C协议摘自网络 Thanks to the author
XIE: //写数据子程序,R2是要写入的24c02的字节方位地址,R3是要写入的内容
LCALL STAR;开始条件
MOV A,#10100000B //寻址24C02的总线硬件地址并运用写入指令
LCALL SDATA //传输数据A给24C02
MOV A,R2 //确认要写入的字节方位地址
LCALL SDATA //传输数据A给24C02
MOV A,R3 //把数据R3写入刚指定的字节地址
LCALL SDATA //传输数据A给24C02
LCALL STOP //写入结束
LCALL CHULI //供给2ms给24C02内部处理刚写入的数据
RET
DU: ;读数据子程序,R2是要读的24c02的字节方位地址,读完后A传给R3
LCALL STAR;开始条件
MOV A,#10100000B//寻址24C02的总线硬件地址并运用写入指令
LCALL SDATA //传输数据A给24C02
MOV A,R2 //留意,这儿是使24C02的字节地址指针变成R2的值,也便是确认要读取的字节方位地址
LCALL SDATA //传输数据A给24C02
LCALL STAR //重复开始条件
MOV A,#10100001B//寻址24C02的总线硬件地址并运用读出指令(这儿正式建议读指令)
LCALL SDATA//传输数据A给24C02
LCALL RDATA//从之前指定的字节地址中读出字节内容到A
LCALL STOP //读取结束(这儿并没有接连读取,只能读一个字节,要多个字节接连读取,请自己在R2上做变址读取循环)

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部