STC系列单片机串口通信的总结
更新时间:2024-01-11 09:27:01 阅读量: 教育文库 文档下载
- STC系列单片机推荐度:
- 相关推荐
串口通信:
软件调试,在调试过程中需要使用虚拟串口助手。在编程中注意设计时钟和波特率。注意程序的串口设置和串口调试助手中串口设置相同。 单串口:
mode com2 9600,0,8,1 assign com2
mode com2 9600,0,8,1 assign com2
STC12介绍的方法:
接收一个字节的函数和发送字符串的函数,发送字符串需要知道字符串的长度。对于接收字符串的函数,可以仿照通过调用接收一个字节的函数,写出接收字符串函数。 void WriteUart(uchar *pucData ,uchar ucLength) { if(ucLength == 0) { return; } if(UartBuzy == 1) return; ucSendLength = ucLength; pucSendData = pucData; SBUF = *pucSendData; UartBuzy = 1; ucSendedCount = 0; }
uchar ReadUart(void) { uchar Data; Data = ucRecData; ucRecData = 0; return Data; }
Unsigned char RString(unsigned char *s, unsigned int len) {
Unsigned int i; For(i =0;i *s++ = ReadUart(); } } void UartIRQ(void) interrupt 4 { if(RI) { RI = 0; ucRecData = SBUF; } if(TI) { TI = 0; ucSendedCount++; if(ucSendedCount >= ucSendLength) { UartBuzy = 0; return; } else { SBUF = *(pucSendData + ucSendedCount); } } } STC15: STC15只给出了发送函数,且发送函数有瑕疵,具体见最后分析。 void UART1_ISR(void) interrupt 4 using 1 { if (RI) //接收数据 { RI = 0; //清除RI位 } if (TI) //发送数据 { TI = 0; //清除TI位 busy = 0; //清忙标志 } } void SendData(unsigned char dat) { while (busy); //等待前面的数据发送完成 busy = 1; SBUF = dat; //写数据到UART数据寄存器 } void SendString(char *s) { while(*s) //检测字符串结束标志 { SendData(*s++); //发送当前字符 } } SendString()字符串函数,当遇到发送的字符串里面有0x00就会终止,实用性不强。SendData()函数中三条语句的顺序容易引起死机。 比较好的处理串口接收一个字节数据的方法,不采用中断处理标志位。通过关中断,然后处理串口接收标志,从而减少在处理过程中因为触发中断而造成的死循环。修改好的串口接收一个字节的代码(这是采用的串口2接收一个字节数据的处理函数,其控制寄存器不支持位操作)如下: void SendData(BYTE dat) { EA = 0; S2BUF = dat; //SBUF=dat while (!(S2CON & S2TI)); //等待前面的数据发送完成 while(TI); S2CON &= ~S2TI; //TI = 0; EA = 1; } Unsigned char SendString(unsigned char *s, unsigned int len) { Unsigned int i; For(i =0;i SendData(*s++); } } 一个比较好的接收处理框架(利用通信协议): void UART1_ISR(void) interrupt 4 using 1 { unsigned char sbuffer; if(RI) { RI = 0; sbuffer = SBUF; if(nflag == 0) { REC_MAX = REC_MAX_NAME ; } else REC_MAX = REC_MAX_DATA; if((sbuffer == CHECK_HEAD) && (Rec_Flag == 0))//如果收到文件头而且当前未接收 { Rec_Flag = 1; Rec_Len = 0; uarttext[0] = sbuffer; // 这里保留了包头 } else if(Rec_Flag) // 开始接收 { if(Rec_Len < (REC_MAX - 1)) { Rec_Len++; uarttext[Rec_Len] = sbuffer; // 当数据送缓冲区 } else if(Rec_Len == (REC_MAX - 1)) // 接收完成 { /* if(uarttext[Rec_Len] == CHECK_TAIL) // 表明接收成功未出错 { // } else // 有误码 { } Rec_Flag = 0;// 接收完成,标志清0 } } } else if(TI) { TI = 0; busy=0; } }
正在阅读:
STC系列单片机串口通信的总结01-11
尔雅通识课意大利文化期末考试201608-16
中华字经 注释本208-27
小升初语文专项训练文学常识积累含答案05-12
节目串词12-18
第一章第三节优化知能演练03-02
七年级数学下学期期末试题05-02
辞职报告02-25
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 串口
- 单片机
- 通信
- 总结
- 系列
- STC
- 河南旅游业发展中存在的问题及对策分析
- 《中国古代寓言故事》阅读测试题及阅读答案
- spring教程下载-ibatis、spring、struts2.0开发实例
- 石嘴山市第二十三小学“七彩课堂”示范课程方案 - 图文
- 北师大版 数学 上 章实数 导学案
- 合作协议书修改篇
- BSCI SEDEX SMETA社会责任风险识别与评估表
- 如何用几何画板画出函数图象
- “十三五”重点项目-汉麻产业化加工项目可行性研究报告 - 图文
- 施工企业会计课程标准
- 启蒙杯学乐英语少儿英语比赛(初稿)
- 功能陶瓷材料研究进展综述
- 双光束红外分光光度计标准操作程序
- 推开教育的另一扇窗
- 股票基础知识测验
- 《传染病护理学》教学大纲下载
- CNG加气站突发事故应急处理方案
- 基于JSP的仓储管理系统设计与实现 - 毕业论文
- 新视野大学英语第二版第三册读写教程选词填空翻译
- 云南省南涧彝族自治县无量山镇中学2017-2018学年八年级政治上学期期中试题 新人教版