完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define uintunsigned int #define ucharunsigned char uint a,flag; void initial() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 TH1=0XFD; //计数器初始值设置,注意波特率是4800的 TL1=0XFD; ES=1;//打开串口中断 EA=1;//打开总中断 TR1=1;//启动定时器1 } void main () { initial(); while(1); } void ser()interrupt 4 { a=SBUF; //接收串口发来的值 RI=0;//接收中断标志位,当串行接收第8位数据结束时,内部硬件使RI置1,向cpu发中断申请,用软件清零取消中断申请 SBUF=a;//向串口发送值 while(!TI);//串行发送停止位开始,内部硬件使T1置1,向cpu发中断申请,此处验证数据是否发送结束 TI=0;//用软件清零取消中断申请 } 若把TH1,TL1改为0xf3,然后加个 PCON=0X80; //波特率加倍后就能正确通信,实在不解 |
|
相关推荐
6个回答
|
|
中断服务程序有问题把
|
|
|
|
不能在中断里这样发送数据,可以在中断里设一个标志,当接收到数据时,标志有效,然后在主程序里将接收到的数据返回。
|
|
|
|
中断占用时间太长,丢了数据了
|
|
|
|
建议参考一下STC官方的官方例程。
|
|
|
|
原来的程序没有错,是用于晶振11.0592MHz环境,波特率是9600,用于12M晶振误差太大,不能正常工作,你把TH1,TL1改为0xf3,然后加个 PCON=0X80; 用在晶振12MHz环境,波特率是4800。
|
|
|
|
中断里面处理数据很容易丢失数据,而且你最好在发送和接收之间稍微加一下延时
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
187 浏览 0 评论
630 浏览 0 评论
【xG24 Matter开发套件试用体验】10-Bluetooth示例1
723 浏览 0 评论
781 浏览 0 评论
【xG24 Matter开发套件试用体验】power specification电源规格参数配置
599 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10825 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-23 15:15 , Processed in 0.701756 second(s), Total 84, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191