串行总线扩展实验程序代码
实验15 I2C 总线串行扩展——AT24C02存储器读写[共2页]
![实验15 I2C 总线串行扩展——AT24C02存储器读写[共2页]](https://img.taocdn.com/s3/m/1dd33d68c77da26925c5b0e9.png)
312 式。
液晶显示屏模块1602内置控制器44780,可显示2行,每行16个字符,要求单片机控制1602液晶显示模块分两行显示“Hello Welcome To Heilongjiang”,第一行显示“Hello Welcome”,第二行显示“To HeiLongJiang”。
2.实验目的(1)了解单片机控制字符型的工作原理和方法。
(2)掌握单片机如何来控制液晶显示屏模块1602。
(3)接口电路设计完毕后,编写程序控制字符型液晶显示屏模块1602的字符显示。
实验13 DAC0832的D/A转换实验 1.实验要求单片机输出的数字量D0~D7加到DAC0832的输入端,用虚拟直流电压表测量DAC0832的输出电流经运放LM358N的I/V转换后的电压值,并使用虚拟直流电压表查看输出电压的变化。
仿真运行,可看到虚拟直流电压表测量的电压在-2.5~0V范围内变化。
如果由于电压表图标太小,显示的电压值不清楚,可用鼠标滚轮放大整个电路原理图。
2.实验目的掌握单片机与DAC0832的接口设计和软件编程。
实验14 ADC0809的A/D转换实验 1.实验要求利用A/D转换器ADC0809 (Proteus元件库中没有ADC0809,可用库中与其兼容的ADC0808替代),由输入模拟电压通过调整电位器阻值的大小提供给ADC0809模拟量输入,编写程序控制ADC0809将模拟量转换成二进制数字量,并送P1口输出来控制发光二极管亮或灭来表示转换结果的二进制代码显示转换完毕的数字量。
2.实验目的(1)掌握ADC0809的工作原理及基本性能。
(2)掌握单片机与ADC0809的接口设计。
(3)掌握软件编程控制单片机进行数据采集。
实验15 I2C总线串行扩展——AT24C02存储器读写1. 实验要求利用AT24C02、Proteus的I2C调试器,实现单片机读写存储器AT24C02的实验。
KEY1充当外部中断0中断源,当按下KEY1时,单片机通过I2C总线发送数据AAH给AT24C02,等发送数据完毕后,将数据AAH送P2口通过LED显示出来。
第8章51单片机外部串行总线扩展的C51编程

8.1 I2C总线接口技术
• 8.1.1 认识I2C总线 • I2C总线是Philips公司推出的芯片间的 串行传输总线,它采用同步方式接收或 发送信息。 I2C总线以两根连接线实现 全双工同步数据传送,可以极方便地构 成外围器件扩展系统。 • I2C总线的两根线分别为: • ① 串行数据SDA(Serial Data) • ② 串行时钟SCL(Serial Clock)
VCC RP
DS18B20
I/O
单 片 机
GND DQ VCCDQDQ源自…DQ DS18B20
DS18B20 DS18B20
常用的单总线器件:
8.3.2
单总线典型器件DS18B20
8.4
12位串行A/D转换器TLC2543
• TLC2543是TI公司生产的12位串行A/D转 换器,使用开关电容逐次逼近技术完成 A/D转换过程。
【例8-4】模拟输入信号从通道0输入,将 输入的模拟量转换成二进制数在显示器上 显示出来。
【例8-1】AT24C02举例: 将数据“0x55”写入AT24C02,然后将其 读出并发出送到P1口显示。
8.2
•
SPI总线接口技术
• • • •
SPI是Motorola公司推出的一种同步串行 外设接口,允许MCU与各厂家生产的标准外围 设备直接接口,以串行方式交换数据。SPI用 以下3个引脚完成通信: ① 串行数据输出SDO(Serial Data Out),简称SO。 ② 串行数据输入SDI(Serial Data In),简称SI。 ③ 串行数据时钟SCK(Serial Clock)。 另外挂接在SPI总线上的每个从机还需要 一根片选线。
spi是motorola公司推出的一种同步串行外设接口允许mcu与各厂家生产的标准外围设备直接接口以串行方式交换数据
串行接口扩展

扩展并行输出口时,可用串入并出移位寄存器芯片,如 CMOS芯片4094和74LS164芯片。4094芯片的引脚信号如图930(a)所示。Q1~Q8是8个并行输出端;DATA是串行数据输 入端;CLK是时钟脉冲端,时钟脉冲既用于串行移位,也用 于数据的并行输出;QS、、Q8是移位寄存器最高位输出端; OE是并行输出允许端;STB是选通脉冲端,STB高电平时, 4094选通移位,低电平时,4094可并行输出。74LS164的引 脚信号如图9-30(b)所示。74LS164与4094的使用类似。
//传完清除标志位,准备下一次数据传输 //置4094于并行输出工作方式 //串行口数据发送完毕,P3.1上已停止同步移位
//为使4094并行输出数据,软件产生一个脉冲上
//原地循环,相当于SJMP$
单片机原理与应用
单片机原理与应用
串行接口扩展
MCS-51单片机串行口工作于方式0时,串行口作为同步移 位寄存器使用,这时以RXD(P3.0)端作为数据移位的输入端或 输出端,而由TXD(P3.1)端输出移位脉冲。如果把能实现“并 入串出”或“串入并出”功能的移位寄存器与串行口配合使 用,就可使串行口转变为并行输入或输出口使用。
SL=0;
//置4014于串行移位工作方式
SCON=0x10;
while(RI!=1); RI=0; data_L=SBUF; SCON=0x10;
while(RI!=1); RI=0; data_H=SBUF; while(1); }
//置串行口为工作方式0,同时 //置位REN启动串行口接数据
sbit SL=P1^7;
//位定义
sbit CLK=P3^1;
void main()
//主程序
常用串行总线数据操作的C51编程

总 线 。传 统 的 平 行 总 线 因 为 采 用 平 行 的 结 构 , 所 以 !" 之 间接线较多, 且需要译码电路, 显 得 非 常 复 杂 。而 具 备 ! #" 总线功 能 的 组 件 , 其地 址 已 经 内 置 在 组 件 中 , 只 需 要 且可靠性和安全性会 更 好 , $67 、 $"8 # 条线就能传送数据, 每 个 具 有 ! #" 总线的 !" 均 可 以 视 为 独 立 的 模 块 。
6789 :A8<MQR<M=>?@;A 9;<C >?@;A AM;9QR<M=6789C
3 3 写字节 3 3 读字节
!
小
结
’&2 程 序 如 下 :
3 ! 012-+.) 晶 振 4#%5 ! 3 6789 :;8<=>?@;A ?7>B<C D >?@;< E ; F7A=EG) ; EH?7>B< ; EIIC ; J 6789 8B8<=6789C D 0KG2 ; 0KG) ; L;8<=&)C ; 0KG2 ; L;8<=.C ; L;8<=,)C ; J 6789 :A8<M)=6789C D 0KG2 ; 0KG) ; L;8<=4C ; 0KG2 ; L;8<=2C ; J $ 2 . 3 3 写 ) 信号 3 3 初始化 3 3 延时子程序
!"& ’()*+, 总 线 接 口 芯 片 编 程
简单io口扩展实验报告

简单IO口扩展实验报告1. 背景在实际应用中,我们经常需要扩展计算机的输入输出(IO)接口,以满足不同的需求。
而简单IO口扩展就是一种常见且重要的扩展方式。
通过简单IO口扩展,我们可以将计算机连接到更多的外部设备,如传感器、执行器等,从而实现更多功能和应用。
2. 分析2.1 简单IO口介绍简单IO口是指通用输入输出接口,它可以通过数字信号来进行数据的输入和输出。
每个简单IO口通常包括一个输入引脚和一个输出引脚。
通过控制这些引脚的电平状态,我们可以实现数据的输入和输出。
2.2 简单IO口扩展方法简单IO口可以通过不同的方法进行扩展,常见的方法包括:•并行接口:使用并行接口可以同时传输多个位的数据。
它通常使用多条数据线和一些控制线来实现高速数据传输。
•串行接口:使用串行接口可以逐位地传输数据。
它通常使用一条数据线和一些控制线来实现较低速率但更简洁的数据传输。
•USB接口:USB(Universal Serial Bus)是一种常见的数字串行总线接口,它可以连接多种设备,并提供高速数据传输和供电功能。
•SPI接口:SPI(Serial Peripheral Interface)是一种常用的串行外设接口,它可以连接多个外设,并以主从模式进行数据传输。
•I2C接口:I2C(Inter-Integrated Circuit)是一种常见的串行通信接口,它可以连接多个外设,并使用两条线路进行数据传输。
2.3 简单IO口扩展实验本次实验旨在通过简单IO口扩展方法,将计算机与外部设备进行连接,并实现数据的输入和输出。
具体步骤如下:1.确定要使用的简单IO口扩展方法,如并行接口、串行接口等。
2.根据选择的扩展方法,准备相应的硬件模块和连接线缆。
3.将硬件模块与计算机进行连接,确保电气连通性。
4.编写相应的驱动程序或使用现有的驱动程序,以实现与硬件模块的通信。
5.运行程序并测试扩展功能。
3. 结果经过实验测试,我们成功地实现了简单IO口扩展,并达到了预期的结果。
利用串行口扩展并口

附页:实验线路图:编译程序:源程序代码:1 汇编语言程序清单ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#60HMOV TMOD,#01HSETB ET0SETB EAMOV TH0,#3CHMOV TL0,#0B0HSETB TR0MOV 30H, #0 ; 每中断一次加1MOV 31H, #0 ; 每秒加1, 当其值为100时清0 MOV 32H, #0 ; 个位MOV 33H, #0 ; 十位LP:MOV R0,#32HMOV R7,#2ACALL BINBCDMOV DPTR,#TABDSPLY:MOV A,@R0MOVC A,@A+DPTRCPL AMOV SBUF,ADSP1:JNB TI,DSP1CLR TIINC R0DJNZ R7,DSPLYLP1:MOV A,30HCJNE A, #10, LP1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#100,LPMOV 31H,#0SJMP LPINTT0:MOV TL0,#0B0HMOV TH0,#3CHINC 30HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H; 入口参数二进制数存放在31H中; 出口参数 BCD数十位(33H), 个位(32H)BINBCD:MOV A,31HMOV B,#10DIV ABMOV 33H,AMOV A,BMOV 32H,ARETEND ; 程序结束2 C 语言程序清单#include <AT89X51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//共阴数码管段码:0~9,全亮,全灭,Puchartab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00,0x 73};uchar timer; //定时器每中断1次加1void main(void){uchar ten,one,count;SP=0x60;TMOD=0x01; //定时器T0方式1定时ET0=1; //开定时器T0中断EA=1; //开总中断TH0=0x3C; //每100ms中断一次TL0=0xB0;TR0=1; //启动定时器T0timer=0;count=0;do{do{ten=count/10; //求得十位one=count%10; //求得个位SBUF=~tab[one]; //发送个位while(~TI);TI=0;SBUF=~tab[ten]; //发送十位while(~TI);TI=0;while(timer<10); //延时1s,即10*100ms timer=0;count++; //每隔一秒,count值加1 }while(count<100); //从0计到99count=0;} while(1);}void intt0() interrupt 1{TH0=0x3C;TL0=0xB0;timer++;}。
单片机C语言-第8章 外部串行总线扩展的C51编程 3

BIT0 2-4 24
DS18B20可以将温度转换成两个字节的数据,该数据 可以设定为9位~12位精度。上表是12位精度的温度数据存 储结构,其中S位是符号位。当温度高于0℃,S位是0,11 位数据直接乘以温度分辨率0.0625 ℃ ;当温度低于0℃, S位是1 ,11位数据是实际温度数据的补码,需要取反加1 后得到原码,再乘以温度分辨率得到实际温度值。
VCC
DS18B20 GND DQ VCC
I/O 单 片 机
RP
DQ
DQ
…
DQ
DS18B20 DS18B20
DS18B20
常用的单总线器件如下:
8.3.2 单总线典型器件DS18B20
• DS18B20数字式温度传感器的特点如下: • (1)温度测量范围为-55~+125℃,固有测温分辨
率0.5V; • (2)测量结果以9位数字量方式进行串行传输; • (3)用户可设置报警温度的上下限; • (4)在使用中不需要任何外围器件。
TM位用于切换测试模式和日常工作模式。芯片出厂 时,该位被置0,设置为日常工作模式。R1和R0用来设置 DS18B20采样精度。
R1
R0
分辨率
采样时间 温度分辨率
0
0
9位
93.75ms
0.5℃
0
1
10位
187.5ms
0.25℃
1
0
11位
375ms
0.125℃
1
1
12位
750ms
0.0625℃
DS18B20的功能命令列表
DS18B20温度分辨率与采样精度位数有关,9位采样 精度的分辨率是0.5℃ ,10位是0.25℃ , 11位是0.125℃ ,12位是0.0625℃ 。
单片机C语言-第8章 外部串行总线扩展的C51编程1

3、写操作方式
(1)字节写 在字节写模式下,主机发送起始命令和器件地址信
息(R/W位置0),主机在收到AT24CXX产生的应答信号后, 发送1~8位字节地址,写入AT24CXX的地址指针。对于高 于8位的地址,主机连续发送两个8位字节地址,写入 AT24CXX的地址指针。主机收到AT24CXX回答后,再发 送数据到被寻址的存储单元。 AT24CXX再次回答,在主 机发出停止信号后开始内部数据的擦写。
2、AT24CXX系列串行E2PROM的寻址
(1)寻址方式字节
AT24CXX系列串行E2PROM寻址方式字节 中的高4位(D7~D4)为器件地址, AT24CXX系 列固定为1010;寻址字节中D3、D2、D1为引脚 地址。
(2)应答信号
I2C总线数据传送时,每成功传送1字节数 据后,接收器件都必须产生一个应答信号。接 收器件在第9个时钟周期时将SDA线拉低,表示 已收到一个8位数据。
第8章 外部串行扩展的C51编程
8.1 I2C总线接口技术 8.2 SPI总线接口技术 8.3 单总线(1-wire)接口技术 8.4 串行A/D接口芯片TLC2543的C51编程
外部串行扩展的特点及应用领域:
• (1)串行扩展连接线灵活,占用单片机资源少, 系统结构简化,极易形成用户的模块化结构。
(3)应答信号(ACK):I2C总线传送数据时, 每传送一个字 节数据后都必须有应答信号, 与应答信号相对应的时钟 由主器件产生。 这时发送方必须在这一时钟上释放总线, 使其处于高电平状态,以便接收方在这一位上送出应答信 号。 应答信号在第9个时钟位上出现, 接收方输出低电平 为应答信号。
I2C总线上的应答信号和非应答信号
(4)非应答信号(ACK): 每传送完一字节数据后,在第9个 时钟位上接收方输出高电平为非应答信号。 由于某种原因 而使接收方不产生应答时(如接收方正在进行其他处理而无 法接收总线上的数据),则必须释放总线, 将数据线置高电 平,然后主控器可通过产生一个停止信号来终止总线数据 传输。 当主器件接收来自从器件的数据时, 接收到最后一 个字节数据后,必须给从器件发送一个非应答信号(ACK), 使从器件释放数据总线, 以便主器件发送停止信号,从而 终止数据传送。
实验十三 利用串行口扩展并口实验

实验十三利用串行口扩展并口实验一实验目的①掌握MSC-51单片机串行口方式0时的工作原理;了解通过串行口扩展输出口,进行静态显示的方法。
②掌握串行移位寄存器芯片74LS164的工作原理。
二实验器材1.实验仪一台;2. 编程器一台;3.小镊子一把;三实验原理MCS-51单片机除了具有四个8位的并行口外,还具有一个全双工的串行通信接口,该接口有4种工作方式,当工作于方式1、2和3时,作UART(通用异步接收和发送器),实现单片机系统之间点对点的单机通信、多机通信和单片机系统与PC机之间的通信;而工作于方式0时,为同步移位寄存器输入/输出方式,常用于扩展I/O口,这时串行数据通过RxD引脚输入或输出,引脚TxD输出同步移位信号,收/发数据都为8位,低位在前,波特率为振荡频率的1/12。
本实验中通过74LS164实现串入并出。
由于74LS164的输出高电平电流为 -1mA,而输出低电平电流为20mA,故这里必须使用共阳极的数码管,并且数码管的“a”笔画由引脚13输出,“h”笔画由引脚3输出,请同学们注意。
另外采用静态显示,编程简单,显示效果好,具体线路如图13所示(图中省去了复位电路、时钟电路等电路)四跳线设置如程序存放在AT89S51中,AT89S51的/EA(引脚31)必须接高电平,实验时需短路J13的1和2引脚,否则;必须短路J13的2和3引脚;实验时需要短接J4的3和5以及4和6;J7的2、3。
五实验内容与要求编制程序使数码管循环依次显示00到99,每秒加1。
六源程序ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#60HMOV TMOD,#01HSETB ET0SETB EAMOV TH0,#3CHMOV TL0,#0B0HSETB TR0MOV 30H, #0 ; 每中断一次加1MOV 31H, #0 ; 每秒加1, 当其值为100时清0MOV 32H, #0 ; 个位MOV 33H, #0 ; 十位LP:MOV R0,#32HMOV R7,#2ACALL BINBCDMOV DPTR,#TABDSPLY:MOV A,@R0MOVC A,@A+DPTRCPL AMOV SBUF,ADSP1:JNB TI,DSP1CLR TIINC R0DJNZ R7,DSPL YLP1:MOV A,30HCJNE A, #10, LP1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#100,LPMOV 31H,#0SJMP LPINTT0:MOV TL0,#0B0HMOV TH0,#3CHINC 30HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 入口参数二进制数存放在31H中; 出口参数BCD数十位(33H), 个位(32H);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BINBCD:MOV A,31HMOV B,#10DIV ABMOV 33H,AMOV A,BMOV 32H,ARETEND ; 程序结束七实验结论基本掌握MSC-51单片机串行口方式0时的工作原理;了解通过串行口扩展输出口,进行静态显示的方法。
单片机C语言-第8章 外部串行总线扩展的C51编程4

TLC2543的工作时序
3、TLC2543的命令字
数据的长度(D3~D2)用来选择转换的结果采用多少位 输出。D3D2为×0,12位输出; D3D2为01,8位输出; D3D2为11,16位输出。
数据的顺序位D1用来选择数据输出的顺序。D1为0, 高位在前; D1为1,低位在前。
数据的极性位D0用来选择数据的极性。D0为0,数据 是无符号数; D0为1,数据是有符号数。
2)在DATAOUT端串行输出8、12或16位数据。当CS保持 为低电平时,第一个数据出现在EOC的上升沿;若转换 由CS控制,则第一个输出数据出现在CS的下降沿。这 个数据串是前一次转换的结果,在第一个输出数据位 之后的每一个后续位均由后续的I/O CLOCK脉冲的下降 沿输出。 (2)转换周期
• while(1)
•{
•
ad=read2543(0x00);
•
P0=xiao[ad/1000];
•
P2_0=1;
•
delay(3);
•
)/100];
•
P2_1=1;
•
delay(3);
•
P2_1=0;
•
P0=xiao[(ad%100)/10];
•
P2_2=1;
(1)I/O周期 I/O周期由外部提供的I/O CLOCK定义,延续8、12或
16个时钟周期,决定选定的输出数据的长度。 1) 在I/O CLOCK的前8个脉冲的上升沿,以MSB前导
I2C总线串行扩展技术

二、80C51单主系统虚拟I2C总线软件包
80C51只能采用虚拟I2C总线方式,并且只能用 于单主系统,虚拟 I2C 总线接口可用通用 I/O 口中 任一端线充任,数据线定义为 VSDA ,时钟线定义 为VSCL。
§8-3 I2C总线串行扩展技术
一、I2C总线串行扩展概述
1、扩展连接方式
具有I2C总线结构的器件,不论SRAM、E2PROM、 ADC/DAC、I/O口或MCU,均可通过SDA、SCL连接 (同名端相连)。 无I2C总线结构的器件,如LED/LCD显示器、 键盘、码盘、打印机等也可通过具有I2C总线结 构的I/O接口电路成为串行扩展器件。
;取接收数据字节数N(存在内RAM NUMB单元) ;启动I2C总线 ;读接收寻址字节(存在内RAM SLA单元) ;发送接收寻址字节 ;检查应答位 ;应答不正常,返回重新开始 ;应答(A)正常,取接收数据存储区首址 ;接收一个字节数据 ;存一个字节数据 ;判N个数据接收完毕否?未完转发送应答位 ;N个数据接收完毕,发送应答非位(A) ;发送终止信号 ;子程序结束返回 ;发送应答位(A) ;指向下一接收数据存储单元地址 ;转接收下一字节数据
3、虚拟I2C总线软件包VIIC小结
⑴ VIIC软件包共有9个归一化子程序组成。 ⑵ VIIC 软件包仅适用单主系统即主方式下 I2C 总线外围扩 展。且应fosc≤6MHz ,若 fosc > 6MHz ,则应相应调整 NOP指令个数,以满足I2C总线数据传送时序要求。 ⑶ VIIC软件包可嵌入到80C51 ROM中任一空间,作为I2C总 线扩展应用程序设计的软件支持平台。 ⑷ 在应用VIIC软件包初始化中,应对软件包中标记符号用 伪指令定义。 ⑸ VIIC软件包占用资源: F0、Cy、Acc、R1、R1、R3。在 调用VIIC软件包之前,若涉及这些存储单元中原有数据 尚需保存,应采取保护现场措施,在调用结束后恢复现 场。
实验五:串行接口输入输出实验

实验五串行接口输入/输出实验一、实验目的1、学习TEC-XP+教学计算机I/O接口扩展的方法;2、学习串行通信的基本知识,掌握串行通信接口芯片的设置和使用方法。
二、实验说明1、TEC-XP+教学计算机的I/O结构TEC-XP+教学计算机配置有COM1和COM2两个串行接口,其中COM1是TEC-XP+默认的标准接口,与PC终端相连接,监控程序负责对COM1进行初始化和使用管理。
COM2预留给用户扩展使用,监控程序不能识别COM2,也不对COM2进行任何操作,用户需要对COM2进行初始化和使用管理。
COM1和COM2均由可编程串行通信接口芯片intel8251芯片构成。
2、Intel8251的组成及控制和使用方法可编程串行通信接口芯片Intel8251支持同步和异步两种通信方式。
在异步方式下,波特率为0~19.2Kbps,数据位可为5、6、7或8位,可设1个奇偶校验位,1个起始位,1个、1.5个或2个停止位。
Intel8251内部有7个功能模块负责实现与CPU的数据交换以及与I/O设备的数据通信功能,内部有6个寄存器,其中与异步通信方式的有关的寄存器有5个,即模式寄存器、控制寄存器、状态寄存器、数据发送寄存器和数据接收寄存器。
模式寄存器的功能是设定intel8251的工作模式,控制寄存器的功能是控制intel8251的数据发送和接收等工作过程,状态寄存器的功能是反映intel8251数据发送和接收等工作的状态,各寄存器的格式如图5-1、图5-2和图5-3所示。
当CPU把需发送的数据写入数据发送寄存器后,intel8251将自动把数据组成帧并逐位发送出去。
Intel8251能自动完成数据接收操作,并把接收到的数据存放在数据接收寄存器中,CPU从中读取即可。
图5-1模式寄存器格式图5-2 控制寄存器格式图5-3 状态寄存器格式CPU对模式寄存器、控制寄存器和数据发送寄存器只能写入,不能读出。
对状态寄存器和数据接收寄存器只能读出,不能写入。
单片机总线扩展实验报告

单片机总线扩展实验报告1. 背景单片机是一种嵌入式微处理器,常用于控制系统和电子设备中。
然而,单片机的输入输出引脚有限,并且常常需要与其他外部设备进行通信。
为了解决这个问题,我们需要进行总线扩展实验。
总线扩展是通过额外的硬件元件来扩展单片机的输入输出能力。
在本实验中,我们使用了I2C总线作为扩展方式。
I2C总线是一种串行通信总线,可以连接多个设备,使它们能够共享信息。
2. 分析在本实验中,我们使用了STM32单片机和一些外部设备,包括温湿度传感器和液晶显示屏。
我们将通过I2C总线来连接这些设备。
首先,我们需要在单片机上启用I2C总线功能。
通过相关的寄存器设置,我们可以配置I2C总线的时钟频率等参数,以确保与外部设备的正常通信。
接下来,我们需要连接温湿度传感器和液晶显示屏到I2C总线上。
这需要通过正确的引脚连接来实现。
我们还需根据设备的数据手册来确定各个设备的I2C地址,以便在通信时正确识别设备。
对于温湿度传感器,我们可以通过I2C总线发送相应的命令,并读取传感器返回的温湿度数据。
这些数据可以通过数值转换和校准得到实际的温度和湿度值。
对于液晶显示屏,我们可以使用I2C总线发送相应的命令和数据来显示信息。
我们可以将温湿度数据以及其他文本信息显示在液晶屏上。
3. 结果在实验中,我们成功地使用I2C总线实现了单片机与温湿度传感器和液晶显示屏的通信。
以下是我们的实验结果:•温湿度传感器能够准确地测量环境的温度和湿度。
•单片机能够通过I2C总线正确地读取并处理传感器的数据。
•液晶显示屏能够正确地显示温湿度数据以及其他文本信息。
4. 建议在进行总线扩展实验时,我们遇到了一些挑战和问题。
以下是我们的一些建议:•在接线和引脚连接时,请仔细阅读设备的数据手册,并按照说明进行正确的连接。
•在使用I2C总线时,需要设置正确的时钟频率和其他参数。
请确保对单片机的寄存器设置正确。
•当与外部设备通信时,可能会遇到一些通信失败或数据错误的情况。
8用串行口扩展并行输出口

CHANGZHOU INSTITUTE OF TECHNOLOGY 单片机实践报告题目:用串行口扩展并行输出口学院:延陵学院班级:姓名:学号:一、实验目的1、掌握AT89C52串行口方式0的工作方式和编程2、掌握利用串行口和移位寄存器扩展并行接口的方法二、实验电路元器件编号元器件名称 说明 U1 AT89C52 AT89C52单片机 U2 74HC164.IEC 并行输出串行口移位寄存器7SEG-BCD7段BCD 数码管显示器三、实验流程图开始初始化串口I<8?循环移位100次? 置零检查状态i++结束NYYN四、调试步骤用查询TI方式,在7段BCD数码管显示器循环显示0~99这100个数字。
五、实验代码#include<REG52.H>#include<stdio.h>#include<intrins.h>#include<Absacc.h>#include<string.h>#include<ctype.h>#define byte unsigned char#define uchar unsigned char#define word unsigned int#define uint unsigned int#define ulong unsigned long#define BYTE unsigned char#define WORD unsigned int#define TRUE 1#define FALSE 0void initUart(void); //初始化串行口void time(unsigned int ucMs); //延时单位:mssbit CTRL_OUT = P3^4; //=0,清零;=1,并行输出/******HEXtoBCD*****/unsigned char HEXtoBCD (unsigned char hex){return ((hex/10)*16+(hex%10));}/********main c*********/void main(void){uchar i,wByte=0;initUart(); //初始化串行口方式0CTRL_OUT=1; //=1,允许并行输出for(;;){for(i=0;i<8;i++){SBUF=HEXtoBCD(wByte); //循环右移i位,串行输出wByte++;if(wByte==100) //0-99循环wByte=0;while(!TI){} //状态查询TI=0; //清发送中断标志time(88); //状态维持}}}void delay_5us(void) //延时5us,晶振改变时只改变这一个函数{_nop_();_nop_();//_nop_();// _nop_();}/*delay_50us*/void delay_50us(void) //延时50us{unsigned char i;for(i=0;i<4;i++){delay_5us();}}/******************延时100us********************/void delay_100us(void) //延时100us{delay_50us();delay_50us();}/*延时单位:ms*/void time(unsigned int ucMs){unsigned char j;while(ucMs>0){for(j=0;j<10;j++)delay_100us();ucMs--;}}/**********初始化串行口波特率********/void initUart(void) //初始化串行口方式0 {SCON=0x00; //串行口方式0工作ES=0; //禁止串行中断}六、运行效果。
IIC总线的串行扩展

(1)控制字节 在起始条件之后,必须是器件的控制字节,其中,高四位 为器件类型识别符(不同的芯片类型有不同的定义,如E2PROM 为1010),接着三位为片选,最低位为读写控制位,为“1”时 为读操作,为“0”时为写操作。如下图所示。
(2)写操作 写操作分为字节写和页面写两种操作,对于页面写,根据 芯片的一次装载的字节不同有所不同。页面写的地址、应答和 数据传送的时序如下图所示。
其他常用总线标准
通用串行总线USB 1. 通用串行总线USB
通用串行总线USB(Universal Serial Bus)是在1994年底由康柏、IBM、 Microsoft等多家公司联合制定的.其特点是 数据传输速率高(达480Mbps )、 传输可靠、传输距离不大于5米,可通过菊花链的形式同时挂接多个(可达 127个)USB设备,能为设备供电,可提供100mA~500mA的电流,支持热 插拔,具有实时性、联合性、多能性。USB接口主要应用于计算机周边外部 设备,如电话、MODEM、键盘、U盘、光驱、摇杆、磁带机、软驱、扫描 MODEM U 仪、打印机、数码相机/摄相机等。
7.2
I2C总线标准与接口电路
I2C总线(Inter Integrated Circuit Bus):是Philips公司推出的串行
总线标准(为二线制)。总线上扩展的外围器件及外设接口通过总线寻址, 是具备总线仲裁和高低速设备同步等功能的高性能多主机总线。
1. I2C总线工作原理 组成: 组成: 串行数据线SDA和串行时钟线SCL构成的,可发送和接 收数据。 要求:所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且 要求:
所有的SDA/SCL同名端相连。总线上所有器件要依靠SDA发送的地址信号 寻址,不需要片选线。