《实验六 串口通信+实验报告.docx》由会员分享,可在线阅读,更多相关《实验六 串口通信+实验报告.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验六串口通信实验实验报告姓名: 学号:一、实验内容USB供电及自动下载原理图如图7-1所示,CH340G实现串口转USB原理图如图7-2 所示。自行编制程:实现以下功能:串口调试助手向单片机发送控制码,单片机向PC回送 控制码,并按表7-1实现控制功能。要求串口配置用ConfigUART()函数实现,注意从串口接收到的数据是ASCII码还是 16进制数。蜂鸣器连接原理图如图7-3所示。表7-1控制功能表控制码控制功能0熄灭1LED从上往-卜循环2LED从下往上循环3LED闪烁4蜂鸣器响图7-1 USB供电及自动下载原理图图7-2串口转USB原理图图7-3蜂鸣器连接原理图二、相关知识1、请说明
2、矗中所用的串口通信协议。UART通信协议。是异步串口通信协议的一种,工作原理是将传输数据的每个字符一位 接位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与 外部设备进行全双工数据交换。1)起始位当未有数据发送时,数据线处于逻辑“1”状态;先发出一个逻辑“0”信号,表示开 始传输字符。2)数据位紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采 用ASCII码。从最低位开始传送,靠时钟定位。3)奇偶校验位资料为加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此 来校验资料传送的正确性。4)停止位它是一个字符数据的结束标志。
3、可以是1位、1.5位、2位的高电平。由于数据是在 传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小 小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机 会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越 慢。5)空闲位或起始位处于逻辑“1”状态,表示当前线路上没有资料传送,进入空闲状态。处于逻辑“0”状态,表示开始传送下一数据段。6)波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载 波调制状态改变的次数来表示。常用的波特率有:9600、115200等时间间隔计算:1秒除以波特率得
4、出的时间,例如,波特率为9600的时间间隔为1s / 9600 (波特率)=104uso7)接口接口通过两个引脚从外部连接到其它设备。任何USART双向通信均需要至少两个引 脚:接收数据输入引脚(RX)和发送数据引脚输出(TX):RX:接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪 声,从而用于恢复数据。TX:发送数据输出引脚。如果关闭发送器,该输出引脚模式由其I/O端II配置决定。 如果使能了发送器但没有待发送的数据,则TX引脚处于高电平。在单线和智能卡模式 下,该0用于发送和接收数据。2、串口初始化包含哪些?串行初始化,主要是设置产生波特率的定时器口、串行口控制和中
5、断控制。具体步 骤如下:(1)配置串行口为方式1 (编程SCON寄存器)。(2)配置T1为方式2,即自动重装模式(编程TMOD寄存器)。(3)根据波特率计算或查表T1的初值,装载TH1、TL1,如果有需要可以使用PCON进 行波特率加倍。(4)启动T1 (编程TCON中的TR1位)。另外,串行门在中断方式工作时,还要进行中断设置(编程IE、IP寄存器)。3、串口通信中波特率如何进行设置?通过软件可设置单片机传行口的工作方式,其中方式0和方式2的波特率是固定的, 方式1和方式3的波特率是可变的。串口可变的波特率需要由定时器产生,对于STC89C52 单片机来讲,这个波特率发生器只能由定时器T1或
6、定时器T2实现,而不能由定时器TO实 现。如果用定时器T2,需要配置额外的寄存器,默认是使用定时器T1的。使用定时器门作为波特率发生器,方式1下的波特率发生器必须使用定时器口的方 式2,也就是自动重装载模式当T1作为波特率发生器时,方式1和方式3的波特率为TI溢出率=晶振值12x(256-THD可推导出当SMOD = 0时,定时器重载值的计算公式为TH1 = TL1 = 256-晶振值12x2xl6x波特率和波特率有关的还有一个寄存器,是电源管理寄存器PCON,它的最高位SMOD可以把 波特率提高一倍,也就是说PCON 1=0x80,计算公式可写TH1 = TL1=256-晶振值12xl6x波
7、特率4、串口通信四种工作方式有何区别?方式0是同步移位寄存器方式(通常用于扩展10 口),波特率固定;方式I是10位 异步收发器(8位数据),波特率可变;方式2是11位异步收发器(9位数据),波特率 固定;方式3是11位异步收发器(9位数据),波特率可变。三二硬件电路此实验中除了 USB转串口电路、发光二极管电路还有蜂鸣器电路,请蜂鸣器电 路有哪两种?图7-3属于哪种,并简单分析此电路如何工作?请画出另一种控 制蜂鸣器的电路。蜂鸣器分为两类。1、有源蜂鸣器;2、无源蜂鸣器有源蜂鸣器比较简单,只要有电流通过,蜂鸣器就会发声。一般改变不了音调和音 量。无源蜂鸣器要给定频率的脉冲信号,蜂鸣器才会发出
8、声音。对于无源蜂鸣器只要改 变频率就可以改变蜂鸣器的音调、改变占空比就可以改变声音的大小。此电路中P44 口置低电平,三极管导通,5V电压加到蜂鸣器上,蜂鸣器响。四、程序设计蜂鸣器控制程序及注释:if(RI) (RI=O;SendByte(4);whilc(SBUF = 4) (BEEP = 0; /P4A4 口 接低电平)P()=()Xff;主程序及注释:#include #include delay.h#include intrins.h#include datatype.hvoid ConfigUART(uintl6baud); 串口初始化 void SelectHC138(uint8
9、channel);void SendByte(uint8 dal);发送一个字节void main() (SelectHCI38(0);ConfigUART(9600);while(l);void SelectHC138(uint8 channel)(switch(channel)(case 0:PI =(PI & 0xlf)|0x00;break; /发光二极管(LEDSO) )void SendByte(uint8 dal) (SBUF = dat;while(!TI);TI = 0;void ConfigUART(uint 16 baud) (SCON=OX5(); 8位数据,可变波特率
10、TMOD&=OXOF; 设定定时器1为16位自动重装方式TMOD|=0X20;TH1=256-(11059200/12/32)/baud;TL1=TH1; 设定定时器初值ETI=0;静止定时器I中断TR1 = 1;ES=1; 打开串口中断EA=1;void IntcrruptLJART(void) interrupt 4(switch(SBUF)case O:if(RI)BEEP= 1;RI=0;SendByte(O);PO 二 OXFF;)break;case I:if(RI)RI=0;PO=OX7f;BEEP= 1;SendByte(r);while(SBUF =T)(delay_ms(1
11、00);PO=_cror_(PO,I);break;if(RI)(RI=0;P0=0XFE;BEEP= 1;SendByte(2);while(SBUF = 2)(delay_ms( 100);PO=_crol_(PO,l);break;case 2: if(RI) (RI=O;BEEP= 1;SendByte(3);while(SBUF = 3) (PO=OXFF;delay_ms( 100);P0=0X00;delay_ms(100);break;case 4:if(RD(RI=0;SendByte(4);while(SBUF = 4) (BEEP = 0;)P0=0Xff;break;)
12、 其它自定义头文件程序及注释: datatype.h 文件#ifndef DATA_TYPE_H#define DATA_TYPE_Htypedef bit _bool; / 布尔型变量typcdcf unsigned char uint8; / 无符号 8 位整型变量 typedef signed char int8; / 有符号 8 位整型变量 typedef unsigned short uintl 6; / 无符号 16 位整型变量 typedef signed short inti6; / 有符号 16 位整型变量 typedef unsigned int uint32; / 无符号
13、 32 位整型变量 typedef unsigned long int uinl64; / 无符号 64 位整型变量 typedef signed int int32; / 有符号 32 位整型变量 typedef float fp32; /单精度浮点数(32位长度)typedef double fp64; 双精度浮点数(64位长度)#endifdelay.c 文件#include delay.h延时t us函数void Delay_us(uint8 t)(while(t-);I/延时I ms函数void Delay_ms(uint8 t)unsigned int i,j;for(i=0;it
14、;i+)for(j=0;j113;j+);delay.h 文件#ifndefDELAY_H#define DELAY.H#include datatype.hvoid Delay_us(uint8 t); void Delay_ms(uint8 t);#endif四、思考题修改程序,能把串口接收到控制码显示到数码管上。(选做)(说明只需展示修改部分的 程序)void IntcrruptUART(void) interrupt 4(switch(SBUF)|case O:if(RI)|RI=0;SendByte(O);LedScan(O,SMG_duanmaO);)break;case T: i
15、f(RI) (RI=0;ScndByteCl);LedScan(O,SMG_duanma 1 );break;if(RI)(RI=0;SendByte(2);LedScan(O,SMG duanma );break;case 2: if(RI) (RI=O;SendByte(3);LcdScan(0,SMG_duanma3);) break; case 4: if(RI) ( RI=O; SendByte(4);LedScan(0,SMG_duanma4); break;I五、心得体会通过本次串口实验,我对串口通信的知识了解的更透彻,这是在刚开始对 串口通信知识不了解的情况下就编程而造成许多错误之后才得到的结果。当采 用PC机与51单片机进行串口通信时,必须正确配置串口通信的属性值,才能 保证数据传输的准确无误。比如PC端与51单片机的波特率配置要一样,否则 通信始终不能成功。此外,如果要实现两块51单片机之间进行串口通信时, 定要将两块51单片机供地,否则无法通信。