版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 七 串口通信实验【实验目的】1、理解单片机串行口的工作原理;2、学习使用单片机的TXD、RXD口;3、学习PC机的串口通讯原理。【实验内容】 任务:1.单片机与电脑串口通讯,将单片机与电脑相连,借助串口调试助手,单片机发送“Everything is possible _”。2.串口调试助手中输入“turnonled1 ”、 “turnonled2 ”、 “turnonled3 ”中一个,相应的led点亮,单片机再发送“Turn on LED1 has been executed!”消息提示输入下一个需要点亮的灯。通讯波特率:9600bps,信息格式:无校验位8个数据位1个停止位,传送
2、方式,单片机采用中断方式接收信息。原理:串行口控制寄存器SCON的格式如下: SM0 SM1 SM2 REN TB8 RB8 T1 RISM0、SM1:由软件置位或清零,用于选择串行口四种工作方式。SM2:多机通信控制位。在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。REN:允许串行接收控制位。若REN=0,则禁止
3、接收;REN=1,则允许接收,该位由软件置位或复位。TB8:发送数据D8位。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。RB8:接收数据D8位。在方式2和方式3时,接收到的第9位数据,可作为奇偶校验位或地址帧或数据帧的标志。方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8位。TI:发送中断标志位。在方式0时,当发送数据第8位结束后,或在其它方式发送停止位后,由内部硬件使TI置位,向CPU请求中断。CPU在响应中断后,必须
4、用软件清零。此外,TI也可供查询使用。RI:接收中断标志位。在方式0时,当接收数据的第8位结束后,或在其它方式接收到停止位的中间由内部硬件使RI置位,向CPU请求中断。同样,在CPU响应中断后,也必须用软件清零。RI也可供查询使用。电源控制寄存器PCON的格式如下:SMOD-CF1CF0PDIDLPCON的最高位SMOD是串行口波特率系数控制位。SMOD=1时,波特率增大一倍。其余各位与串行口无关。波特率设置:串行口的4种工作方式对应着三种波特率模式。对于方式0,波特率是固定的,为fosc/12。对于方式2,波特率由振荡频率fosc和SMOD(PCON.7)所决定。其对应公式为波特率=2SMO
5、D×fosc/64。当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32。对于方式1和方式3,波特率由定时器/计数器T1的溢出率和SMOD决定,即由下式确定:波特率=2SMOD×定时器/计数器T1溢出率/32鉴于8051单片机输入、输出电平均为TTL/CMOS电平,而计算机配置的是RS232标准串行接口,使用的是RS232标准电平(逻辑0:+3V+15V,逻辑1:约-3V-15V),二者的电气规范不一致,因此要完成PC机与单片机的数据通讯,必须进行电平转换。实验参考程序:一、任务11.main.c程序/*程序名称:串口发送数据(晶振频率18.4
6、32MHz) 功能说明: 通过串口1发送“Everything is possible!” 波特率9600,数据位8,奇偶效验无,停止位1,数据流控制无 */#include "iap15w4k58s4.h" #include <intrins.h> / 加入此头文件后,可使用_nop_库函数#include "delay.h" / 延时函数头文件#include "uart.h" / 串行通信函数头文件/=/ 函数: void SYS_Init(void)/ 描述: 单片机端口初始化/=void SYS_Init()P0
7、M0=0x20;P0M1=0x20;P1M0=0x3C;P1M1=0x3C;P2M0=0x00;P2M1=0x00;P3M0=0x00;P3M1=0x00;P4M0=0x00;P4M1=0x00;P5M0=0x00;P5M1=0x00;/=/ 函数: void main(void)/ 描述: 主函数/=void main() / 主函数 SYS_Init(); DelayMS(100); UartInit(); / 初始化串口DelayUS(100); while (1) / 主循环 DelayMS(2000);/ 延时2秒 SendString("Everything is pos
8、sible _rn");/ 发送字符串 2. uart.c程序/*程序名称:串口1通讯函数(晶振频率18.432MHz) 功能说明: 串口1初始化,字符发送与字符串发送函数,波特率9600bps*/ #include "iap15w4k58s4.h"#include "intrins.h"void SendData(unsigned char ch);void SendString(char *s);void UartInit(void);/*-串口初始化-*/void UartInit(void)/9600bps18.432MHzPCON &
9、amp;= 0x7F;/波特率不倍速SCON = 0x50;/8位数据,可变波特率AUXR |= 0x40;/定时器1时钟为Fosc,即1TAUXR &= 0xFE;/串口1选择定时器1为波特率发生器TMOD &= 0x0F;/清除定时器1模式位TMOD |= 0x20;/设定定时器1为8位自动重装方式TL1 = 0xC4; /设定定时初值TH1 = 0xC4;/设定定时器重装值ET1 = 0;/禁止定时器1中断TR1 = 1;/启动定时器1/*-发送串口数据-*/void SendData(unsigned char ch) SBUF = ch; /写数据到UART数据寄存器
10、while(TI = 0);TI = 0;/*-发送字符串-*/void SendString(char *s) while (*s) /检测字符串结束标志 SendData(*s+); /发送当前字符 3.uart.h程序 #ifndef _UART_H_#define _UART_H_void SendData(unsigned char ch);void SendString(char *s);void UartInit(void);#endif4.delay.c程序/*程序名称:延时函数(晶振频率18.432MHz)功能说明: 延时毫秒与微秒*/#include "iap15
11、w4k58s4.h" / 单片机STC15F2K60S2头文件,可以不再加入reg51.h#include <intrins.h> / 加入此头文件后,可使用_nop_库函数#include <stdio.h>void Delay1us()/18.432MHzunsigned char i;i = 2;while (-i);void Delay1ms()/18.432MHzunsigned char i, j;i = 18;j = 235;dowhile (-j); while (-i);void DelayMS(int t)while(t-)Delay1ms
12、();void DelayUS(int t)while(t-)Delay1us();5.delay.c 程序#ifndef _DELAY_H_#define _DELAY_H_void DelayUS(int t);void DelayMS(int t);#endif 二、任务2 扩展部分程序串口1中断控制,串口控制单片机上的三只LED灯的开启和关闭,串口1收到数据,如果数据为“turnonled1"、"turnonled2"、"turnonled3"对应LED点亮2秒后,再熄灭。(上一工程的主程序换成如下程序)Main.c/* 程序名称:串口
13、1中断控制测试(晶振频率18.432MHz) 功能说明: 串口1收到数据,如果数据为“turnonled1"、"turnonled2"、"turnonled3"对应LED点亮2秒后,再熄灭。 波特率9600,数据位8,奇偶效验无,停止位1,数据流控制无*/#include "iap15w4k58s4.h"#include <intrins.h> / 加入此头文件后,可使用_nop_库函数#include "delay.h" / 延时函数头文件#include "uart.h"
14、; / 串行通信函数头文件#include<string.h> #define Buf_Max 20 /串口数据缓存长度unsigned char Rec_BufBuf_Max; /串口数据缓存unsigned char i = 0; /绶存指针void CLR_Buf(void); /数据清零bit Hand(unsigned char *a); /对串口缓存数据进行识别,是否包含已知的命令sbit LED1 = P50; / 定义LED1为P5.0 sbit LED2 = P51;/ 定义LED2为P5.1sbit LED3 = P52;/ 定义LED3为P5.2/=/ 函数:
15、 void SYS_Init(void)/ 描述: 单片机端口初始化/=void SYS_Init()P0M0=0x20;P0M1=0x20;P1M0=0x3C;P1M1=0x3C;P2M0=0x00;P2M1=0x00;P3M0=0x00;P3M1=0x00;P4M0=0x00;P4M1=0x00;P5M0=0x00;P5M1=0x00;/=/ 函数: void main(void)/ 描述: 主函数/= void main() / 主函数 SYS_Init(); DelayMS(100); UartInit(); / 初始化串口DelayUS(100); ES=1; / 开串口1中断 EA
16、=1; / 开总中断LED1 = 1;SendString("Please enter your command:rn"); while (1) / 主循环 if(Hand("turnonled1")ES = 0; LED1 = 0;DelayMS(1000);DelayMS(1000);LED1 = 1;CLR_Buf();SendString("Command: Turn on LED1 has been executed!rn");ES = 1;else if(Hand("turnonled2")ES = 0
17、; LED2 = 0;DelayMS(1000);DelayMS(1000);LED2 = 1;CLR_Buf();SendString("Command: Turn on LED2 has been executed!rn");ES = 1;else if(Hand("turnonled3")ES = 0; LED3 = 0;DelayMS(1000);DelayMS(1000);LED3 = 1;CLR_Buf();SendString("Command: Turn on LED3 has been executed!rn");ES = 1; bit Hand(unsigned char *a) / 串口命令识别函数 if(strstr(Rec_Buf,a)!=NULL) return 1;elsereturn 0;void CLR_Buf(void) / 串口缓存清理unsigned char k; for(k=0;k<B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年沪教牛津版小学六年级英语上册第5单元《Action》标准教案
- 人教版(新课标)七年级下册第三课中华文明探源第1课时教案设计
- 山东省郯城县红花镇九年级历史下册 第七单元 战后世界格局的演变 15《世界政治格局的多极化趋势》教案2 新人教版
- 稻虾专项试题及答案分享
- 新教材高中历史 第2单元 三国两晋南北朝的民族交融与隋唐统一多民族封建国家的发展 第6课 从隋唐盛世到五代十国同步教学设计 新人教版必修《中外历史纲要(上)》
- 全国人教版高中信息技术必修一第1章1.2数字化与编码1.2.1《数字化及其作用》教学设计
- 教科版(2019)必修一 教学设计 1.2 数据的计算
- 牛津上海版中学英语七年级上Module2Nowlisten教学教案
- CN119402648A 使用三角形预测模式的图像编码装置和图像解码装置及其执行的图像编码方法和图像解码方法 (三星电子株式会社)
- 艺考初试题目全解及答案
- 慢病患者居家康复护理指导手册
- 2026年注册营养师道真题(名校卷)附答案详解
- 食堂食材供货、配送服务保障方案
- 护患沟通人文关怀课件
- 高磷血症科普
- 设备管理技术培训课件
- 集装箱活动板房施工方案
- 一体化消防泵房水池施工方案
- 脊柱骨折的急救处理措施
- 中国2型糖尿病运动治疗指南(2024版)
- CJ/T 283-2017偏心半球阀
评论
0/150
提交评论