实验二 UART0通信、I2C主机读写与CAT1025和SPI接口
- 格式:doc
- 大小:317.50 KB
- 文档页数:8
SPI、I2C、UART三种串行总线协议的区别SPI、I2C、UART三种串行总线协议的区别(2009-07-09 17:24:10)转载▼标签:杂谈分类:资料收藏【转载】SPI、I2C、UART三种串行总线协议的区别第一个区别当然是名字:SPI(Serial Peripheral Interface:串行外设接口);I2C(INTER IC BUS)UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。
SPI总线可以实现多个SPI设备互相连接。
提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。
主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
(注:I2C资料了解得比较少,这里的描述可能很不完备)UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
SPI IIC UART 串口通讯通信协议所谓通信协议是指通信双方的一种约定。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。
因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。
目前,采用的通信协议有两类:异步协议和同步协议。
同步协议又有面向字符和面向比特以及面向字节计数三种。
其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。
一、物理接口标准1.串行通信接口的基本任务(1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。
在异步通信方式下,接口自动生成起止式的帧数据格式。
在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。
所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。
因此串并转换是串行接口电路的重要任务。
(3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。
(4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。
在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。
(5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。
(6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。
这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。
2、串行通信接口电路的组成为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA与TTL电平转换器以及地址译码电路组成。
实验题目:UART0通信、I2C主机读写CAT1025和SPI接口一、实验目的1,学习使用UART0通信、I2C主机读写CAT1025和SPI接口控制。
2,熟悉LPC2138开发板的使用。
3,锻炼学生自己的设计、创造和综合能力。
二、实验仪器微型计算机(含软件H-JTAG V0.3.1和ADSv1_2)、Easy ARM2131开发板、USB接口电源线和JTAG接口线以及部分跳线。
三、实验原理(1)UART0特性:管脚描述:(2)I2CLPC2138具有标准的硬件I2C接口,可配置为主机或从机,总线时钟速率可调整,最高可支持400K 总线速率。
使用I2C总线时,相应引脚设置连接I2C总线,并且总线上要接两个上拉电阻,阻值1-10K欧。
相关寄存器功能框图如图4.40所示:(3)SPI主机实验——7段数码管显示实验使用LPC2138的SPI接口作为主机向74HC595发送数据,数据内容由7段数码管显示。
实验电路图如图2.四、实验内容实验使用主硬件I2C软件包,从上位机向UART0发送数据,将接收到的数据通过I2C往CAT1025内部写入数据,然后读出校验,如果正确则使用SPI驱动数码管显示所写数据。
实验程序如下:#include "config.h"#define CAT1025 0xA0 /* CAT1025器件从地址*/#define HC595_CS (1 << 29) // P0.29口为74HC595的片#define UART_BPS 115200 // 串口通讯波特率uint8 n,rcv_data;const uint32 LED1 = (1 << 18); // P1.18控制LED1,低电平点亮const uint32 KEY1 = 1 << 16; // P0.16连接KEY1/* 此表为LED0~F以及L、P的字模*/uint8 const DISP_TAB[16] = {// 0 1 2 3 4 5 6 7 8 90xC0, 0xF9, 0xA4, 0xB0, 0x99 ,0x92, 0x82, 0xF8, 0x80,0x90};******************************************************************************************** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久******************************************************************************************void DelayNS (uint32 dly){uint32 i;for ( ; dly>0; dly--)for (i=0; i<50000; i++);}/******************************************************************************************* 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。
常见接口电路介绍一、I2C总线简介1. 什么是I2C?NXP 半导体(原Philips 半导体)于20 多年前发明了一种简单的双向二线制串行通信总线,这个总线被称为Inter-IC 或者I2C 总线。
目前I2C 总线已经成为业界嵌入式应用的标准解决方案,被广泛地应用在各式各样基于微控器的专业、消费与电信产品中,作为控制、诊断与电源管理总线。
多个符合I2C 总线标准的器件都可以通过同一条I2C 总线进行通信,而不需要额外的地址译码器。
由于I2C 是一种两线式串行总线,因此简单的操作特性成为它快速崛起成为业界标准的关键因素2. I2C总线的基本概念1)发送器(Transmitter):发送数据到总线的器件2)接收器(Receiver):从总线接收数据的器件3)主机(Master):初始化发送、产生时钟信号和终止发送的器件4)从机(Slave):被主机寻址的器件其线路结构图如下:如上图示,I2C 总线具有如下特点:1)I2C 总线是双向传输的总线,因此主机和从机都可能成为发送器和接收器。
不论主机是发送器还是接收器,时钟信号SCL 都要由主机来产生2)只需要由两根信号线组成,一根是串行数据线SDA,另一根是串行时钟线SCL3)SDA 和SCL 信号线都必须要加上拉电阻Rp(Pull-Up Resistor)。
上拉电阻一般取值3~10KΩ4)SDA 和SCL 管脚都是漏极开路(或集电极开路)输出结构3. I2C总线的信号传输1)3种速率可选择标准模式100kbps、快速模式400kbps、最高速率3.4Mbps2)具有特定的传输起始、停止条件a)起始条件:当SCL 处于高电平期间时,SDA 从高电平向低电平跳变时产生起始条件。
起始条件常常简记为Sb)停止条件:当SCL 处于高电平期间时,SDA 从低电平向高电平跳变时产生停止条件。
停止条件简记为P3)数据传输从确定从机地址开始a)多个从机可连接到同一条I2C 总线上,它们之间通过各自唯一的器件地址来区分b)一般从机地址由7 位地址位和一位读写标志R/W 组成,7 位地址占据高7 位,读写位在最后。
SPII2CUART三种串行总线协议及其区别SPI(Serial Peripheral Interface)是一种常见的串行总线协议,主要用于单片机和外部设备之间的通信。
SPI协议需要同时使用多个信号线,包括时钟信号、主从选择信号、数据输入信号和数据输出信号。
SPI协议是一种全双工的通信方式,数据可以双向传输。
SPI通信协议的特点包括以下几点:1.时钟信号:SPI协议中的设备之间使用了共享的时钟信号,时钟信号用于同步数据传输。
时钟信号由主设备控制,并且时钟频率可以根据需要调整。
SPI协议没有固定的时钟频率限制,可以根据实际需求进行调整。
2.主从选择信号:SPI协议中的从设备需要通过主从选择信号进行选择。
主设备通过拉低从设备的主从选择信号来选择与之通信的从设备。
可同时与多个从设备通信。
3.数据传输:SPI协议是一种由主设备控制的同步通信协议,数据在时钟的边沿上升移位。
主设备在时钟的上升沿将数据发送给从设备,从设备在时钟的下降沿将数据发送给主设备。
SPI协议的优势在于速度快、可靠性高,适合于需要高速传输的应用,如存储器、显示器驱动等。
I2C(Inter-Integrated Circuit)是一种常见的串行总线协议,主要用于集成电路之间的通信。
I2C协议仅需要两根信号线:序列时钟线(SCL)和串行数据线(SDA)。
I2C协议是一种半双工通信方式,数据只能单向传输。
I2C通信协议的特点包括以下几点:1.序列时钟线(SCL):SCL是在主设备和从设备之间共享的信号线,用于同步数据传输。
主设备通过拉高和拉低SCL来控制数据传输的时钟频率。
2.串行数据线(SDA):SDA负责数据的传输。
数据在SCL的上升沿或下降沿变化时,主设备或从设备将数据写入或读取出来。
3.地址寻址:I2C协议使用7位或10位的地址寻址,从设备可以根据地址进行选择。
I2C协议的优势在于可以连接多个设备,节省了引脚,适用于多设备之间的通信,如传感器、温度传感器、压力传感器等。
I2C和SPI-图文SPI/I2C总线虽然现实世界中的信号都是模拟信号,但是越来越多的模拟IC产品通过数字接口实现通讯。
微处理器通过几条总线控制周边的设备,比如:模/数转换器(ADC),数/模转换器(DAC),智能电池,端口扩展,EEPROM以及温度传感器。
与数据的平行传输接口不同,串行数据通过两条、三条或者四条数据/时钟总线连续地传输比特数据。
虽然并行的总线具有传输速度快的特点,但是串行总线具有使用较少的控制和数据线的优点。
2线和3线的总线在大多数微处理器上应用于收发数据。
串行接口在提供串行时钟的主设备和从设备/周边设备之间的进行通讯。
串行接口有三种:三线、二线和单线。
本文着眼于二线和三线的串行接口。
三线的接口包括:片选线(CS或SS)、时钟线(SCLK)和数据输入/主设备输出线(DIN或MOSI)。
三线接口有时也包括一条数据输出/主设备输入线(DOUT或MISO)。
包含DOUT线的三线接口有时也叫做四线接口。
为了叙述的简便,本文将三线接口和四线接口统称为三线接口。
二线接口包括一条数据线(SDA或SMBDATA)和一条时钟线(SCL或SMBCLK)。
串行外设接口(SPI),队列串行外设接口(QSPI)和MicroWire(或MicroWire/Plu)接口都是三线接口。
芯片间总线(I2C)和SMBUS都是二线接口。
这些串行接口拥有各自的优点和缺点,见表1。
三线接口可以以更高的时钟频率工作,并且不需要上拉电阻。
SPI/QSPI和MicroWire接口都可以工作在全双工模式(数据可以在同一时间发送和接收)。
而且三线接口是边沿触发的而不是电平触发,因此具有更强的抗干扰能力。
三线接口的主要缺点是它要为每一个从设备提供一条片选线,除非将从设备用菊链形式连接。
另外一个缺点是三线接口没有应答机制去判断数据的收发是否正确。
二线接口的优点是使用更少的连线,这一点在紧凑的设计中尤为重要,比如:手机、光纤的应用,因为二线接口为每个从设备分配唯一的地址,所以可以实现一根总线连接多个从设备而不需要片选线。
单片机的I2C和SPI通信I2C和SPI是两种不同的通信协议。
听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已,我们只要遵照这个标准去做事,就可以。
比如公司规定早上9点上班,我们就9点上班,不然就会扣薪水,这就是个协议。
用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。
用SPI通信的芯片有外置FLASH芯片,同样,还有其他功能的一些芯片。
I2C通信需要用到两个引脚:SDA SCL。
SCL是时钟引脚,SDA是数据引脚。
(这是EEPROM芯片)(这是时钟芯片)SPI通信需要3个引脚或者4个引脚:CS SCK MOSI MISO。
SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。
SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI 引脚上输出数据,同时可以在MISO上获得数据了。
(这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)(这是一个SPI接口的ADC芯片,Dout是MISO,DCLOCK就是SCK,这个芯片有3个SPI引脚)大部分单片机上面都会带有I2C口和SPI口,有可能还会有好几个I2C口和SPI口。
不过,不带I2C口和SPI口的单片机,也可以通过普通引脚的模拟他们的时序来进行通信。
而且,如果是初学者的话,一定要学习一下用普通引脚模拟,对他们的通信本质理解更深刻。
通信全程,其实就是控制引脚高低电平和检测引脚高低电平的过程,话说,控制单片机的引脚高低电平和检测引脚的高低电平,第一天学单片机就会了,所以,I2C通信和SPI通信也没什么难的地方。
给大家讲一个最简单的通信过程,例如我们称下面的通信名称为KJLWT,名字是不是看起来很吊,其实是“科技老顽童”的拼音首字母,因为接下来的协议是我刚刚发明的,所以以此命名^_^。
单⽚机常⽤IIC、SPI、UART接⼝介绍很多⼈听到IIC总线、SPI总线、485总线什么的就会晕,其实,数据传输的接线⽅式,⼤体上就是两种:⼀种是并⾏接⼝,⼀种是串⾏接⼝。
并⾏接⼝是什么?⽤并⾏⽅式来传输数据的接⼝。
假如我想传输⼏个8位的数据,那好,单⽚机上⽤8个IO传送数据,每次就能传送⼀个。
假如想传输⼏个16位的数据呢?那就要⽤16个IO!优点是速度快,缺点是占⽤的IO太多了。
串⾏接⼝是什么?是指数据在有限的⼏个IO上按照顺序,⼀位⼀位的进⾏传输。
这类有很多:UART、IIC、SPI、CAN、USB等等,只要是串⾏传输的接⼝,都是串⼝的⼀种。
但是由于早期⼈们都习惯把UART⼝称为串⼝,导致很多⼈都习惯了说串⼝的时候特指UART⼝。
IIC接⼝IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在⼋⼗年代初设计出来的⼀种简单、双向、⼆线制、同步串⾏总线,主要是⽤来连接整体电路(ICS) ,IIC是⼀种多向控制总线,也就是说多个芯⽚可以连接到同⼀总线结构下,同时每个芯⽚都可以作为实时数据传输的控制源。
主要包括启始、停⽌、读、写、应答信号。
这种⽅式简化了信号传输总线接⼝。
IIC总线上可以挂多个器件,⽽每个器件都有唯⼀的地址,这样可以标识通信⽬标。
数据的通信的⽅式采⽤主从⽅式,主机负责主动联系从机,⽽从机则被动回应数据。
能⽤于替代标准的并⾏总线,能连接的各种集成电路和功能模块。
I2C是多主控总线,所以任何⼀个设备都能像主控器⼀样⼯作,并控制总线。
总线上每⼀个设备都有⼀个独⼀⽆⼆的地址,根据设备它们⾃⼰的能⼒,它们可以作为发射器或接收器⼯作。
多路微控制器能在同⼀个I2C总线上共存。
SPI接⼝SPI 是英语 Serial Peripheral Interface 的缩写,顾名思义就是串⾏外围设备接⼝。
SPI 是⼀种⾼速的、全双⼯、同步通信总线,标准的 SPI 也仅仅使⽤ 4 个引脚,常⽤于单⽚机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。
I2C的读写操作实验[实验任务]利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置。
首先利用单片机做一个0-99秒的自动计时器。
然后随机关断电源,在通电以后计时器接着断电前的状态继续计时。
[实验原理]首先简单的说明以下I2C总线,I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
在I2C总线上传送的一个数据字节由八位组成。
总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。
数据传送首先传送最高位(MSB),数据传送按图1所示格式进行。
首先由主机发出启动信号“S”(SDA在SCL 高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。
启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。
被寻址到的从机设备按传送方向位设置为对应工作方式。
标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第九位答时钟脉冲时向SDA线送出低电平作为应答。
除了第一字节是通用呼叫地址或十位从机地址之外第二字节开始即数据字节。
数据传送完毕,由主机发出停止信号“P”(SDA在SCL高电平期间由低电平跳变为高电平)。
AT24C系列串行E2PROM具有I2C总线接口功能,功耗小,宽电源电压(根据不同型号2.5V~6.0V),工作电流约为3mA,静态电流随电源电压不同为30μA~110μA,AT24C系列串行E2PROM参数如下型号容量器件寻址字节(8位) 一次装载字节数AT24C01 128×8 1010A2A1A0 R/W 4AT24C02 256×8 1010A2A1A0 R/W 8AT24C04 512×8 1010A2A1P0 R/W 16AT24C08 1024×8 1010A2P1P0 R/W 16AT24C16 2048×8 1010P2P1P0 R/W 16由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位数据(即一个I2C总线系统中理论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位(读/写)。
微机原理实验报告实验名称:UART0通信、I2C主机读写CAT1025和SPI接口院系:物理与机电工程学院专业班级:08电子信息工程学号:2008041501学生姓名:陈琳琳指导教师:涂二生完成时间:2011年4月21日报告成绩:实验二UART0通信、I2C主机读写CAT1025和SPI接口一、实验目的1,学习使用UART0通信、I2C主机读写CAT1025和SPI接口控制。
2,熟悉LPC2138开发板的使用。
3,锻炼学生自己的设计、创造和综合能力。
二、实验仪器微型计算机(含软件H-JTAG V0.3.1和ADSv1_2)、Easy ARM2131开发板、USB接口电源线和JTAG接口线以及部分跳线。
三、实验原理(1)UART0特性:管脚描述:(2)I2CLPC2138具有标准的硬件I2C接口,可配置为主机或从机,总线时钟速率可调整,最高可支持400K总线速率。
使用I2C总线时,相应引脚设置连接I2C总线,并且总线上要接两个上拉电阻,阻值1-10K欧。
相关寄存器功能框图如图4.40所示:(3)SPI主机实验——7段数码管显示实验使用LPC2138的SPI接口作为主机向74HC595发送数据,数据内容由7段数码管显示。
实验电路图如图2.四、实验内容实验使用主硬件I2C软件包,从上位机向UART0发送数据,将接收到的数据通过I2C往CAT1025内部写入数据,然后读出校验,如果正确则使用SPI 驱动数码管显示所写数据。
实验程序如下:#include "config.h"#define CAT1025 0xA0 /* CAT1025器件从地址*/#define HC595_CS (1 << 29) // P0.29口为74HC595的片#define UART_BPS 115200 // 串口通讯波特率uint8 n,rcv_data;const uint32 LED1 = (1 << 18); // P1.18控制LED1,低电平点亮const uint32 KEY1 = 1 << 16; // P0.16连接KEY1/* 此表为LED0~F以及L、P的字模*/uint8 const DISP_TAB[16] = {// 0 1 2 3 4 5 6 7 8 90xC0, 0xF9, 0xA4, 0xB0, 0x99 ,0x92, 0x82, 0xF8, 0x80,0x90};****************************************************************************************** ** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久****************************************************************************************** void DelayNS (uint32 dly){uint32 i;for ( ; dly>0; dly--)for (i=0; i<50000; i++);}/***************************************************************************************** ** 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。
****************************************************************************************** void MSPI_Init(void){PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;SPCCR = 0x52; // 设置SPI时钟分频SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样(1 << 4) | // CPOL = 1, SCK 为低有效(1 << 5) | // MSTR = 1, SPI 处于主模式(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先(0 << 7); // SPIE = 0, SPI 中断被禁止}/***************************************************************************************** ** 函数名称:MSPI_SendData()** 函数功能:向SPI总线发送数据。
** 入口参数:data 待发送的数据** 出口参数:返回值为读取的数据****************************************************************************************** uint8 MSPI_SendData(uint8 data){IOCLR = HC595_CS; // 片选74HC595SPI_SPDR = data;while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕IOSET = HC595_CS;return(SPI_SPDR);}******************************************************************************************** ** 函数名称:I2cInit()** 函数功能:I2C初始化** 入口参数:Fi2c I2C总线频率(最大400K)****************************************************************************************** void I2cInit(uint32 Fi2c){if (Fi2c > 400000)Fi2c = 400000;PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; // 不影响其它管脚连接I2SCLH = (Fpclk/Fi2c + 1) / 2; /* 设定I2C时钟*/ I2SCLL = (Fpclk/Fi2c)/2;I2CONCLR = 0x2C;I2CONSET = 0x40; /* 使能主I2C *//* 设置I2C中断允许*/VICIntSelect = 0x00000000; /* 设置所有通道为IRQ中断*/VICVectCntl0 = (0x20 | 0x09); /* I2C通道分配到IRQ slot0,最高优先级*/VICVectAddr0 = (int32)IRQ_I2C; /* 设置I2C中断向量*/VICIntEnable = (1 << 9); /* 使能I2C中断*/}****************************************************************************************** ** 函数名称:UART0_Init()** 函数功能:串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
****************************************************************************************** void UART0_Init (void){uint16 Fdiv;U0LCR = 0x83; // DLAB=1,允许设置波特率Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率U0DLM = Fdiv / 256;U0DLL = Fdiv % 256;U0LCR = 0x03;}******************************************************************************************** ** 函数名称:UART0_GetByte()** 函数功能:从串口接收1字节数据,使用查询方式接收。
** 出口参数:接收到的数据***************************************************************************************** uint8 UART0_GetByte (void){uint8 rcv_dat;while ((U0LSR & 0x01) == 0); //一直等待U0LSR第零位为1(为1说明B0RBR中接收到数据)rcv_dat = U0RBR;return (rcv_dat);}******************************************************************************************** ** 函数名称:UART0_GetStr()** 函数功能:从串口接收** 入口参数:s 指向接收数据数组的指针n 接收的个数****************************************************************************************** void UART0_GetStr (uint8 *s, uint32 n){for ( ; n>0; n--){*s++ = UART0_GetByte();}}****************************************************************************************** ** 函数名称:UART0_SendByte()** 函数功能:向串口发送字节数据,并等待发送完毕,查询方式。
** 入口参数:dat 要发送的数据****************************************************************************************** void UART0_SendByte (uint8 dat){U0THR = dat;while ((U0LSR & 0x40) == 0); // 等待数据发送完毕}****************************************************************************************** ** 函数名称:UART0_SendStr()** 函数功能:向串口发送一字符串** 入口参数:str 要发送的字符串的指针****************************************************************************************** void UART0_SendStr (uint8 const *str){while (1){if (*str == '\0') break; // 遇到结束符,退出UART0_SendByte(*str++); // 发送数据}}****************************************************************************************** ** 函数名称:main()** 函数功能:从上位机向UART0发送数据,将接收到的数据通过I2C往CA T1025内部写入数据,然后读出校验,如果正正确则使用SPI驱动数码管显示所写数据。