I2C串口

II22CC总线扩展实验
06300720040
夏晓天电子信息科学与技术
【预习报告】
一.实验目的
掌握基于MCS-51系统的I2C总线扩展的方法
二.实验内容
1.利用MCS-51系统的P1口模拟I2C总线接口,扩展串口存储器24C16,每次存入1个数据,并反复读回,用示波器测试读回的波形。(分别以数据AAH,55H测试)2.将MCS-51系统片内存储器的10个数据存入串口存储器24C16并读回,分别设置存入的地址为页地址+00H和页地址+07H。读回为地址页地址+00H,将读回的
数据存放在片内存储器,并与发送数据进行比较。
三.电原理图和程序清单
8-4-1.硬件连接图:
程序清单:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
SCL EQU P1.0
SDA EQU P1.1
MRD EQU 40H
;发送部分
SNDN: LCALL START                ;启动
MOV A,#0A0H              ;发控制字,写
武汉时代职业学院LCALL SEND                ;发送
LCALL CACK                ;检查应答
JB F0,SNDN                ;非正常应答则重新发送      MOV A,#00H                ;发送地址
LCALL SEND                ;发送
LCALL CACK                ;检查应答位
JB F0,SNDN                  ;非正常应答则重新发送      MOV A,#0AAH              ;发送数据
LCALL SEND                ;发送
LCALL CACK                ;检查应答位
JB F0,SNDN                  ;非正常应答则重新发送    LCALL STOP                  ;停止
LCALL DELAY2                ;延迟一段时间再读回;接收部分
REVN: LCALL START                  ;启动
MOV A,#0A0H                ;发控制字,写
LCALL SEND                  ;发送
LCALL CACK                  ;检查应答位
JB F0,REVN                  ;非正常应答则重新发送      MOV A,#00H                ;发送地址
LCALL SEND                  ;发送
LCALL CACK                  ;检查应答位
词语翻译
JB F0,REVN                  ;非正常应答则重新发送      LCALL START                ;再次启动
MOV A,#0A1H                ;发控制字,读
LCALL SEND                  ;发送
LCALL ACKS                  ;发送应答位
LCALL REV                  ;接收
MOV MRD,A                ;接收的数据存放在40H      LCALL NACKS                ;发送非应答位
LCALL STOP                  ;停止
SJMP REVN                  ;再次接收
;启动信号传递
START:SETB SDA
NOP
SETB SCL
LCALL DELAY
CLR SDA
LCALL DELAY
CLR SCL
NOP
RET
;停止信号传递
STOP: CLR SDA
NOP
NOP
SETB SCL
LCALL DELAY
SETB SDA
LCALL DELAY
;CLR SDA
;
CLR SCL
RET
;发送一个字节
SEND: MOV R0,#08H                  ;8位数据长度送R0
WLP: RLC A                        ;发送数据左移,使发送位入C JC WR1                      ;判断发送为1还是0,发送1转WR1      AJMP WR0                    ;发送0转WR0
WLP1: DJNZ R0,WLP                  ;8位是否发送完?未完转WLP
RET                          ;8位发送完结束
WR1: SETB SDA                    ;发送1程序段
NOP
SETB SCL
LCALL DELAY
CLR SCL
;CLR SDA
AJMP WLP1
WR0: CLR SDA                      ;发送0程序段
NOP
SETB SCL
LCALL DELAY
CLR SCL
AJMP WLP1
;接收一个字节
REV:  MOV R0,#08H                  ;8位数据长度入R0
REV0: SETB SDA                      ;置VSDA为输入方式
NOP
SETB SCL                      ;使VSDA上数据有效
digital chaosNOP
MOV C,SDA                    ;读入VSDA引脚状态
MOV A,R2                    ;读入0程序段,由C拼装入R2中      CLR SCL                      ;使VSCL=0可继续接收数据位
RLC A
MOV R2,A
LCALL DELAY
DJNZ R0,REV0                  ;8位是否读完?未读完转RLP
RET
;发送应答位
ACKS: CLR SDA
NOP
NOP
SETB SCL
LCALL DELAY
CLR SCL
NOP
NOP
;SETB SDA
RET
发送非应答位
城市生活2008NACKS:SETB SDA
NOP
NOP
SETB SCL
LCALL DELAY
CLR SCL
NOP
NOP
;CLR SDA
RET
检查应答位
CACK: SETB SDA                    ;置VSDA为输入方式
NOP
NOP
SETB SCL                    ;使VSDA上数据有效
CLR F0                      ;预设F0=0
NOP
NOP
MOV C,SDA                  ;输入VSDA引脚状态
JNC CEND                    ;检查VSDA状态,正常应答转CEND,且F0=0      SETB F0                      ;无正常应答,F0=1
CEND: NOP
CLR SCL                      ;子程序结束,使VSCL=0
NOP
RET
;延时
DELAY: NOP
NOP
NOP
NOP
RET
;延时2
DELAY2:MOV R6,#0FFH
DEL1:  MOV R7,#0FFH
D EL2:  DJNZ R7,DEL2
DJNZ R6,DEL1
RET
END
8-4-2.硬件连接图:
程序清单:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
SCL EQU P1.0
SDA EQU P1.1
MTD EQU 30H
MRD EQU 40H
MOV R0,#0AH
MOV R1,#30H
MOV A,#00H
STR: MOV @R1,A                ;0~9分别存放在30H~39H      INC R1
INC A
DJNZ R0,STR
;发送部分1
MOV R1,#30H
MOV R0,#0AH
SNDN1: LCALL START                ;启动
MOV A,#0A0H              ;发控制字,写
LCALL SEND                ;发送
LCALL CACK                ;检查应答位
JB F0,SNDN1                ;非正常应答则重新发送      MOV A,#00H                ;发送地址
LCALL SEND                ;发送
中国3d电视试验频道LCALL CACK                ;检查应答位
JB F0,SNDN1                ;非正常应答则重新发送L1:  MOV A,@R1                ;取发送数据
LCALL SEND                ;发送
LCALL CACK                ;检查应答位
JB F0,SNDN1                ;非正常应答则重新发送INC R1
DJNZ R0,L1                  ;未发完10个数据则转L1      LCALL STOP                  ;停止
LCALL DELAY2                ;延迟一段时间再读回
;发送部分2
MOV R1,#30H
MOV R0,#0AH
SNDN2: LCALL START                ;启动
MOV A,#0A0H              ;发控制字,写
LCALL SEND                ;发送
LCALL CACK                ;检查应答位
冯天瑜
JB F0,SNDN2                ;非正常应答则重新发送

本文发布于:2024-09-22 01:56:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/399060.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:发送   应答   数据   总线   扩展
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议