C8051F340学习笔记—UART
uart 协议
uart 协议UART协议。
UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信协议,广泛应用于各种嵌入式系统和通信设备中。
它是一种简单而又灵活的通信方式,能够在不同设备之间进行可靠的数据传输。
本文将对UART协议的基本原理、工作方式和应用进行详细介绍。
UART协议的基本原理是通过串行通信的方式,将数据以位的形式传输。
它采用异步通信模式,即在数据传输时不需要时钟信号的同步,而是通过起始位、数据位、校验位和停止位的组合来完成数据的传输。
这种方式使得UART协议在不同系统之间能够灵活地进行数据交换,成为了一种通用的通信协议。
在UART协议中,数据的传输是以位为单位进行的,通常采用8位数据位的方式进行传输。
在传输过程中,首先发送一个起始位,用于标识数据传输的开始;然后发送8位的数据位,包括要传输的实际数据;接着发送一个校验位,用于检测数据传输过程中是否出现错误;最后发送一个或多个停止位,用于标识数据传输的结束。
通过这样的方式,UART协议能够实现可靠的数据传输。
在实际应用中,UART协议通常用于连接各种外设设备,如传感器、显示屏、通信模块等。
它能够通过串口与主控芯片进行连接,实现数据的传输和控制。
另外,UART协议还被广泛应用于嵌入式系统中,如单片机、嵌入式开发板等,用于与外部设备进行通信。
除了基本的数据传输功能外,UART协议还具有一些其他特性。
例如,它可以通过改变波特率来适应不同的数据传输速率,从而满足不同应用场景的需求。
此外,UART协议还支持全双工和半双工通信模式,能够实现双向数据传输。
总的来说,UART协议作为一种通用的异步串行通信协议,具有简单、灵活、可靠的特点,被广泛应用于各种嵌入式系统和通信设备中。
它通过串行通信的方式,实现了不同设备之间的数据传输和控制,为各种应用场景提供了便利。
在未来的发展中,UART协议将继续发挥重要作用,为各种设备之间的通信提供可靠的支持。
串口通信程序 单片机
UART1 has six associated SFRs. Three are used for the Baud Rate Generator (SBCON1, SBRLH1, and
from the Transmit Holding Register.
With UART1 interrupts enabled, an interrupt is generated each time a transmit is completed (TI1 is set in
SCON1), or a data byte has been received (RI1 is set in SCON1). The UART1 interrupt flags are not
C8051F340串口通信程序(UART1)/***************************************************************
UART1 is an asynchronous, full duplex serial port offering a variety of data formatting options. A dedicated
Interrupts_Init();
}
void UART1_Send_data(unsigned char Send_data)// /helloelectron
{
SBUF1=Send_data;
complete). Note that if additional bytes are available in the Receive FIFO, the RI1 bit cannot be cleared by
C8051F020 学习笔记——基本概念
C8051F020 学习笔记——基本概念C8051F020 是完全集成的混合信号系统级芯片,具有64个数字I/O引脚。
下面列出了一些主要特性:1. 高速、流水线结构的8051兼容的CIP-51内核(可达25MIPS)2. 全速、非侵入式的在线系统调试接口(片内)3. 真正12位(C8051F020)100ksps的8通道ADC,带PGA和模拟多路开关。
4. 真正8位500ksps的ADC,带PGA和8通道模拟多路开关5. 两个12位DAC,具有可编程数据更新方式6. 64K字节可在系统编程的FLASH存储器7. 4352(4096+256)字节的片内RAM8. 硬件实现的SPI、SMBus/IIC和两个UART串行接口9. 5个通用的16位定时器10. 具有5个捕捉/比较模块的可编程计数器/定时器阵列11. 片内看门狗定时器、VDD监视器和温度传感器每个MCU都可在工业温度范围(-45C到+85C)内用2.7V-3.6V的电压工作.端口I/O、/RST和JTAG引脚都容许5V的输入信号电压。
C8051F020/2为100脚TQFP 封装。
C8051F020系列器件使用Silicon Labs的专利CIP微控制器内核。
CIP-51内核具有标准8052的所有外设部件,包括5个16位的计数器/定时器、两个全双工UART、256字节内部RAM、128字节特殊功能寄存器(SFR)地址空间及8/4个字节宽的I/O端口。
速度提高:CIP-51采用流水线结构,70%的指令的执行时间为1个或两个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。
CIP-51工作在最大系统时钟频率25MHz,它的峰值性能达到25MIPS。
增加的功能:C8051F020系列MCU对CIP-51内核和外设有几项关键性的改进:扩展的中断系统向CIP-51提供22个中断源(标准8051只有7个中断源),允许大量的模拟和数字外设中断微控制器。
C8051F系列微控制器UART电路设计
微
处
理
机
NO . 4
MI CROP ROCE S SORS
Ag u ., 2 01 7
C 8 0 5 1 F系列微控制器 U A R T电路设计
孙 静
( 中国电子 科技 集 团公 司第 四十 七研 究所 , 沈阳 1 1 0 0 3 2 ) 摘 要: 介 绍C 8 0 5 1 F系列 U A R T的功 能结 构和 传 输 数据 帧 的格 式 , 通 过 其操 作模 式和 两种 典 型 的通信方式, 详细分析 U A R T内部特殊功能寄存器 的功能和使用方法, 阐述发送部分和接 收部分 电 路设 计过 程 , 通 过特 定 程 序对 内部特 殊 功 能寄存 器 的标 志位 , 发送 、 接 收端 口时序 以及 多机 通信 过 程 进 行仿 真 , 并 给 出仿 真波形 图。 关键词: C 8 0 5 1 F系列; 异步 串行接 口; 特殊功能寄存器; 多机通信 ; 仿真波形 ; 仿真程序
2 寄存 器功能描述
U A R T 包括六个特殊功能寄存器。串行 口波特 率控制 寄存器 S B C O N 0 、波特率分 频系数 寄存器 S B R L H 0 、 S B R L L 0 , 三 个寄 存 器用 于设 定 系统 通讯 波
电控制等嵌人式领域。目前人们对 U A R T的认识仅
仅 是各 种手 册 的文 字描 述 ,通 过在线 调试 和示 波 器
监测等手段亦不能显示传输过程 中每个时刻 内部寄 存器的变化情况 。如果在数据传输的同时能观察到 内部 寄存 器 的变 化就 能解决 上述 问题 ,这 样有 利 于 编 程人 员 更 深 入 的 了解 U AR T的工 作 原 理 , 因此从 集成 电路设 计出发 , 重点从 U A R T的内部介绍其电 路工作原理及时序的产生。
AVR单片机学习七异步串行口UART
AVR单片机学习(七)异步串行口UART 串行通讯技术概述异步串行通讯原理UART与电脑的通讯M16的USART中断方式使用USART步骤一、串行通讯技术概述串行通讯的通俗定义:一位发送一位(相对与并行,)当然通过位同步帧同步串行通讯的分类同步串行通讯时钟线、数据线、通过时钟保持数据同步SPI,IIC属于同步串口通讯异步串口通信只有一根数据线,通过波特率保证数据同步(顾名思义没有时钟线只有数据线)UART无线通信一般均为异步串行通信(相对于无形之中只能有一根天线)波特率每秒发送码元时间宽度为(1/9600)S大概是在100个微妙左右发送方按照波特率发出数据接收方按照波特率确定码元时间宽度对数据进行采样帧格式8位数据格式idle 空闲时候保持高电平在发送数据的时候先发送一位起始位低电平0然后数据 0 1 。
8 位P这位是可选的一般在多级通讯的时候需要发送9位数据在第9位时候是地址位SP1(必选的一位停止位是1)也可以选2位加一个SP2但是一般都是1位起始位 1位停止位 8位数据位之后数据继续保持空闲高电平接线图发送端:TXD接收端:RXD交叉连接RS232电平标准逻辑1 :-15V逻辑0 :+15VDB9 接口定义TXD/RXD/GDN三根线即可瞒足绝大数应用场合下面是开发板电路图MAX3232标示的是3.3V的芯片我们用的是5V MAX232 芯片标示错了不论引脚封装还是顺序都是完全相同的。
MAX 232芯片能提供2路串口我们只用一个。
由于这个电路图上是按照DB9定义的走线了所以我们就得用交叉线来跟PC 通讯了。
M16的USART特点全双工操作(独立的串行接受合发送寄存器,不像51是公用同一个寄存器,只能半双工)异步或同步操作(当然同步一般用不到。
所以我们只当异步串行口使用)支持5,6,7,8或9个数据位和1个或2个停止位(一般用的最多是8位数据 1位停止)硬件支持的奇偶校验操作(一般用不到,有限的场合通信质量还是可靠的,没必要加上校验)三个独立的中断源(看技术文档《一》)噪声滤波,包括错误的起始位检测,以及数字低通滤波器USART寄存器universal(通用的大体的)synchronous(同步) asynchronous(异步)R/T(接受/发送)UDRUCSRAUCSRBUCSRCUBRRL与UBRRH《一》Three Separate Interrupts (3个分离独立的中断 ) TXcomplete 发送完成中断,TX Data Register Empty 发送数据寄存器空中断RX Complete 接受完成中断。
C8051F系列单片机相关应用笔记
Rev. 2.1 12/03Copyright © 2003 by Silicon LaboratoriesAN101-DS21AN101C O N F I G U R I N G T H E P O R T I/O C R O S S B A RDE C O D E R Relevant DevicesThis application note applies to the following devices:C8051F000, C8051F001, C8051F002,C8051F005, C8051F006, C8051F010, C8051F011, C8051F012, C8051F012, C8051F015, C8051F016, C8051F017, C8051F018, and C8051F019.IntroductionThe Crossbar, shown in Figure 1, is a multiplexer that maps internal digital signals to Port I/O pins on the device.This application note describes how to configure and use the Port I/O Crossbar Decoder. Softwareand examples are provided.Key Points •The Crossbar MUST be enabled in order to use any Port 0, Port 1, or Port 2 port pins as outputs.•The Crossbar registers should be configured before any of the digital peripherals are enabled.•The Crossbar registers are typically configured once at reset, near the top of the Reset handler, and then left alone.•The Crossbar settings change the pinout of the device.•Each Crossbar setting results in a device pinout that is unique. If you enable or disable peripher-als in the Crossbar, the pinout WILL change.Figure 1. Crossbar Decoder Block DiagramAN1012Rev. 2.1•The output mode of the port pins (open-drain or push-pull) must be explicitly set for the out-put port pins, even those assigned by the Cross-bar. Exceptions to this are the SDA and SCLpins on the SMBus and the RX pin on theUART, which are automatically configured as open-drain.•The open-drain or push-pull mode of Crossbar-assigned input pins (like NSS or /INT0, forexample) is not important. These pins are con-figured as inputs regardless of the correspond-ing Port Configuration Register setting.•To configure a GPIO pin as an input, the Port Configuration Register bit associated with that pin must be cleared, which selects that pin tohave an open-drain output. Additionally, thePort bit associated with that pin must be set to a ‘1’ which tri-states the pin or loosely pulls ithigh if WEAKPUD in XBR2 is set to ‘0’. This is the reset configuration of the port pins.•Τhe value at the port pins can be read at any time by reading the associated port SFR,regardless of the Crossbar register setting orwhether the pin is configured as an input or an output.•The Enable bits in the Crossbar registers are unique and distinct from the enable bits in the digital peripherals themselves.•Peripherals do not need to be enabled in the Crossbar in order to be used (for example, aPCA module can generate interrupts even if its output is not routed to a pin).•Peripherals that are enabled in the Crossbar, but disabled in their own SFRs still control the out-put state of the port pins. That is, the port pins can be read at any time, but the outputs are con-trolled exclusively by the owning peripheraland cannot be accessed as general-purpose out-puts.•The four external interrupts on Port 1(P1.[4..7]) are triggered by a falling edge at the pin, regardless of the source of the falling edge, the Crossbar setting, or the output mode of the port pin.•Unlike the standard 8051, true push-pull out-puts are provided. If the ‘strong-then-weak’ pull-up function of the 8051 is required, it can be emulated in software by configuring the associated port output as ‘push-pull’ followed by a configuration to ‘open-drain’.AN101Rev. 2.13OverviewThe Crossbar governs the pin mapping of internal digital signals and port latches to physical I/O pins on the device. Optionally, it can connect port pins to a weak pull-up to prevent them from floating when they are in a high impedence state. The Crossbar manages the following digital input and output signals, grouped by peripheral. Note: The Crossbar must be configured and enabled before the I/O of any of these peripherals can be accessed. Also, output pins such as UART TX should be configured to push-pull mode in the cor-responding PRTnCN register.•SMBus – SDA and SCL signals can be routed to 2 port pins.•SPI – MISO, MOSI, SCK, and NSS can be routed to 4 port pins.•UART – RX and TX signals can be routed to 2 port pins.•PCA – ECI input may be routed to a port pin and up to 5 of the CEXn outputs may be routed to port pins.•ADC – The Convert Start (CNVSTR) signal may be routed to a port pin.•Comparators – Comparator 0 andComparator 1 outputs may be routed to port pins.•Timers – Timer 0, Timer 1, and Timer 2 clock inputs and the T2EX reload signal may be routed to port pins.The crossbar can also map the following signals to the to the port pins on the device:•/SYSCLK – the system clock, inverted and buffered.•/INT0 and /INT1 – external interrupt input pins.The Crossbar affects the pins in Port 0, Port 1, and Port 2. If available, Port 3 as well as unassigned pins on lower ports operate as normal GPIO and are controlled by their respective port latches.The Crossbar provides two key system benefits:•All unassigned GPIO port pins on Port 0, Port 1, and Port 2 are grouped contiguously.•It provides flexibility in peripheral selection for reduced pin-count devices where some I/O ports may not be available. Peripheral selection is limited only by the number of port pins available, not by which port pins are available. This allows the system designer to choose which digital peripherals are available at the digitalI/O pins on a pin-limited device.Determining Device PinoutThe Crossbar assigns port pins to signals in priority order according to Table 4 . Therefore, the device pinout is based on peripheral selection in the Cross-bar registers: XBR0, XBR1, and XBR2.To determine the pinout, first configure the Cross-bar registers based on the peripherals needed.Then, starting at the top of Table 4 , scan down until you reach the first enabled signal. This sig-nal will use P0.0. If the signal belongs to a group of signals associated with a peripheral, the remaining signals in that group will be assigned from P0.1 up.For example, if the SPI is the first peripheral enabled, then SCK, MISO, MOSI, and NSS will be mapped to P0.0, P0.1, P0.2, and P0.3 respectively.The next enabled signal will be assigned P0.4. All unassigned pins behave as GPIO.AN1014Rev. 2.1Example 1Assume that the application calls for:•SPI•UART•2 PCA capture modules•/INT0•T2Referencing the Port I/O Crossbar Register descriptions in the datasheet, the Crossbar registers are configured as follows:XBR0 = 0x16; enable UART,; 2 PCA capture; modules, and SPIXBR1 = 0x24 ; enable T2 and INT0XBR2 = 0x40 ; enable CrossbarTable1 shows the pinout resulting from the above Crossbar configuration.Example 2Assume that the application calls for:•UART•/INT1•/SYSCLK•CNVSTRThe Crossbar registers are configured as follows: XBR0 = 0x04; enable UARTXBR1 = 0x90 ; enable /INT1 and; /SYSCLKXBR2 = 0x41 ; enable Crossbar and; CNVSTRTable2 shows the pinout resulting from the above Crossbar configuration.Table 1. Pinout for Example 1P0.0SCKP0.1MISOP0.2MOSIP0.3NSSP0.4TXP0.5RXP0.6CEX0P0.7CEX1P1.0/INT0P1.1T2P1.2 – P1.7GPIOP2.0 – P2.7GPIO Table 2. Pinout for Example 2P0.0TXP0.1RXP0.2/INT1P0.3/SYSCLK P0.4CNVSTR P0.5 – P0.7GPIOP1.0 – P1.7GPIOP2.0 – P2.7GPIOAN101Rev. 2.15Example 3Assume that the application calls for:•SMBus •UART•ECI (PCA Counter Input)•/INT0•/INT1•T2EX •CNVSTRTo enable the above signals, the Crossbar registers are configured as follows:XBR0 = 0x45; enable ECI, UART,; and SMBus XBR1 = 0x64 ; enable /INT0, /INT1,; and T2EX XBR2 = 0x41 ; enable Crossbar and; CNVSTRTable 3 shows the pinout resulting from the above Crossbar configuration.Table 3. Pinout for Example 3P0.0SDA P0.1SCL P0.2TX P0.3RX P0.4ECI P0.5/INT0P0.6/INT1P0.7T2EX P1.0CNVSTR P1.1 – P1.7GPIO P2.0 – P2.7GPIOAN1016Rev. 2.1Table 4. Priority Crossbar Decode TableAN101Rev. 2.17Software Example//------------------------------------------------------------------------------------// Crossbar1.c//------------------------------------------------------------------------------------// Copyright 2002 Cygnal Integrated Products, Inc. //// AUTH: FB// DATE: 16 DEC 02//// This example shows how to configure the Crossbar.//// Target: C8051F00x, C8051F01x //// Tool chain: KEIL Eval ‘c’////------------------------------------------------------------------------------------// Includes//------------------------------------------------------------------------------------#include <c8051f000.h> // SFR declarations//------------------------------------------------------------------------------------// Global CONSTANTS//------------------------------------------------------------------------------------sbit LED = P1^6; // green LED: ‘1’ = ON; ‘0’ = OFF//------------------------------------------------------------------------------------// Function PROTOTYPES//------------------------------------------------------------------------------------void PORT_Init(void);//------------------------------------------------------------------------------------// MAIN Routine//------------------------------------------------------------------------------------void main (void) {// disable watchdog timer WDTCN = 0xde; WDTCN = 0xad;PORT_Init(); // set up Crossbar and GPIO EA = 1; // enable global interruptsLED = 1; // turn on LED while (1) {PCON |= 0x01; // set IDLE mode }}//------------------------------------------------------------------------------------// PORT_Init//------------------------------------------------------------------------------------//// This routine initializes the Crossbar and GPIO pinsAN1018Rev. 2.1//// Pinout:// P0.0 - UART TX// P0.1 - UART RX// P0.2 - /SYSCLK//// P1.6 - LED (GPIO)//void PORT_Init(void){XBR0 = 0x04; // Enable UARTXBR1 = 0x80; // Enable /SYSCLKXBR2 = 0x40; // Enable crossbar and weak pull-upsPRT0CF |= 0x05; // Enable UART TX and /SYSCLK as push-pull // outputsPRT1CF |= 0x40; // Enable P1.6 (LED) as a push-pull output }AN101Rev. 2.19Notes:AN10110Rev. 2.1Contact InformationSilicon Laboratories Inc.4635 Boston Lane Austin, TX 78735Tel: 1+(512) 416-8500Fax: 1+(512) 416-9669Toll Free: 1+(877) 444-3032Email: productinfo@ Internet: Silicon Laboratories and Silicon Labs are trademarks of Silicon Laboratories Inc.Other products or brandnames mentioned herein are trademarks or registered trademarks of their respective holders.The information in this document is believed to be accurate in all respects at the time of publication but is subject to change without notice. Silicon Laboratories assumes no responsibility for errors and omissions, and disclaims responsibility for any consequences resulting from the use of information included herein. Additionally, Silicon Laboratories assumes no responsibility for the functioning of undescribed features or parameters. Silicon Laboratories reserves the right to make changes without further notice. Silicon Laboratories makes no warranty, rep-resentation or guarantee regarding the suitability of its products for any particular purpose, nor does Silicon Laboratories assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation conse-quential or incidental damages. Silicon Laboratories products are not designed, intended, or authorized for use in applications intended to support or sustain life, or for any other application in which the failure of the Silicon Laboratories product could create a situation where per-sonal injury or death may occur. Should Buyer purchase or use Silicon Laboratories products for any such unintended or unauthorized ap-plication, Buyer shall indemnify and hold Silicon Laboratories harmless against all claims and damages.。
UART
起始信号的识别
• 在空闲状态,UART传送线为逻辑“1”状态。数据的传送总是以一个“起始位” 开始的,接着是要传送的若干数据位,低位先行,最后是一个“1”状态的“停止 位”;那么,当接收器检测到一个“1”向“0”的跳变时,便视为可能的起始位。 起始位被确认后,就知道发送器已开始发送,当接收了已协议好的位数后并接 收到字符帧中停止位就是一帧字符数据已发送完毕。这样,接收器就知道发 送器何时开始发送数据和何时结束发送数据。要提高接收器的接收准确性, 减少误码率,必须要用比数据波特率高n倍(n≥1)的速率对数据进行采样。 16倍频采样方法:采用数据速率的16倍进行采样,采样时钟连续采样到8个低 电平信号,可确定该低电平为真正的起始位,从而防止干扰信号产生的假起 始位现象的发生。此后,接收器每隔16个采样时钟采样一次,并把采样到的 数据作为输入数据,以移位方式存入到接收移位寄存器。
UART设计框图
UART设计要求
• • • • • • • • • • • 满足RS232接口协议,实现数据传输的串并转换。 支持可编程的串行总线控制 支持独立的TXFIFO和RXFIFO。 支持RTS、CTS软流控和硬流控选择。 支持DMA访问。 支持 FIFO空满中断, receive timeout中断, Error condition 中断, 及其使能控制。 支持Auto-baud功能 支持Modem协议 支持RS485接口协议 支持LOOPBACK功能用于测试。 支持红外工作模式
Irda_红外通信模式
• 在IR 发送模式下,发送阶段通过正常串行发送占空比 3/16 的脉冲波调制(当传送的数据位为0);在IR 接 收模式下,接收必须检测3/16 脉冲波来识别0 值。
自动波特率
• 自动波特率可用于测量基于“AT”协议 (Hayes 命令)的输入波特率。如果 auto-baud 特性被使能,那么 auto-baud 特性将测量接收 数据流中的 1 位所消耗的时间,并根据这个结 果来设置RXD端的除数锁存寄存器 ,生成和 TXD端相同的波特率。 • 由于字母“A”或“a”ASCII编码(“A”= 0x41,“a”= 0x61)的关系,UART Rx 管脚所 检测的起始位以及期望字符的 LSB是由两个下 降沿来限定的。
《单片机原理与实践》 UART模块介绍
《单片机原理与实践》Cortex-M4 TM4C1294XL微处理器UART模块的介绍摘要:数据传输的接线方式大体上就是两种:一种是并行接口,一种是串行接口。
本组就串行接口展开研究,所谓串行接口是指数据在有限的几个IO上按照顺序,一位一位的进行传输。
UART、IIC、SPI、CAN、USB等只要是串行传输的接口,都是串口的一种,本文重点讨论的是其中的UART口。
一.UART定义通用异步收发器(Universal Asynchronous Receiver/ Transmitter, UART)是一个异步的串行通信接口。
UART模块将处理器内部的并行数据转换为串行数据,通过串行总线UnTX以异步通信的方式发送出去;另一方面它也可以接收UnRX 总线上的串行数据,转换为并行数据后返回给处理器进行处理。
异步模式是一种常用的通信方式,相对于同步模式,异步模式不需要一个专门的时钟信号来控制数据的收发,因此发送数据时位与位的间隙可以任意改变。
UART总线采用双向通信,可以实现全双工的发送和接收。
嵌入式设计中,UART用来与计算机或其他设备进行通信。
二.UART的优点这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通信的端口,这些参数必须匹配。
三.UART与IIC、SPI的区别1、UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少。
数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。
单片机入门培训专题(十四)-UART串行通信(一)
单⽚机⼊门培训专题(⼗四)-UART串⾏通信(⼀)连载提要:单⽚机⼊门培训专题仍在继续,在平常的单⽚机系统设计中,除了⼀些“单机”类型的应⽤,⽐如之前讲到的LED⼩灯电路,还有很多电路系统会涉及到多机之间的通信,当然,这⾥所说的通信,可以是单⽚机与单⽚机之间的通信,也可以是单⽚机和其他类型设备之间的通信,可见,单⽚机的通信是单⽚机⼊门必须掌握的内容,那么今天,我们就来说⼀说单⽚机的UART串⾏通信。
通信按照传统的理解就是信息的传输与交换。
对于单⽚机来说,通信则与传感器、存储芯⽚、外围控制芯⽚等技术紧密结合,成为整个单⽚机系统的“神经中枢”。
没有通信,单⽚机所实现的功能仅仅局限于单⽚机本⾝,就⽆法通过其他设备获得有⽤信息,也⽆法将⾃⼰产⽣的信息告诉其它设备。
如果单⽚机通信没处理好的话,它和外围器件的合作程度就受到限制,最终整个系统也⽆法完成强⼤的功能,由此可见单⽚机通信技术的重要性。
UART(UniversalAsynchronous Receiver/Transmitter,即通⽤异步收发器)串⾏通信是单⽚机最常⽤的⼀种通信技术,通常⽤于单⽚机和电脑之间以及单⽚机和单⽚机之间的通信。
14.1串⾏通信的初步认识 通信按照基本类型可以分为并⾏通信和串⾏通信。
并⾏通信时数据的各个位同时传送,可以实现字节为单位通信,但是因为通信线多占⽤资源多,成本⾼。
⽐如我们前边⽤到的P0 =0xfe;⼀次给P0的8个IO⼝分别赋值,同时进⾏信号输出,类似于有8个车道同时可以过去8辆车⼀样,这种形式就是并⾏的,我们习惯上还称P0、P1、P2和P3为51单⽚机的4组并⾏总线。
⽽串⾏通信,就如同⼀条车道,⼀次只能⼀辆车过去,如果⼀个0xfe这样⼀个字节的数据要传输过去的话,假如低位在前⾼位在后,那发送⽅式就是0-1-1-1-1-1-1-1-1,⼀位⼀位的发送出去的,要发送8次才能发送完⼀个字节。
在我们的STC89C52上,有两个引脚,是专门⽤来做UART串⼝通信的,⼀个是P3.0⼀个是P3.1,还分别有另外的名字叫做RXD和TXD,这两个引脚是专门⽤来进⾏UART通信的,如果我们两个单⽚机进⾏UART串⼝通信的话,那基本的演⽰图如图14-1所⽰。
UART基础知识
UART基础知识发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART获得这些数据。
UART之间以全双工方式传输数据,最精确的连线方法只有3根电线:TxD用于发送数据,RxD用于接收数据,Gnd用于给双发提供参考电平,连线如下:UART使用标准的TTL/CMOS逻辑电平(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0。
为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOD逻辑电平转换为RS-232逻辑电平,3~12v表示0,-3~-12v表示1TxD、RxD数据线以位为最小单位传输数据,而帧由具有完整意义的、不可分割的若干位组成,它包含开始位、数据位、校验位(需要的话)和停止位。
发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有多少个停止位)。
数据传输流程如下:(1)平时数据线处于空闲状态(1状态)(2)当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间,这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
(3)UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将他们发送出去,首先发送最低位。
(4)如果使用校验功能,UART在发送完数据后,还要发送1位校验位。
有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数。
(5)最后,发送停止位,数据线恢复到空闲状态(1状态)。
停止位的长度有3种:1位、1.5位、2位。
下图演示了UART使用7个数据位、偶校验、2个停止位的格式传输字符‘A’(二进制值为0b1000001)时,TTL/COM逻辑电平和RS-232逻辑电平对应的波形TTL/COM逻辑电平RS-232逻辑电平2、s3c2440 UART特性(1)工作模式s3c2440中,UART有三个独立的通道,UART0、UART1、UART2,每个通道都可以工作于中断模式和DMA模式。
c8051f340双串口通信范例
/***************************************************************** 文件名:uart0.c* 描述:串口0通信实验C语言程序。
当接收到一个数据后,再将接收到* 的数据送出,该程序的UART波特率是115200字节/s* 创建人:xulaiyuan* 时间: 2013年1月16日* 版本号: V0.1.0* 验证结果:1.可以收发数据,但是数据处理失败* 调试用打印语句,产品交付时候删除,Target ->memery model 设置时要改回small****************************************************************/#include <c8051f340.h>#include <stdarg.h>#include <stdio.h>#include <intrins.h>#include "FunctionStudy.h"bit FlagUart0Tx,FlagUart0Rx; //接收标示位bit FlagUart1Tx,FlagUart1Rx ;u8 TempTxBuff0,TempRxBuff0;u8 TempTxBuff1,TempRxBuff1;u8 DataRxCount;u8 DataTxCount;u8 Uart0Save;u8 Uart1Save;u16 temp=0;unsigned char Flag0,Flag1,TempBuff0,TempBuff1;sbit D12=P2^3; //d12~D14对应方德开发板的指示灯,方便调试用//sbit D13=P0^3; //d13sbit D14=P2^2; //d14sbit nRE=P0^3; //片选信号,数据转换板D27芯片的控制信号sbit DE=P0^2; //片选信号sbit Led5Green= P2^1; //Led5灭,config正常指示灯sbit Led6Yellow= P1^7; //Led6灭,通信故障指示灯sbit Led7Green= P1^5; //Led7灭,通信正常指示/********************************************************************* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无***********************************************************************//********************************************************************* 名称 : SysclkInit()* 功能 : C8051F340的端口和交叉开关配置* 输入 : 无* 输出 : 无***********************************************************************/void Oscillator_Init(){//设置sysclk为:24MHzint i = 0;CLKMUL = 0x80; //clock mul enablefor (i = 0; i < 20; i++); // Wait 5us for initializationCLKMUL |= 0xC0; //while ((CLKMUL & 0x20) == 0); //等于0就等待,等于1则时钟乘法器已准备好(锁定)CLKSEL = 0x02; //时钟选择4倍时钟乘法器,且4倍时钟乘法器/2OSCICN = 0x83; //内部高频振荡器使能,11:SYSCLK为内部高频振荡器输出(不分频)。
万变不离其宗之UART要点总结
万变不离其宗之UART要点总结[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为具有共性以及相对比较重要的点做了些梳理。
啥是串口?首先这玩意儿分两种:•通用异步收发器(UART)是用于异步串行通信的一种物理层标准,其中数据格式和传输速度是可配置的。
•通用同步收发器(USART)是一种串行接口设备,可以对其进行编程以进行异步或同步通信。
数据格式线上空闲、无数据状态为常高电平,故逻辑低定义为起始位。
•起始位:总是1位•数据位:常见的有8位或9位。
•校验位o奇校验o偶校验o无校验•停止位:o1位o2位•波特率:bit rate 就是位/秒的概念,就是1秒传多少位的概念。
常见的波特率有哪些呢?•这里须注意的要点:•一个有效字节的传输时间怎么算?\[T=位数*\frac{1}{波特率} \]比如9600下,1位起始位,8位数据位,奇校验,1位停止位,则\[T=(1+8+1+1)*\frac{1}{9600}=0.00114583秒 \]为什么要理解清楚这个概念呢,因为在应用中需要计算数据吞吐率问题,就比如一个应用是数据采集串口传输问题,需要计算采集的位速率需要小于或等于传输波特率,否则数据就来不及传。
当然如果说你有足够大的缓冲区可以临时存储,但是如果进来太快,而传出速度跟不上,多大的缓冲都会满!•校验位有用吗?当你的传输介质处于一个有干扰的场景下,校验位就可以从物理层检测出错误。
•理解数据编码方式有啥意义呢?比如在调试中你可以利用逻辑分析直接去解析收发线上的数据报文。
•应用电路设计的时候RX-TX相连,很多初学者容易在这里踩坑!•常见的传输位序为低有效位在前。
•对于波特率而言需要注意波特率发生器有可能带来误码问题啥是UART?两边分别代表两个通信的设备,单从UART编程的角度讲收发不需要物理同步握手,想发就发。
UART学习之路(一)基本概念
UART学习之路(一)基本概念第一篇博客,首先记录一下这一个多星期来的学习内容。
UART学习之路第一篇,是UART的基本概念介绍。
后续会用STM32F103的串口与PC机通信。
最后使用Verilog HDL写出串口发送模块和接收模块,完成仿真,在ZedBoard板上完成通信。
首先明确什么是UART,COM口,TTL,RS-232。
通用异步收发传送器(Universal Asynchronous Receiver/Transmitter, UART)有4个管脚分别为VCC,GND,TX,RX,电平标准为TTL电平。
低电平为0,高电平(3.3V)为1。
左图为UART转USB接口。
VCC UART的电源口,电压为3.3VGND UART的地TX/TXD UART的数据发射口RX/RXD UART的数据接收口串行通讯端口(Cluster Communication Port, COM)为DB9或者DB25。
电平标准为RS-232,低电平为+5~+12V,高电平为-12~-5V。
电平接口的详细定义见下图。
扩展:1.RS-485是将数据用负逻辑差分信号的形式传送的。
+2V~+6V 表示低电平,- 6V~- 2V表示高电平;2.芯片上的某类引脚可以被设置为UART的RX和TX口。
使用杜邦线将RX和TX与外设连接起来就可以实现信息传递,例如控制智能液晶屏(USART HMI);3.UART转成COM口需要将TTL电平转换成RS-232电平,可以用芯片MAX232实现。
4.UART转成USB的电平需要使用PL2303芯片。
总结:UART和COM是硬件上的接口方式,而TTL和RS-232规定了电平的标准。
UART一般使用杜邦线将TX和RX与外设连接,而COM口则使用DB9与外设连接。
对比两种连接方式,杜邦线是导线直接连接,在连接端一般有卡槽用来卡紧接口,DB9自带锁紧螺钉,接口的扎实程度上DB9要好很多。
但是杜邦线比较小巧和灵活,而DB9则要大很多。
单片机UART串行接口
传送速率是指数据传送的速度。用b/s或bps(比特/秒)表示,称为比特率。在二进制的情况下,比特率与波特率数值相等,因而在单片机的串行通信中,常称为波特率。 假如数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为: 10b×120/s=1200b/s=1200波特 每一位的传送时间即为波特率的倒数:
SCON.4位 REN——允许串行接收位。
REN=1时,允许接收;REN=O时,禁止接收。由软件置位或清除。
1
2
SCON.3位 TB8——发送数据的第9位(D8)。
在方式2或方式3中,根据需要由软件置位或复位。双机通信时,它可约定作奇偶校验位;在多机通信中,可作为区别地址帧或数据帧的标识位。一般由指令设定地址帧时,设TB8为1;而设定数据帧时,设TB8为0。方式0和方式1中没用该位。
串行通信(serial communication):所传送数据的各位按顺序一位一位地发送或接收。
*
在并行通信中,一个并行数据占多少位二进制数,就要多少根传输线,这种方式的特点是通信速度快,但传输线多,价格较贵,适合近距离传输。
串行通信仅需1~2根传输线,故在长距离传输数据时比较经济,但由于它每次只能传送1位,所以传送速度较慢。
方式0中,每个机器周期发送或接收1位数据, 且不受SMOD的影响。 方式2的波特率取决于PCON中SMOD之值。 当SMOD=0时,波特率为fosc的1/64; 若SMOD=1,则波特率为fosc的1/32,即:
SCON.1位 TI——发送中断标志位。
在方式0中,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间,由硬件置位。RI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件清除RI。
uart通讯线,通过cpu顶部,距离较近,引起单片机复位
uart通讯线,通过cpu顶部,距离较近,引起单片机复位标题:UART通讯线通过CPU顶部引起单片机复位的探讨在嵌入式系统设计中,串行通信是实现数据传输的重要手段。
特别是通用异步接收发送器(UART)因其简单易用、成本低廉等优点而被广泛应用。
然而,在实际使用过程中,我们可能会遇到一些意想不到的问题,比如本文所要讨论的主题——“UART通讯线,通过CPU顶部,距离较近,引起单片机复位”。
下面,我们将从以下几个方面进行深入探讨。
一、UART通讯线的工作原理及特点首先,我们需要理解UART的基本工作原理。
它是一种异步通信方式,包括起始位、数据位、校验位和停止位,主要用于设备之间的串行通信。
其特点主要有以下几点:1. 无需时钟同步。
2. 支持全双工通信。
3. 数据传输速率可调。
4. 硬件结构简单,易于实现。
二、CPU顶部为何会引发单片机复位?在了解了UART的工作原理后,我们再来分析为什么“UART通讯线,通过CPU顶部,距离较近”会导致单片机复位。
这主要是因为以下几个原因:1. 干扰问题:当UART通讯线靠近CPU顶部时,可能会对CPU产生电磁干扰,从而导致单片机复位。
这种干扰可能来自通讯线自身的信号波动,也可能是外部环境因素的影响。
2. 布线问题:如果UART通讯线布线不合理,如线束过于密集、走线路径不合理等,都可能导致电磁耦合增强,进而影响到CPU的工作状态。
三、如何避免或解决此类问题?对于上述问题,我们可以采取以下几种方法来避免或解决:1. 合理布线:在设计电路板时,应尽量将UART 通讯线远离CPU,并确保其走线路径合理,减少与其他信号线的交叉。
2. 屏蔽处理:可以考虑为UART 通讯线添加屏蔽层,以降低对外部环境的敏感度,减少电磁干扰。
3. 使用抗干扰器件:在必要的情况下,可以考虑使用抗干扰器件,如磁珠、电容等,以降低噪声干扰。
4. 软件层面的防护:在软件设计上,可以通过增加错误检测和恢复机制,提高系统的鲁棒性。
C8051F340学习笔记—UART
C8051F340串口学习笔记UART0 是一个异步、全双工串口,它提供标准8051 串行口的方式1 和方式3。
UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。
接收数据缓冲机制允许UART0 在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。
UART0 有两个相关的特殊功能寄存器:串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)。
写SBUF0时自动访问发送寄存器;读SBUF0时自动访问接收寄存器,不可能从发送数据寄存器中读数据。
如果UART0 中断被允许,则每次发送完成TI0 位被置‘1’或接收到数据字节RI0 位被置‘1’时将产生中断。
当CPU转向中断服务程序时硬件不清除UART0 中断标志。
中断标志必须用软件清除。
UART0 波特率由定时器1 工作在8 位自动重装载方式产生,定时器1 应被配置为方式2,即8 位自动重装载方式,定时器1 的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8 和外部输入T1。
其中T1CLK是定时器1 的时钟频率,T1H是定时器1 的高字节(重载值)UART0 提供标准的异步、全双工通信,其工作方式(8 位或9 位)通过S0MODE来选择8 位UART每个数据字节共使用10 位:一个起始位、8 个数据位(LSB 在先)和一个停止位,软件向SBUF0 寄存器写入一个字节时开始数据发送。
在发送结束时中断标志TI0被置1UART1(仅C8051F340/1/4/5有)UART1的使用与UART0基本大致相同,但是。
UART1 包含一个由16 位定时器和可编程预分频器构成的专用波特率发生器,能产生很宽围的波特率,有多个时钟源可用于产生标准波特率。
UART1 有六个相关的特殊功能寄存器。
三个用于波特率发生器(SBCON1、SBRLH1 和SBRLL1),两个用于数据格式、控制和状态功能(SCON1 和SMOD1),一个用于发送和接收数据(SBUF1)。
C8051f 笔记
1. 配置端口引脚为数字输入:通过设置输出方式为“漏极开路”并向端口数据寄存器中的相应位写‘1’(禁止低端输出驱动器)将端口引脚配置为数字输入。
例如,设置P3MDOUT.7 为逻辑‘0’并设置P3.7 为逻辑‘1’即可将P3.7 配置为数字输入。
2.配置P1端口的引脚为模拟输入注意: 通过向P1MDIN寄存器中的对应位写‘0’即可将端口引脚配置为模拟输入.(端口中仅P1可以作为模拟输入,所以它有输入方式寄存器) 被配置为模拟输入的引脚的输出驱动器并没有被明确地禁止。
因此被配置为模拟输入的引脚所对应的P1MDOUT位应被明确地设置为逻辑‘0’(漏极开路方式),对应的端口数据位应被设置为逻辑‘1’(高阻态)。
还需要注意的是,将一个端口引脚用作ADC2 模拟多路开关的输入时并要求将其配置为模拟输入,但强烈建议这样做。
3. 配置端口的引脚为输出方式: 每个端口引脚的输出方式都可被配置为漏极开路或推挽方式。
在推挽方式,向端口数据寄存器中的相应位写逻辑‘0’将使端口引脚被驱动到GND,写逻辑‘1’将使端口引脚被驱动到VDD。
在漏极开路方式,向端口数据寄存器中的相应位写逻辑‘0’将使端口引脚被驱动到GND,写逻辑‘1’将使端口引脚处于高阻状态.注意:不管交叉开关是否将一个端口引脚分配给某个数字外设,端口引脚的输出方式都PnMDOUT寄存器控制。
例外情况是:连接到SDA、SCL、RX0(如果UART0 工作于方式0)、RX1(如果UART1工作于方式0)的端口引脚总是被配置为漏极开路输出,而与PnMDOUT 寄存器中的对应位的设置值无关。
4.上电和PLL 初始化为了在器件上电后设置和使用PLL 作为系统时钟,应遵循下列步骤:1.确保要使用的参考时钟(内部或外部)处于稳定运行状态。
2.设置PLLSRC 位(PLL0CN.2),为PLL 选择时钟源。
3.将FLASH 读定时控制位FLRT(FLSCL.5-4)编程为适合于新时钟频率的值(见15. FLASH 存储器)。
c8051f340简单串口收发程序
c8051f340简单串口收发程序推荐/******************************************************************本程序是通过F340的uart0与PC进行串口通讯的例程,具体实现为当F340收*从PC传来的数据后将数据原样回发给PC机 ,端口为RX=P0.5,TX=P0.4******************************************************************/#i nclude <c8051f340.h>#define uchar unsigned char#define uint unsigned int/******************************************************************端口初始化函数*****************************************************************/void PORT_Init (void){XBR0 = 0x01;//端口I/O交叉开关寄存器0,UART TX0, RX0 连到端口引脚 P0.4 和 P0.5XBR1 = 0x40;//端口I/O交叉开关寄存器1,交叉开关使能P0MDOUT = 0x10;//P0.4为推挽输出,其他的为漏极开路输出}/*****************************************************************UART0初始化函数*****************************************************************/void UART0_Init (void){SCON0 |= 0x10;CKCON = 0x01;TH1 = 0x64; //波特率为9600TL1 = TH1;TMOD = 0x20;TR1 = 1;//P235,定时器1运行控制,定时器1允许TI0 = 1;//P235,中断1类型选择,INT1为边沿触发}/******************************************************************主函数*****************************************************************/void main(){char g;PCA0MD &= ~0x40;//关闭看门狗OSCICN |= 0x03;//P126PORT_Init();//端口初始化UART0_Init();//UART0初始化 while(1){while(RI0==0); //接收g=SBUF0;RI0=0;if(g!='\0'){ SBUF0=g;while(TI0==0); //发送TI0=0;g='\0';}}}。
UART串口学习笔记
UART总线UART (Universal Asynchronous Receiver/Transmitter) 通用异步收发器。
UART是用于控制计算机与串行设备的芯片。
有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。
作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。
将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。
在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。
在输出数据流中加入启停标记,并从接收数据流中删除启停标记。
处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。
可以处理计算机与外部串行设备的同步管理问题。
有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。
现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。
UART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。
UART通信UART首先将接收到的并行数据转换成串行数据来传输。
消息帧从一个低位起始位开始,后面是7个或8个数据位,一个可用的奇偶位和一个或几个高位停止位。
接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。
如果选择了奇偶,UART就在数据位后面加上奇偶位。
奇偶位可用来帮助错误校验。
在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。
UART也产生额外的信号来指示发送和接收的状态。
例如,如果产生一个奇偶错误,UART就置位奇偶标志。
深刻理解UART
UART异步串行口UART异步串行口简介数据通信的基本方式可分为并行通信与串行通信两种:➢并行通信:是指利用多条数据传输线将一个资料的各位同时传送。
它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。
➢串行通信:是指利用一条传输线将资料一位位地顺序传送。
特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。
UART 异步串行口的传输格式异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。
通信协议(通信规程):是指通信双方约定的一些规则。
在使用异步串口传送一个字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。
通讯时序图如下:➢开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
➢每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
➢最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。
➢至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
➢每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600 等。
S3C2410的异步串行口S3C2410 的UART(通用异步串行口)单元提供三个独立的异步串行I/O 端口,每个都可以在中断和DMA 两种模式下进行。
UART支持的最高波特率达230.4kbps。
每个UART通道包含2 个16 位FIFO 分别提供给接收和发送。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C8051F340串口学习笔记UART0 是一个异步、全双工串口,它提供标准8051 串行口的方式1 和方式3。
UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。
接收数据缓冲机制允许UART0 在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。
UART0 有两个相关的特殊功能寄存器:串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)。
写SBUF0时自动访问发送寄存器;读SBUF0时自动访问接收寄存器,不可能从发送数据寄存器中读数据。
如果UART0 中断被允许,则每次发送完成TI0 位被置‘1’或接收到数据字节RI0 位被置‘1’时将产生中断。
当CPU转向中断服务程序时硬件不清除UART0 中断标志。
中断标志必须用软件清除。
UART0 波特率由定时器1 工作在8 位自动重装载方式产生,定时器1 应被配置为方式2,即8 位自动重装载方式,定时器1 的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8 和外部输入T1。
其中T1CLK是定时器1 的时钟频率,T1H是定时器1 的高字节(重载值)UART0 提供标准的异步、全双工通信,其工作方式(8 位或9 位)通过S0MODE来选择8 位UART每个数据字节共使用10 位:一个起始位、8 个数据位(LSB 在先)和一个停止位,软件向SBUF0 寄存器写入一个字节时开始数据发送。
在发送结束时中断标志TI0被置1UART1(仅C8051F340/1/4/5有)UART1的使用与UART0基本大致相同,但是。
UART1 包含一个由16 位定时器和可编程预分频器构成的专用波特率发生器,能产生很宽范围的波特率,有多个时钟源可用于产生标准波特率。
UART1 有六个相关的特殊功能寄存器。
三个用于波特率发生器(SBCON1、SBRLH1 和SBRLL1),两个用于数据格式、控制和状态功能(SCON1 和SMOD1),一个用于发送和接收数据(SBUF1)。
使用UART1 时,波特率发生器必须被使能。
寄存器SBRLH1 和SBRLL1 保持该专用定时器的16 位重载值,对于可靠的UART 操作,建议不要将UART 波特率配置为大于SYSCLK/16。
C8051F330串口UART0示例程序//使用F340,串口为P0.4(TX0),P0.5(RX0);#include<c8051f340.h>#include<stdio.h>#define SYSCLK 24500000 // 系统工作频率#define BAUDRATE 9600 // 串口工作波特率//----------------------------------------------------------------------------- // 功能函数//----------------------------------------------------------------------------- void SYSCLK_Init(void);void PORT_Init(void);void UART0_Init(void);void Uart0_Transmit(unsigned char tmp);void sendstr(unsigned char*tmp);unsigned char temp ;void delay_1ms(){unsigned int j ;for(j=3060;j>0;j--);}void delay_ms(unsigned int i){for(;i>0;i--)delay_1ms();}//----------------------------------------------------------------------------- // 主程序//-----------------------------------------------------------------------------void main(void){PCA0MD&=~0x40 ; // 禁止看门狗PORT_Init(); // 初始化端口I/OSYSCLK_Init(); // 初始化系统时钟UART0_Init(); // 串口初始化EA=1 ;ES0=1 ;while(1){delay_ms(1000);sendstr("Welcome to July's Hut!\n");Uart0_Transmit(032); //发送空格}}//----------------------------------------------------------------------------- // 端口初始化//----------------------------------------------------------------------------- void PORT_Init(void){P0MDOUT | =0x10 ; // 使能UTX 为推挽输出XBR0=0x01 ; // 使能UART0 占用P0.4(TXD) 和P0.5(RXD) XBR1=0x40 ; //使能交叉开关XBR2=0x00 ; //禁止UART1}//-----------------------------------------------------------------------------// 系统时钟初始化//-----------------------------------------------------------------------------void SYSCLK_Init(void){OSCICN|=0x03 ; // 配置内部振荡器的的最大频率RSTSRC=0x04 ; // 使能始终丢失检测寄存器}//-----------------------------------------------------------------------------// 串口UART0初始化//-----------------------------------------------------------------------------void UART0_Init(void){SCON0=0x10 ;if(SYSCLK/BAUDRATE/2/256<1){TH1=-(SYSCLK/BAUDRATE/2);CKCON&=~0x0B ;CKCON|=0x08 ;}else if(SYSCLK/BAUDRATE/2/256<4){TH1=-(SYSCLK/BAUDRATE/2/4);CKCON&=~0x0B ;CKCON|=0x09 ;}else if(SYSCLK/BAUDRATE/2/256<12){TH1=-(SYSCLK/BAUDRATE/2/12);CKCON&=~0x0B ;}else{TH1=-(SYSCLK/BAUDRATE/2/48);CKCON&=~0x0B ;CKCON|=0x02 ;}TL1 = TH1 ;TMOD &= ~0xf0 ;TMOD |= 0x20 ;TR1 =1 ;// TI0 = 1;}//----------------------------------------------------------- // 串口UART0中断//----------------------------------------------------------- //中断向量0x0023void UATR0_ISR(void)interrupt 4{//Rx、Tx共用中断//接收中断if(!TI0){RI0=0 ;temp=SBUF0 ;Uart0_Transmit(temp);}//发送中断else TI0=0 ;}//----------------------------------------------------------- // 串口UART0发送//----------------------------------------------------------- void Uart0_Transmit(unsigned char tmp){ES0 = 0 ; //关UART0中断EA = 0 ; //关全局中断SBUF0 = tmp ;while(TI0 == 0);TI0 = 0 ;ES0 = 1 ; //开UART0中断EA = 1 ; //开全局中断}//----------------------------------------------------------- // 发送字符串//----------------------------------------------------------- void sendstr(unsigned char*tmp){while(*tmp){Uart0_Transmit(*tmp++);}}本程序是通过F340的uart0与PC进行串口通讯的例程,具体实现为当F340收到从PC传来的数据后将数据原样回发给PC机,端口为RX=P0.5,TX=P0.4#include<c8051f340.h>#define uchar unsigned char#define uint unsigned int/******************************************************************端口初始化函数*****************************************************************/void PORT_Init (void){XBR0 = 0x01; // I/O交叉开关寄存器0,UART TX0, RX0 连到端口引脚P0.4 和P0.5 XBR1 = 0x40; //端口交叉开关使能P0MDOUT = 0x10; //P0.4为推挽输出,其他的为漏极开路输出}/*****************************************************************UART0初始化函数*****************************************************************/void UART0_Init (void){SCON0 |= 0x10; //方式0,8位的uart 接,收允许CKCON = 0x01; //CKCON是时钟控制寄存器TH1 = 0x64; //波特率为9600TL1 = TH1;TMOD = 0x20;TR1 = 1; //定时器1运行控制,定时器1允许TI0 = 1; //中断1类型选择,INT1为边沿触发}/******************************************************************主函数*****************************************************************/void main(){char g;PCA0MD&= ~0x40;//关闭看门狗OSCICN|= 0x03;//P126 内部高频振荡器控制寄存器停止运行PORT_Init();//端口初始化UART0_Init();//UART0初始化while(1){while(RI0==0); //接收g=SBUF0;RI0=0;//手动清零if(g!='\0'){SBUF0=g;while(TI0==0); //发送TI0=0;g='\0';}}}另外附送发送和接受子函数void Sendchar(unsigned char x ) //发送字符的子函数{ TI0=0;SBUF0=x;while(TI0==0); //发送}void Getchar(){ RI0==0;buffer=SBUF0;while(RI0==0); //接收//接收字符的子函数}void sendstr(unsigned char*tmp) //发送字符串的子函数{while(*tmp){Uart0_Transmit(*tmp++);}}注:本程序全部来自于互联网,非本人所写,严禁用于商业用途,本人不承担法律责任下面说一下本人经常使用的C8051F340端口、时钟、计数器、串口等配置的软件及方法使用Configuration W izard进行串口的配置1、选择C8051F340这个单片机,再依次选择—外设—串口进入以下界面我们配置串口0, 选择8位,Enable串口接收,再配置串口中断下面是我配置好的串口子程序时钟选用外部时钟11。