版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机第十二十三讲1第一页,共五十一页,2022年,8月28日4.5串行总线扩展技术
串行扩展:模块化、标准化、省去大量连线、提高可靠性、降低成本UART、I2C、1-wire、SPI和Microwire4.5.1UART的扩展(一)RS232接口设计
RS-232是美国电子工业协会EIA(ElectronicIndustriesAssociation)1962年制定的物理接口标准,RS是“推荐”标准的英文缩写。后来,虽有改动,但改动不大,一般统称为RS-232标准。2第二页,共五十一页,2022年,8月28日1)机械特性
RS-232标准中共有25条线,DB25、DB92)电气特性
RS-232出现在TTL电路之前,所以它的电平不是+5V和地,它使用负逻辑,逻辑“0”输入用3~15V的电平表示,逻辑“1”输入用-3~-15V的电平表示;输出时,逻辑“0”需要驱动器输出5~15V的电平,逻辑“1”需要驱动器输出-5~-15V的电平,驱动器的输出阻抗小于300欧姆。连接电缆长度15米,传输速度最大不超过20Kbps。3第三页,共五十一页,2022年,8月28日3)电平转换电路
PC机与单片机要实现真正的双向数据通信,需要3根线,即RXD、TXD和GND。4第四页,共五十一页,2022年,8月28日单片机UART的一帧数据(TTL)5第五页,共五十一页,2022年,8月28日举例 用户通过PC机键盘输入一串数字(小于255,且数字间以空格隔开),PC机收到结束符(255)后,将数字存入数组,等待向单片机发送数据的触发命令(空格键)。每按下一次空格键触发一个字节的数据传输,每个字节传输过程为:PC机通过串行口将数据传给单片机,单片机收到后回传这个数据,并存入自己内部一段连续的空间中,PC机接到回传数据后显示出来。直至传输完结束符(255),实验结束。6第六页,共五十一页,2022年,8月28日流程7第七页,共五十一页,2022年,8月28日(二)RS485接口设计RS-485以与RS232传输数据的格式一致,以差分平衡方式传输信号,具有很强的抗干扰的能力,允许一个发送器驱动多个负载设备,采用半双工通信。工业现场控制系统中应用广泛。
1)电气特性
发送端信号的电压范围为2~6V和-2~-6V,接收端信号的电压范围为0.2~6V和-0.2~-6V,传输能力:1200m远的距离时,传输速率为10Kbps;100m远的距离时,传输速率为10Mbps。
2)多机通信的硬件电路 采用主从式结构:从机不主动发送命令或数据,一切都由主机控制。8第八页,共五十一页,2022年,8月28日只有一台单机作为主机,各台从机之间不能直接通讯;在总线末端接一个匹配电阻,吸收总线上的反射信号9第九页,共五十一页,2022年,8月28日SCON:串行口控制寄存器用于控制和监视串行口的工作状态
10第十页,共五十一页,2022年,8月28日多机通讯
在多机工作在方式2和3时,若从机SM2置1,可实现多机通讯。
SM2=1时,只有第9位=1,才能置位RI,引起中断。主机可以通过发送第9位的不同来区别所发的是地址还是数据,地址时,第9位为1,数据时第9位为0。
11第十一页,共五十一页,2022年,8月28日3)注意的问题复位时,主从机都应该处于接收状态。SN75176芯片的发送和接收转换是由芯片的RE*,DE端控制的。RE*=1,DE=1时,SN75176发送状态;RE*=0,DE=0时,S75176处于接收状态。如果用单片机的一根口线作发送和接收控制信号,应该将口线反向后接入SN75176的控制端,使上电时处于接收状态。另外,上电时或正式通讯之前,对串行口做几次空操作,清除端口的非法数据和命令。12第十二页,共五十一页,2022年,8月28日RE*,DE信号脉宽应该大于一帧信号的宽度半双工通信中,由于发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。
发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能; 接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。
13第十三页,共五十一页,2022年,8月28日4.5.2I2C串行扩展
I2CBUS(InterICBUS)是Philips推出的芯片间串行传输总线,以两根线实现了完善的同步数据传送,不需要片选线,可以方便地构成多机系统和外围器件扩展系统。
14第十四页,共五十一页,2022年,8月28日(一)I2C总线的信号线I2C为开漏或开集电极输出,需加上拉电阻Rp,输出能实现线“与”的逻辑功能。时钟线SCL和数据线SDA都是双向传输线,总线备用时SDA和SCL都保持高电平,只有关闭I2C总线时才使SCL钳位在低电平。(二)I2C总线的驱动能力 在标准模式下数据传送速率100kbit/s。总线的驱动能力受总线电容限制,不加驱动扩展时驱动能力为400pF。15第十五页,共五十一页,2022年,8月28日(三)I2C总线的工作方式I2C总线上支持多主和主从两种工作方式。在多主方式中,通过硬件和软件的仲裁,主控制器取得总线控制权。而在多数情况下,系统中只有一个主器件,只需要了解主从工作方式。 很多CPU芯片都具有I2C总线主接口,能够按照状态码自动进行总线管理,用户只要在程序中装入这些标准处理模块对总线操作即可。(四)I2C总线上的器件地址
在主从方式中,从器件的地址包括器件编号地址和引脚地址,器件地址由I2C总线委员会分配,引脚地址决定于引脚外接电平的高低。16第十六页,共五十一页,2022年,8月28日当器件内部有连续的子地址空间进行N个字节的连续读、写,子地址会自动加1。
种类型号器件地址及寻址字节备注256×8静态RAMPCF8570C1010A2A1A0R/W三位数字引脚地址A2A1A0256BE2PROM512BE2PROM1024BE2PROM2048BE2PROMAT24C02AT24C04AT24C08AT24C161010A2A1A0R/W1010A2A1P0R/W1010A2P1P0R/W1010P2P1P0R/W三位数字引脚地址A2A1A0二位数字引脚地址A2A1一位数字引脚地址A2无引脚地址,A2A1A0悬空8位I/O口PCF8574PCF8574A0100A2A1A0R/W0111A2A1A0R/W三位数字引脚地址A2A1A0三位数字引脚地址A2A1A04位LED驱动控制器SAA106401110A1A0R/W二位模拟引脚地址A1A0160段LCD驱动控制器PCF8576011100A0R/W一位数字引脚地址A04路A/D、1路D/A转换器PCF85911001A2A1A0R/W三位数字引脚地址A2A1A0日历时钟PCF8583101000A0R/W一位数字引脚地址A017第十七页,共五十一页,2022年,8月28日I2C接口器件的寻址字节由3部分组成,芯片类型地址(4位),数字引脚地址(3位),读/写地址(1位)。以8574为例:SLAW=0X40;SLAR=0X41。(五)I2C总线的数据传送与时序
主从机之间的一次数据传送由启动信号、若干数据字节和应答位、停止信号组成。1)一位数据的传输
SCL的一个周期对应一位数据传送,低电平时允许数据线上的电平变化,高电平期间数据线上的电平稳定。(启动停止除外)芯片类型地址数字引脚地址读/写01000000(写),1(读)18第十八页,共五十一页,2022年,8月28日2)总线数据传送的启动与停止启动信号与停止信号都由主控制器产生。启动信号:在时钟线保持高电平期间,数据线出现由高电平向低电平变化时启动I2C总线停止信号:在时钟线保持高电平期间,数据线上出现由低到高的电平变化时将停止I2C总线3)数据字节和应答 每次传送的字节数没有限制,每个字节传送高位在先,后必跟一个应答位或非应答位,数据传送和应答位的时钟脉冲均由主机产生。发送应答位时,发送端在应答时钟脉冲高电平期间释放SDA(高),转由接收器控制,发出应答位或非应答位。19第十九页,共五十一页,2022年,8月28日4)一次完整的数据传输5)数据传送格式写操作:其中,■:主发送,从接收;□:主接收,从发送;SSLAWAData1AData2A…Datan-1ADatanPA/
20第二十页,共五十一页,2022年,8月28日
S:起始信号;
Sr:重复起始信号;
P:停止信号;
A:应答信号; :非应答信号;
SLAW:写寻址字节;
SLAR:读寻址字节;Datal~Datan:被写入/读出的n个数据字节。读操作:
SSLARAData1AData2A…Datan-1ADatan
P21第二十一页,共五十一页,2022年,8月28日读写操作:(注:未注明数据方向)4.5.3模拟I2C的程序设计 可以软件模拟I2C协议,完成主控器件功能。
选用P1.6、P1.7作为时钟线SCL和数据线SDA,晶振采用6MHz。
包括启动(STA)、停止(STOP)、发送应答位(MACK)、发送非应答位(MNACK)、应答位检查(CACK)、发送一个字节数据(WRBYT)、接收一个字节数据(RDBYT)、发送n个字节数据(WRNBYT)、接收n个字节数据(RDNBYT)九个子程序。
A/SSLAW/RAData1A…DatanSrSLAR/WAA/Data1A…DatanP22第二十二页,共五十一页,2022年,8月28日C51中,软件包分为两个文件:IIC.H和IIC.C。应用时,此二文件加入同一工程,统一编译、连接。WRNBYT子程序针对的是肯定应答。
IIC.H:
sbitSDA=P1^7; sbitSCL=P1^6; #defineucharunsignedchar #defineuintunsignedint externvoidsta();/*1-启动I2C总线*/ externvoidstop();/*2-停止I2C总线数据传送*/ externvoidmack();/*3-发送应答位*/ externvoidmnack();/*4-发送非应答位*/
23第二十三页,共五十一页,2022年,8月28日
externvoidcack();/*5-应答位检查*/ externvoidwrbyt(ucharshu);/*6-发送一个字节*/ externvoidwrbyt0(); externvoidwrbyt1(); externucharrdbyt(); /*7-读取一个字节*/ externvoidwrnbyt(ucharslaw,ucharnumber,ucharff[]); /*8-发送n个字节*/ externvoidrdnbyt(ucharnumber,ucharslar,ucharqq[]); /*9-接收n个字节*/
24第二十四页,共五十一页,2022年,8月28日IIC.C:
#include<intrins.h> #include<reg51.h> #include<iic.h> /***********1-启动I2C总线*****************/ voidsta() { SDA=1; SCL=1; while(SCL==0){;} _nop_(); SDA=0; _nop_(); _nop_(); SCL=0; }
25第二十五页,共五十一页,2022年,8月28日/*******2-停止I2C总线数据传送**********/ voidstop() { SDA=0; SCL=1; while(SCL==0){;} _nop_(); SDA=1; _nop_(); _nop_(); SCL=0; }
26第二十六页,共五十一页,2022年,8月28日/*********3-发送应答位********************/ voidmack() { SDA=0; SCL=1; _nop_(); _nop_(); SCL=0; SDA=1; }
27第二十七页,共五十一页,2022年,8月28日/********4-发送非应答位*******************/ voidmnack() { SDA=1; SCL=1; _nop_(); _nop_(); SCL=0; SDA=0; }
28第二十八页,共五十一页,2022年,8月28日/*************5-应答位检查********************/ voidcack() { SDA=1; SCL=1; F0=0; if(SDA==0) {SCL=0; _nop_();_nop_(); } else {F0=1; SCL=0; _nop_();_nop_();} }
29第二十九页,共五十一页,2022年,8月28日/********************写0子函数******************/ voidwrbyt0() { SDA=0; SCL=1; _nop_(); _nop_(); SCL=0; }/*****************写1子函数*******************/ voidwrbyt1() { SDA=1; SCL=1; _nop_(); _nop_(); SCL=0; SDA=0; }
30第三十页,共五十一页,2022年,8月28日/********6-发送一个数据字节**************/ voidwrbyt(ucharshu) { voidwrbyt0(); voidwrbyt1(); uchari; if((shu&0x80)>0) {SDA=1;} else {SDA=0;} SCL=1; while(SCL==0){;} _nop_();
31第三十一页,共五十一页,2022年,8月28日 SCL=0; SDA=0; shu=_crol_(shu,1); for(i=1;i<8;i++) { if((shu&0x80)>0) { wrbyt1(); } else { wrbyt0(); } shu=_crol_(shu,1); } }
32第三十二页,共五十一页,2022年,8月28日/***************7-读取一个数据字节****************/ ucharrdbyt() { ucharnn=0xff,mm=0x80,uu=0x7f; ucharj; uintq=0; for(j=0;j<8;j++) { SDA=1; SCL=1; if(SDA==0) { nn=(nn&uu); nn=_crol_(nn,1); SCL=0; }
33第三十三页,共五十一页,2022年,8月28日
else { nn=(nn|mm); nn=_crol_(nn,1); SCL=0; } } return(nn); }
34第三十四页,共五十一页,2022年,8月28日/***************8-发送n个字节数据**************/ voidwrnbyt(ucharslaw,ucharnumber,ucharff[]) { ucharidatak; for(;;) {do { sta(); wrbyt(slaw); cack(); }while(F0==1);
35第三十五页,共五十一页,2022年,8月28日 for(k=0;k<number;k++) { wrbyt(ff[k]); cack(); if(F0==1)break; } if(F0==0)break; } stop(); }
36第三十六页,共五十一页,2022年,8月28日/**********9-接收n个字节数据****************/ voidrdnbyt(number,slar,qq) ucharnumber,slar,qq[]; { ucharidatadata0,l; do{ sta(); wrbyt(slar); cack(); }while(F0==1);
37第三十七页,共五十一页,2022年,8月28日 for(l=0;l<number;l++) { data0=rdbyt(); qq[l]=data0; if(l<(number-1)) mack(); } mnack(); stop(); }
38第三十八页,共五十一页,2022年,8月28日举例1:使用软件包实现SAA1064驱动LED
SAA1064可静态驱动2个八段LED或动态驱动4个LED
器件地址为0111,地址引脚A1A0由引脚ADR上的模拟输入电平决定,VSS-00、3/8VDD-01、5/8VDD-10、VDD-11。 片内有状态寄存器、控制寄存器和四个段码寄存器。 读操作只有读状态寄存器,不必对应片内子地址。 控制寄存器和显示段码寄存器对应写操作,子地址是00,01~04。
39第三十九页,共五十一页,2022年,8月28日使用软件包实现SAA1064驱动LED显示(续1)
40第四十页,共五十一页,2022年,8月28日使用软件包实现SAA1064驱动LED显示(续2)
控制寄存器中,C0位决定是动态还是静态显示,C1、C2分别控制1、3位和2、4位的暗亮,C3置“1”可以点亮所有显示段,C4、C5、C6控制输出电流。
SAA1064的读数据操作是读状态寄存器,操作格式如下:
其中:
SLAR为01110A1A01;
STADATA为状态数据字节。
SSLARASTADATA
P41第四十一页,共五十一页,2022年,8月28日使用软件包实现SAA1064驱动LED显示(续3)
控制命令字节和显示段码的顺序写入可完成显示控制,操作格式如下:
其中:
SUBADR为SAA1064片内地址单元首址(00H);
COM为SAA1064的控制命令;
Data1~Data4为4个LED显示块的共阴极段选码。
SSLAWASUBADRACOMAData1AData2AData3AData4AP
42第四十二页,共五十一页,2022年,8月28日使用软件包实现SAA1064驱动LED显示(续4)参考程序 从左至右动态显示0、1、2、3。
#include<intrins.h>#include<reg51.h>#include<iic.h> voidmain() {uchark1[6]={0x00,0x77,0x3F,0x06,0x5B,0x4F}; /*片内子地址,控制命令,0-3的编码*/ wrnbyt(0x76,6,k1); }
43第四十三页,共五十一页,2022年,8月28日举例2:使用软件包PCF8574扩展I/O口
PCF8574是8位的I/O口扩展器件,器件地址为0100,地址引脚有三位A2A1A0,一个I2C总线上最多可以接8片PCF8574。PCF8574的8位口是准双向口,为正确读入端口电平,应先置“1”。PCF8574有中断输出端,为漏极开路结构,需要上拉电阻,并支持多个引脚同时与单片机中断输入相连,当I/O端口上状态发生变化时,有效,输出低电平,完成对PCF8574的读写操作后,恢复为高电平。44第四十四页,共五十一页,2022年,8月28日PCF8574的输出数据操作格式为:
其中,POdata是发送数据。输入数据操作格式为:其中,PIdata为输入数据。SSLAWAPOdataAPSSLARAPIdata
P45第四十五页,共五十一页,2022年,8月28日PCF8574的八个I/O口中低四位扩展成一个四按键的独立式键盘,高四位分别控制四个发光二极管。
46第四十六页,共五十一页,2022年,8月28日
每个按键与一个发光二极管对应,按下按键,对应发光管点亮,再次按下按键发光管熄灭。#include<intrins.h>#include<reg51.h>#include<iic.h>ucharflag; /*中断标志*/uchartemp[1]={0x00};ucharshow(uchart,ucharnum,ucharshow){ ucharidatak0[1]={0x00}; ucharidatak1[5]={0xEF,0xDF,0xBF,0x7F,0x0f}; ucharidatak2[5]={0x10,0x20,0x40,0x80};if(t==0) { k0[0]=(show&k1[num-1])|0x0f; } else { k0[0]=(show|k1[4])|k2[num-1]; }wrnbyt(0x4e,1,k0);return(k0[0]);}47第四十七页,共五十一页,2022年,8月28日voidmain(){ucharidatak[1]={0xff};uchartemp1,s1,s2,s3,s4,temp2;s1=0;s2=0;s3=0;s4=0;/*初始状态4个发光二极管为灭状态*/IP=0x01;wrnbyt(0x4e,1,k); /*初始时4个发光二极管全灭,输入口为”1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 含子女抚养的离婚协议书模板
- 企业运营管理咨询协议样本
- 2024工程挖掘机租赁合同标准范文
- 新住宅按揭贷款合同样本
- 2024录制合同模板
- 2024广告刊登协议范本
- 动物医院聘用合同2024年
- 省级代理合作协议书的注意事项
- 我国自学考试网上辅导协议书样本大全
- 2023年高考地理第一次模拟考试卷-(河北A卷)(全解全析)
- 空调安装施工方案及空调安装现场管理办法
- 甘肃省黄金矿产资源概况
- 诊所消防安全应急方案
- 译林版一年级上册英语全册课件
- 中小学德育工作指南考核试题及答案
- 净现值NPV分析和总结
- 国网基建各专业考试题库大全-质量专业-中(多选题汇总)
- LTC流程介绍完整版
- 饲料加工系统粉尘防爆安全规程
- 一年级上册美术课件-第11课-花儿寄深情-▏人教新课标
- 植物的象征意义
评论
0/150
提交评论