单片机串行口发送多位数据程序

求一单片机c程序:要求是把A单片机中的两个八位二进制数发送到B单片机中。因为单片机的串口一帧只发八位,我主要是不知道怎么连续传送两个数据,还要用B机来显示,不过我不需要现... 求一单片机c程序:要求是把A单片机中的两个八位二进制数发送到B单片机中。因为单片机的串口一帧只发八位,我主要是不知道怎么连续传送两个数据,还要用B机来显示,不过我不需要现实的程序,只要成功发送到B得程序就好。。。谢谢啦。。。
题目应该是发送多个数据吧,呵呵
展开
 我来答
做而论道
高能答主

推荐于2016-07-30 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
想要发送多次,来传送一个数据,就必须自己制定协议。
一个简单的方法是:
把“两个八位二进制数”先拆成“四个四位二进制数”,分成四次进行传送。
每次传送,用低四位来表示“一个四位二进制数”,用高四位来表示“第几个”。

接收方再根据高四位的信息,把低四位拼凑成“两个八位二进制数”。

这种方法,最大可以传送64位数的数据,即一个“八个八位二进制数”。
追问
恩,理解一点不过我对c程序运用还不熟,可以传段程序看看吗?
追答
c程序运用还不熟,那就用汇编吧。
汇编特简单。
sanjinluo
2011-06-25 · TA获得超过4714个赞
知道大有可为答主
回答量:3402
采纳率:0%
帮助的人:2393万
展开全部
传个程序给你参考吧
//这个是AVR单片机的,
void Putchar(char c) //串口0发送字符
{
while(!(UCSR1A&(1<< UDRE1))); //
UDR1=c;
}
//******51单片机
void Putchar(char c) //串口0发送字符
{
ES=0;//如果开了中断的话,要先关闭中断
SBUF=c;
while(!TI);//
TI=0;
ES=1;//如果开了中断的话,恢复中断

}
void Putstring(unsigned char *p,unsinged int n){
while(n--){
Putchar(*p);
}
}

void main(void){
unsigned char table[5];
...
.while(1){
...//其他程序
Putstring(table,2);//发送2个字节
...
}

}
接收程序的话,最好使用中断,并且有一定的协议,比如首字节就是发送数据的个数
这样的话,接收了多少个以后,就做一个标记位,表示接收完毕,
下面这个程序是指每次发送的数据时固定个数的9个,并且以0x0d作为第一个字符的AVR接收程序
SIGNAL(SIG_UART1_RECV)
{
unsigned char Recdata;
Recdata=UDR1;
if(Recdata==0x0d)RecCnt=0;
UART_RxBuf[RecCnt++]=Recdata;
if(RecCnt>=0x09){
UartRec_f=1;
RecCnt=0;
DIS_UART1();

}
}

不要协议的话,也可以 通过延时的方法来实现,比如延时多长时间没有收到数据,就表示接收完毕
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
56butck10
2011-06-25 · TA获得超过253个赞
知道小有建树答主
回答量:446
采纳率:0%
帮助的人:93.9万
展开全部
从你出现的问题看,你应该是发的0,1,2,3……255的数,而不是它们对应的ASCII的值。比如你要发送在串口调试工具中显示0,应该发送0的ASCII值;假设你的串口发送一字节的函数为:sendbyte(unsigned char n);
则发送函数可以这样写:
void send(void)
{
unsigned char i;
for (i=0;i<256;i++)
{
sendbyte(n/100+'0');
sendbyte(n%100/10+'0');
sendbyte(n%100%10+'0');
}
}
去掉16进制显示,就能看到0-255的显示了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式