首页 例说51单片机11-串口应用

例说51单片机11-串口应用

举报
开通vip

例说51单片机11-串口应用 Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 1 / 5 11 串口应用 简介 第九章我们学习了单片机串口的基本使用方法,并且用查询方式实现了和PC 机通信。这一章,我们讲解如何使用串口中断,并写一个稳定的收发程序。 11.1 串口中断 在实际的通信设计中,中断的使用频率非常高,可以提高程序的运行效率。 串口收、发完成都能触发中断,收到一个完整字节,RI 标志位置位,触发接 收中断,...

例说51单片机11-串口应用
Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 1 / 5 11 串口应用 简介 第九章我们学习了单片机串口的基本 使用方法 消防栓的使用方法指针万用表的使用方法84消毒液使用方法消防灭火器使用方法铁材计算器使用方法 ,并且用查询方式实现了和PC 机通信。这一章,我们讲解如何使用串口中断,并写一个稳定的收发程序。 11.1 串口中断 在实际的通信设计中,中断的使用频率非常高,可以提高程序的运行效率。 串口收、发完成都能触发中断,收到一个完整字节,RI 标志位置位,触发接 收中断,发送完一个字节,TI 标志位置位,触发接收中断,但这两个中断地址 是一个(0023H),所以必须软件再判断中断类型。 11.2 软件设计 基于中断写一个串口收发程序,把从串口收到的数据再输出。代码如下: 程序 清单 安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载 L11.1 基于中断的串口程序 1 #include 2 #include "hw_config.h" 3 #include "my_type.h" 4 5 u8 RxBuf[32]; //串口接收缓冲区 6 volatile u8 RxBufWrite; //接收缓冲区写指针 7 volatile u8 RxBufRead; //接收缓冲区读指针 8 9 u8 TxBuf[32]; //串口发送缓冲区 10 volatile u8 TxBufWrite; //发送缓冲区写指针 11 volatile u8 TxBufRead; //发送缓冲区读指针 12 volatile u8 TxLen; //发送缓冲区数据长度 13 14 //串口初始化 15 void uart_init(void); 16 void uart_start_send(void); 17 void delay(u8 count); 18 19 void main(void) 20 { Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 2 / 5 21 u8 *str = "This is a test program\n"; 22 23 uart_init(); 24 while(1) 25 { 26 delay(250); 27 if(TxLen == 0) 28 { 29 TxLen = strlen(str); 30 strcpy(TxBuf,str); 31 uart_start_send(); 32 } 33 } 34 } 35 36 37 /************************************************************* 38 名称:uart_init 39 功能: 串口初始化 40 *************************************************************/ 41 void uart_init(void) 42 { 43 //缓冲区处理 44 RxBufRead = 0; 45 RxBufWrite = 0; 46 47 TxBufRead = 0; 48 TxBufWrite = 0; 49 TxLen = 0; 50 51 PCON |= 0X80; //波特率加倍 52 SCON = 0x50; //8 位数据位,无校验位 53 54 TMOD |= 0x20; //定时器 1 自动重装 55 TH1 = 0xFD; //1190200 波特率 56 TL1 = 0xFD; 57 TR1 = 1; //开定时器 1 58 59 ES = 1; //开启串口中断 60 EA = 1; 61 } 62 Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 3 / 5 63 /************************************************************ 64 名称:uart_interrupt 65 功能:串口中断处理 66 ************************************************************/ 67 void uart_interrupt(void) interrupt 4 using 1 68 { 69 //接收到数据 70 if(RI == 1) 71 { 72 RxBuf[RxBufWrite++] = SBUF; 73 RxBufWrite %= 32; 74 75 //空间不够直接覆盖掉 76 if(RxBufWrite == RxBufRead) 77 { 78 RxBufRead++; 79 RxBufRead %= 32; 80 } 81 82 RI = 0; 83 } 84 85 //发送完成 86 if(TI == 1) 87 { 88 TI = 0; 89 90 //数据未发送完毕 91 if(TxLen != 0) 92 { 93 SBUF = TxBuf[TxBufRead++]; 94 TxLen--; 95 } 96 } 97 } 98 99 100 /************************************************************* 101 名称:uart_start_send 102 功能: 启动发送 103 *************************************************************/ 104 void uart_start_send(void) Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 4 / 5 105 { 106 if(TxLen > 0) 107 { 108 TxBufRead = 0; 109 SBUF = TxBuf[TxBufRead++]; 110 TxLen--; 111 } 112 } 113 114 /************************************************************** 115 名称:delay 116 **************************************************************/ 117 void delay(u8 count) 118 { 119 u8 i; 120 121 while(count--) 122 { 123 for(i=0; i<255; i++) 124 {} 125 } 126 } L11.1(5-12).声明串口通信所需的缓冲区。 L11.1(26-32).不断用串口发送一个字符串。 L11.1(70-83).中断方式接收,接收数据后放到接收缓冲区。 L11.1(86-96).中断方式发送,若检测到还有数据未发送,继续。 L11.1(104).启动串口发送,第一个字节要手动发送,触发中断后由中断发送。 下载验证 把程序编译后下载到单片机中,打开“串口调试助手”,设置好相应的参数 (9600-8-n-1 这个之前的文章我们介绍过)后,打开串口,可以看到有数据从串发过 来 Spark 嵌入式工作室 www.sparkcn.co.cc QQ : pzq@sparkcn.cn/csh@sparkcn 5 / 5 思考  如何实现用中断接收,写出例程并测试 作者简介 Spark 嵌入式工作室,成立于 2010 年,致力于嵌入式方面的软、硬件开发和 研究,团队成员都是有 经验 班主任工作经验交流宣传工作经验交流材料优秀班主任经验交流小学课改经验典型材料房地产总经理管理经验 的开发工程师,擅长使用 51 单片机、STM32。 联系方式 QQ:pzq@sparkcn.cn csh@sparkcn.cn QQ 技术交流群:186232047 验证码:spark 因群加入成员很快,如遇群满,请到 www.sparkcn.co.cc 获取最新交流群号,加 入交流 代码包下载地址:www.sparkcn.co.cc 或直接到群里共享下载 串口应用 简介 11.1串口中断 11.2 软件设计 下载验证 思考 作者简介
本文档为【例说51单片机11-串口应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_122379
暂无简介~
格式:pdf
大小:144KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-12-13
浏览量:12