jkts.net
当前位置:首页 >> 51单片机串口发送字符串,只想发送一次,结果在一... >>

51单片机串口发送字符串,只想发送一次,结果在一...

TR1 = 0; //无奈的我想关掉一切,但是还是不行 ES = 0; // EA = 0; 上面的语句放在 while 内试试吧

四位数字组合成的值大于256,是一个双字节数值,所以需要发送两次程序如下: #includeunsigned char x;main(){TMOD=0x20SCON=0x50;TH1=0xfd;TL1=0xfd;TR1=1;x=1234;SBUF=x/256;while(TI==0);TI=0;SBUF=x%256;while(TI==0);TI=0;while(1);}

你看一下send-string这个函数,string指的是字符串,要求输入的参数应该是指针类型,可以输入数组名称,也可以直接输入一串字符如"I love you"用引号引住,发送的是ASCI码 要想发数据,你可以写一个发数据的函数,或者将数据变量转换为地址, 如 ...

如果你想发的是 字符 '1' 跟字符 ‘2’(字符串“12”),那么每次只能发一个字符。必须成‘1’跟‘2’分开。 如果你想发的是数字‘12’,那么可以直接发‘12’(0x0C)。 串口一次只能接收8个位(当然可以设置成 9个位),也就是 一次通讯 1Byte 数据。

想非常安全,那就要有接收确认机制。 1,发送A 2,接收单片机接收到后返回相同值, 3,发送单片机接收到返回的A,完成一次发送。 4,再发送B, 5,接收单片机接收到B返回相同值, 6,发送单片机接收到返回的B,完成一次发送。 其实就是1,2,3步骤...

你这里的难点在于"只发送一次",可以定义一个标志变量初始为0,当P1.1=0时且标志为0,向串口发送一个数据,并置该标志为1,即使P1.1依然为0也不会一直发送;当检测到P1.1=1时,置标志为0,以便下次再触发。其他依此类推。

对于51而言,每帧产生一次中断。接收4个字节是分4次中断接收完成的。 51的UART模块从串行移位寄存器接收完成后是直接放入接收缓冲的,而且接收缓冲只有一个单元。

1楼的说法明显不对,串口接收时有标志位RI,当串口接收到一个字符(8位)时,RI会自动被置1,此时CPU会从主程序转去执行串行中断,普通单串口51单片机一般为 interrupt 4 子程序,当执行完时会自动回到主程序继续执行,因此自 interrupt 4子程序...

你这串口接收子程序,只要接收到第一个字节的数据就一直在中断子程序中,然后等待接收其它数据了, while(!RI); 这就是在等待接收其它数据了,接收完了以后又在中断子程序连续发送了。这么写程序是有很大弊病的,一旦进入中断程序,到最后发送结...

不用16进制那就是字符,电脑发送和单片机接收都是该字符的asii码 字符1的asii码=16进制的31,即0x31

网站首页 | 网站地图
All rights reserved Powered by www.jkts.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com