完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一个单片机串口同时接收、发送数据,为什么不能实现?程序如下:
#include #include"type.h" uint8 SigNum[100]; int i; void USART_Init(void) { TMOD = 0x20;//将定时器1设置为方式2,8位自动重装模式 SCON = 0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能 PCON = 0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速 TH1 = 0xfd; //11.0592M晶振,波特率9600 TL1 = 0xfd; TR1 = 1;//开启定时器1 ES = 1;//开启串口中断 EA = 1;//开启总中断 } void Send_Dat(uint8 dat) { SBUF = dat; while(ti==0); TI=0; } void main() { uint8 a=0; USART_Init(); while(1) { for (i=0;i<100;i++) { SBUF= SigNum[i]; while(TI==0); TI=0; } i=0; } } void USART_INTR() interrupt 4 //串口中断 { if(RI) { RI = 0; for(i=0;i<100;i++) { SigNum[i]=SBUF; } i=0; } } 本人新手,请大神们指教 |
|
相关推荐
5个回答
|
|
程序只有一半,串口通信不工作多数都是波特率不对。例外串口中断的时候要对发送触发的中断和接收触发的中断都处理。
|
|
|
|
不好意思,不知道怎么就发了半段,void main(){ uint8 a=0; USART_Init(); while(1) { for (i=0;i<100;i++) { SBUF= SigNum; while(TI==0); TI=0; } i=0; } } void USART_INTR() interrupt 4 //串口中断 { if(RI) { RI = 0; for(i=0;i<100;i++) { SigNum=SBUF; SBUF= SigNum; while(TI==0); TI=0; } i=0; } } |
|
|
|
本帖最后由 依然落叶飘零 于 2014-5-7 14:06 编辑
你就犯了我说的错误了,串口没有对发送中断处理。你可以在发送函数Send_Dat中把中断关了,或者在中断函数里面加
否则TI=1的时候不断触发中断。 |
|
|
|
谢谢,明白了,我再试试 |
|
|
|
单片机作为从机,串口全双工工作还有点意义,作为主机,暂时我还没有看到明显的效果!为此思考中……
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
151 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1043 浏览 0 评论
836 浏览 0 评论
874 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 00:05 , Processed in 0.758474 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号