基于STCSTC15F2K60S2单片机的串口通讯.doc
湖南科技大学信息与电气工程学院《单片机课程设计报告》题 目:基于 STCSTC15F2K60S2 单片机的串口通讯专 业: 自动化 班 级: 一班 姓 名: 罗永恒 学 号: 1209010303 指导教师: 范小春 2015 年 6 月 30 日摘要单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU 随机存储器 RAM、只读存储器 ROM、多种 I/O 口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本文将具体介绍单片机与 PC 机进行串口通信的实现方法和编程方法,并且在最后给出一个实用的单片机与计算机通过串口通信的程序。关键词:单片机 串口通信目录第一章 STCSTC15F2K60S2 的简介 .11.1 STCSTC15F2K60S2 的内部结构框图 11.2 STC15F2K60S 的 DIP 封装图 11.3 STC15F2K60S 的各引脚简介 2第二章 单片机通过 USB 与 PC 机的通信设计 42.1 设计方案选择 .42.1.1 PC 机同单片机通信存在的问题 .42.1.2 USB 接口同 RS-232(DB-9)串口的比较 .42.1.3 USB 转接芯片的选择 .42.2 通信功能要求 5第三章 硬件电路图的设计 .53.1 单片机最小系统 53.2 USB 与单片机连接主电路 63.3 总电路图 63.4 PCB 图 6第四章 程序设计 .74.1 串口初始化 74.2 主程序 74.3 中断服务程序 84.4 总程序 8第五章 总结与体会 10第六章 参考文献 110第一章 STCSTC15F2K60S2 的简介1.1 STCSTC15F2K60S2 的内部结构框图1.2 STC15F2K60S 的 DIP 封装图11.3 STC15F2K60S 的各引脚简介(1)电源引脚Vcc:一般接电源的+5V。具体的电压幅度应参考单片机的手册。GND:接电源地。(2)外接晶体引脚XTAL2XTAL1C2C1 GNDM单 片 机芯片内部一个反相放大器的输入端和输出端。通常用于连接晶体振荡器。(3)控制和复位引脚µ¥Æ¬»úRST/VPDGNDCr10uFRr10K¦¸Vc功能:当访问外部存储器或者外部扩展的并行 I/O 口时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。RST(与 P5.4 复用):当振荡器运行时,在此引脚上出现两个机器周期的高电平将使单片机复位。如果需要单片机接上电源就可以复位,则需要使用上电复位电路。(4)I/O 口的复用功能 P0 口:a.用作数据总线(D7~D0)或者地址总线低 8 位(A7~A0)。b.用作普通 I/O。 P1 口:a.用作普通 I/O。b.复用为 ADC 转换输入、捕获/比较/脉宽调制、SPI 通信线、第二串口或者第二时钟输出,如表所示。2P2 口:a:用作通用 I/O。b:用作地址总线的高 8 位输出。c:用于 SPI 和捕获/比较/脉宽调制的备用切换端口。P3 口:a:用作通用 I/O。b:可复用为外部中断输入、计数器输入、时钟输出、第一串口和外部总线的读/写控制,如表所示。P4 口:a:用作通用 I/O。b:某些口线具有复用功能,可配置为 SPI 通信线、捕捉/比较/脉宽调制、第二串口线等。P5 口:a:P5.4/RST(复位脚)/MCLKO(内部 R/C 振荡时钟输出;b:输出的频率可为 MCLK/1 或 MCLK/2)/SS_3(SPI 接口的从机选择信3号备用切换引脚)。c:该引脚默认为 I/O 口,可以通过 ISP 编程将其设置为 RST(复位)引脚。第二章 单片机通过 USB 与 PC 机的通信设计2.1 设计方案选择 由于实际应用中单片机在数据处理能力、人机交互等方面往往不能满足要求, 因而通常用 PC 来弥补单片机的这些不足。例如,在工程应用中,常常由一台PC 机和一台单片机构成主从式计算机测控系统。在这样的系统中,以单片机为核心的智能测控仪表(从机)作为现场测控设备,完成数据的采集、处理和控制各种任务,同时将数据传给 PC 机(主机),PC 机将这些数据加工处理后,进行显示、打印报表等。PC 机也可以将各种控制命令传送给单片机,干预单片机系统的运行,从而发挥 PC 机的优势。要实现这样的功能,就涉及到 PC 机与单片机之间的通信问题。现在的计算机提供了各种各样的串口,他们支持不同的通信协议,有着不同的功能。目前计算机提供的串口有 RS-232,RJ45,USB2.0 等。 2.1.1 PC 机同单片机通信存在的问题目前,15 系列单片机同 PC 机的通信在大多数情况下仍然是使用 RS-232(DB-9)串口作为通信接口实现的。而随着 USB 接口技术的成熟和使用的普及,由于 USB 接口有着一系列 RS-232(DB-9)串口无法比拟的优点,RS-232(DB-9)串口正在逐步的为 USB 接口所替代。而在现在的大多数笔记本电脑中,出于节省物理空间和用处不大等原因,RS-232(DB-9)串口已不再设置,这就约束了基于RS-232(DB-9)串口与 PC 机联络的单片机设备的使用范围。2.1.2 USB 接口同 RS-232(DB-9)串口的比较 通过 USB 接口和 RS-232(DB-9)的比较,不难发现: (1)USB 接口支持即插即用和热插拔,而 RS-232(DB-9)串口不支持即插即 用和热插拔,设备安装后需重启计算机方可使用。 (2)USB 接口的传输速率较快,可达 480Mbps(V2.0),而 RS-232(DB-9)串口的最高速率仅为 19200 波特。 (3)USB 接口占用体积较小,插拔方便;而 RS-232(DB-9)串口的的插拔需要使用改锥,且在机箱后操作,比较麻烦。 综上可知,USB 接口取代 RS-232(DB-9)串口的趋势不可逆转。42.1.3 USB 转接芯片的选择 目前常用的 USB 转接芯片包括 PL2303,CH341,CP2101,FT232 等。在综合考虑了各方面因素后,CH341 成为了本次电路设计的首选芯片。CH341 是南京沁恒电子公司生产的 USB 总线的转接芯片,通过 USB 总线提供异步串口,打印口,并口及常用的 2 线和 4 线等同步串行端口。其特点有: (1)提供全速 USB 设备借口,兼容 USB2.0,外围设备只需要晶体和电容; (2)可通过外部的低成本串行 EPROM 定义厂商 ID,产品 ID,序列号等;(3)成本低廉,可直接转换原串口外围设备; (4)采用 SOP-28 封装,串口应用还提供小型的 SSOP-20 封装。正是由于在PC 机同单片机通信电路中,USB 转接芯片 CH341 具有以上其他芯片无法比拟的优点,同时价格低廉并且提供中文技术支持,因此它成为了本电路 USB 转接芯片的最优选择。本电路采用的是 SSOP-20 封装的 CH341T,其引脚图如图所示。2.2 通信功能要求(1)PC 控制单片机 IO 口输出,并且通过两个 LED 灯显示数据发收状态,如果数据处于发送或者接收状态,则相应的 LED 灯闪亮。(2)PC 控制单片机 IO 口输出,并且通过两个按键控制 PC 机是否接收数据。(3)PC 机与单片机之间的通信结果通过串口助手进行调试和显示。第三章 硬件电路图的设计3.1 单片机最小系统5由起振电路,复位电路组成3.2 USB 与单片机连接主电路其中,两个按键分别控制是否接收数据,两个 LED 灯显示接收数据状态,CH341 芯片提供串口。63.3 总电路图1 2 3 4 5 6ABCD654321DCBA TitleNumber RevisionSizeBDate: 3-Jul-2015 Shet of File: H:\BAYANWEI\原原.Ddb Drawn By:AD0/P0.01 AD1/P0.12 AD2/P0.23 AD3/P0.34AD4/P0.45 AD5/P0.56 AD6/P0.67 AD7/P0.78RxD2/CP1/ADC0/P1.09 TxD2/CP0/ADC1/P1.110 ECI/S/ADC2/P1.21 MOSI/ADC3/P1.312MISO/ADC4/P1.413 SLCK/ADC5/P1.514 XTAL2/RxD_3/ADC6/P1.615 XTAL1/TxD_3/ADC7/P1.716S_3/MCLKO/RST/P5.417 VC18 P5.519 Gnd20 P3.0/RxD/INT4/T2CLKO 21P3.1/TxD/T2 2P3.2/INT0 23P3.3/INT1 2434/T0/T1CLKO/ECI_2 25P3.5/T1/T0CLKO/CP0_2 26P3.6/INT2/RxD_2/CP1_22737/INT3/TxD_2/CP2/CP2_2 28P4.1/MISO_3 29P4.2/WR 30P4.4/RD 31P2.0/A8/RSTOUT_LOW32P2.1/A9/SCLK_2 3P2.2/A10/MISO_234P2.3/A1/MOSI_2 35P2.4/A12/ECI_3/S_2 36P2.5/A13/CP0_3 37P2.6/A14/CP1_3 38P2.7/A15/CP2_3 39P4.5/ALE 40PDIP-40J1STC15F2K60S2Y112MHzC230pF +C647uFS2SW-PBVCVC 19V3 5GND 8VD- 7VD+ 6X1 9X0 10NOS#20TxD4 RxD3U1CH3411234 U2USBVCC3CAP C4CAPY2CRYSTALC5CAP C7CAPVCD31N5817R3301RR13.3k R23.3kD1LED D2LEDS1SW17S3SW18C1CAP3.4 PCB 图第四章 程序设计4.1 串口初始化void UartInit(void) //115200bps@22.1184MHz{SCON = 0x50; //8 位数据可变波特率AUXR |= 0x40; //定时器 1 时钟为 Fosc,即 1TAUXR //串口 1 选择定时器 1 为波特率发射生器7TMOD //设置定时器 1 为 16 位自动重装方式TL1 = 0xD0; //设定定时初值TH1 = 0xFF; //设定定时初值ET1 = 0; //禁止定时器 1 中断TR1 = 1; //启动定时器 1}4.2 主程序void main(void){P0M1 = 0; P0M0 = 0; //设置为准双向口P1M1 = 0; P1M0 = 0; //设置为准双向口P2M1 = 0; P2M0 = 0; //设置为准双向口P3M1 = 0; P3M0 = 0; //设置为准双向口P4M1 = 0; P4M0 = 0; //设置为准双向口P5M1 = 0; P5M0 = 0; //设置为准双向口P6M1 = 0; P6M0 = 0; //设置为准双向口P7M1 = 0; P7M0 = 0; //设置为准双向口UartInit() ;//UART1_config(1); // 选择波特率, 2: 使用 Timer2 做波特率, 其它值: 使用 Timer1 做波特率.EA = 1; //允许总中断ES=1; //开串口中断PrintString1(“STC15F2K60S2 UART1 Test Prgramme!\r\n“); //SUART1发送一个字符串while (1){ if(INT0==0) //如果相应按键(默认为 sw18)按下,则允许接收{REN=0;}if((TX1_Cnt != RX1_Cnt) //把收到的数据远样返回B_TX1_Busy = 1;if(++TX1_Cnt = UART1_BUF_LENGTH) TX1_Cnt = 0;}else{if(INT1==0) //如果相应按键(默认为 sw17)按下,则禁止接收{REN=1;}}}}4.3 中断服务程序void UART1_int (void) interrupt 4//中断服务子程序8{ if(RI) //如果产生中断,则把 SBUF 内容赋值给单片机的数组{RI = 0;RX1_Buffer[RX1_Cnt] = SBUF;if(++RX1_Cnt = UART1_BUF_LENGTH)RX1_Cnt = 0; //防溢出}if(TI){TI = 0;B_TX1_Busy = 0;}}4.4 总程序/************* 功能说明 **************双串口全双工中断方式收发通讯程序。通过 PC 向 MCU 发送数据, MCU 收到后通过串口把收到的数据原样返回.******************************************/#define MAIN_Fosc 22118400L //定义主时钟#include “STC15Fxxxx.H“#define Baudrate1 115200L#define UART1_BUF_LENGTH 200u8 TX1_Cnt; //发送计数u8 RX1_Cnt; //接收计数bitB_TX1_Busy; //发送忙标志u8 idata RX1_Buffer[UART1_BUF_LENGTH]; //接收缓冲void UartInit(void) //115200bps@22.1184MHz{SCON = 0x50; //8 位数据可变波特率AUXR |= 0x40; //定时器 1 时钟为 Fosc,即 1TAUXR //串口 1 选择定时器 1 为波特率发射生器TMOD //设置定时器 1 为 16 位自动重装方式TL1 = 0xD0; //设定定时初值TH1 = 0xFF; //设定定时初值ET1 = 0; //禁止定时器 1 中断TR1 = 1; //启动定时器 1}void main(void)9{P0M1 = 0; P0M0 = 0; //设置为准双向口P1M1 = 0; P1M0 = 0; //设置为准双向口P2M1 = 0; P2M0 = 0; //设置为准双向口P3M1 = 0; P3M0 = 0; //设置为准双向口P4M1 = 0; P4M0 = 0; //设置为准双向口P5M1 = 0; P5M0 = 0; //设置为准双向口P6M1 = 0; P6M0 = 0; //设置为准双向口P7M1 = 0; P7M0 = 0; //设置为准双向口UartInit() ;//UART1_config(1); // 选择波特率, 2: 使用 Timer2 做波特率, 其它值: 使用 Timer1 做波特率.EA = 1; //允许总中断ES=1; //开串口中断PrintString1(“STC15F2K60S2 UART1 Test Prgramme!\r\n“); //SUART1发送一个字符串while (1){ if(INT0==0){REN=0;}if((TX1_Cnt != RX1_Cnt) //把收到的数据远样返回B_TX1_Busy = 1;if(++TX1_Cnt = UART1_BUF_LENGTH) TX1_Cnt = 0;}else{if(INT1==0){REN=1;}}}}void UART1_int (void) interrupt 4//中断服务子程序{ if(RI){RI = 0;RX1_Buffer[RX1_Cnt] = SBUF;if(++RX1_Cnt = UART1_BUF_LENGTH)RX1_Cnt = 0; //防溢出}if(TI){TI = 0;B_TX1_Busy = 0;}}10第五章 总结与体会串行通信端口在系统控制的范畴中一直占据着及其重要的地位,它不仅没有因为时代的进步而遭淘汰,反而在规格上越来越完善,应用也越来越广泛。作为一种基本而又灵活方便的通信方式,串口通信被广泛应用于 PC 与 PC 或者PC 与单片机之间的数据交换以及其他工业控制与自动控制中。 随着单片机和微机技术的不断发展,由 PC 机和多台单片机构成的多机网络监控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,Windows 环境下后台微机在数据库管理上具有明显的优势,二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。 随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC 机的 RS-232 串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。但是 USB 接口逐步取代 RS-232(DB-9)串口已是大势所趋,单片机同计算机的 USB 通信在实际工作中的应用范围也将越来越广。本文所介绍的单片机和 PC 机的 USB 通信方法,具有电路简单,兼容性好,可移植性强等特点,故可作为单片机同计算机的 USB 通信模块广泛应用于工业和电子产品的开发中。第六章 参考文献[1]于永.15 系列单片机 C 语言常用模块与综合系统设计.电子工业出版社,2007[2]丁向荣.单片微机原理与接口技术.电子工业出版社,2010[3]郭天祥.《新概念 51 单片机 C 语言教程》.北京:电子工业出版社 [4]袁新艳.计算机外设与接口技术[M].高等教育出版社,2009. 11