标题:
为什么我用单片机串口发一个数组的内容出去,顺序是乱的?
[打印本页]
作者:
翼龙侠
时间:
2021-1-15 19:55
标题:
为什么我用单片机串口发一个数组的内容出去,顺序是乱的?
/*uart.c*/
#define uc unsigned char
#define ui unsigned int
#define ul unsigned long
#define iuc idata unsigned char
#define iui idata unsigned int
#define iul idata unsigned long
#define bt bit
#define swch switch
#define cs case
#define whl while
#define rtn return
#define brk break
#define itrpt interrupt
uart_init(bt xos)
{
if(xos==1)
{
P_SW2|=0x80; /*启动内部扩展区寄存器访问功能*/
XOSCCR|=0xc0; /*启动外部晶振*/
while(!(XOSCCR & 1)); /*待晶振频率稳定*/
CLKDIV=0x00; /*晶振不分频*/
CKSEL=0x01; /*选用外部晶振*/
}
SCON=0x50; /*设定串口工作方式*/
TMOD|=0x21; /*设置T0T1寄存器*/
AUXR=0xfc; /*配置辅助寄存器*/
TL1=TH1=0xdc; /*设置波特率为9.6kbit/s*/
TR1=1;
REN=1; /*允许接收串口数据*/
EA=1; /*打开总中断*/
ES=1; /*打开串口中断*/
P3M1=0x01; /*00000001*/
P3M0=0x02; /*00000010,将串口接收口设为高阻输入模式,发送口设置为强推挽模式*/
}
uart_txd(uc buf[])
{
iui i;
iui j=sizeof(buf);
TI=RI=0;
for(i=0;i<j;i++)
{
SBUF=buf[i];
while(TI==0)
{
;
}
TI=0;
}
}
/*—————————————两个文件的分割线—————————————*/
/*main.c*/
#include <STC8x.H>
#include <UART.H>
iui txdbuf[13]={'H','E','L','L','O',' ','W','O','R','L','D','!','\0'};
main()
{
uart_init(0);
while(1)
{
uart_txd(txdbuf);
}
}
复制代码
作者:
人人学会单片机
时间:
2021-1-15 21:02
分享给你这个贴子,STC单片机串口发送 不需要while死等。
http://www.51hei.com/bbs/dpj-200927-1.html
使用STC15W4K核心板调试串口1,晶振30M,波特率9600。需要发送的时候,Uart1_Flag=1即可发送一包数据。这样的代码CPU效率更高。
作者:
munuc_w
时间:
2021-1-16 12:59
楼主说的乱不是发送的数据乱还是接收到的数据乱。在通信中通信的两方的通信参数必须设定一致,按着定好的协议收发数据,不然就易出问题。
作者:
zpmpok001
时间:
2021-1-16 23:25
接收的时候,要想办法判断开始,接收的过程有可能丢失数据,所以要有校验码
作者:
zpmpok001
时间:
2021-1-16 23:25
接收的时候,要知道从哪里开始,到哪里结束,校验码也是要有的,因为有可能丢失数据
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1