发新帖我要提问
12
返回列表
打印

串口通信:labview 向单片机发送一个百位数问题

[复制链接]
楼主: 虚拟小张
手机看帖
扫描二维码
随时随地手机跟帖
21
NE5532| | 2013-5-17 08:43 | 只看该作者 回帖奖励 |倒序浏览
找个电脑,用串口助手来发,确保发送是正确的,然后从收1个字节、2个字节、3个字节,再到接收数据包来调试,不要一口吃。

使用特权

评论回复
22
ayb_ice| | 2013-5-17 09:06 | 只看该作者
先把主循环搞对再说吧,主循环不对,谁知道程序跑到哪里去了,又会产生什么影响.

你这写程序基本思路就有问题,看到的只是现象,不是结果,更不是结论

使用特权

评论回复
23
tqlxx| | 2013-5-17 11:49 | 只看该作者

使用特权

评论回复
24
YW-ALAN| | 2013-5-17 14:32 | 只看该作者

使用特权

评论回复
25
szbtalent| | 2013-5-17 14:52 | 只看该作者
回复下有积分不。。。

使用特权

评论回复
26
虚拟小张|  楼主 | 2013-5-17 16:10 | 只看该作者
dwh000 发表于 2013-5-17 12:33
你能确定发送下来的是asc码,还是十六进制,还是就是十进制的一个数吗?这个先搞清楚. ...

写下来的是ascII码。

使用特权

评论回复
27
虚拟小张|  楼主 | 2013-5-17 16:11 | 只看该作者
ayb_ice 发表于 2013-5-17 09:06
先把主循环搞对再说吧,主循环不对,谁知道程序跑到哪里去了,又会产生什么影响.

你这写程序基本思路就有问题 ...

主程序没问题,感觉还是通信协议的问题。不过谢谢你哈。

使用特权

评论回复
28
yl581101| | 2013-5-17 16:30 | 只看该作者
主程序只跑了一次,要while

使用特权

评论回复
29
zjf829| | 2013-5-17 17:11 | 只看该作者
:)..............

使用特权

评论回复
30
ayb_ice| | 2013-5-18 09:49 | 只看该作者
虚拟小张 发表于 2013-5-17 16:11
主程序没问题,感觉还是通信协议的问题。不过谢谢你哈。

这人很自信啊,
程序都不知道有没有在跑,跑到哪去了都不知道,还谈什么协议

使用特权

评论回复
31
虚拟小张|  楼主 | 2013-5-18 11:34 | 只看该作者
yl581101 发表于 2013-5-17 16:30
主程序只跑了一次,要while

如果加上while的话,如何再打开串口中断哈

使用特权

评论回复
32
虚拟小张|  楼主 | 2013-5-18 11:36 | 只看该作者
ayb_ice 发表于 2013-5-18 09:49
这人很自信啊,
程序都不知道有没有在跑,跑到哪去了都不知道,还谈什么协议 ...

那你看我的程序问题在哪里?解决问题,调试成功,才是王道!

使用特权

评论回复
33
梦幻FLY| | 2013-5-18 14:30 | 只看该作者
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char a[3]={0};
uchar flag;
unsigned int u;
void delay_20ms(uint t)
{
        uchar j;
        for(;t>0;t--)
        for(j=6245;j>0;j--);
}

/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
        SCON = 0x50; // SCON: 模式1, 8-bit UART, 使能接收
        TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
        TH1 = 0xFD; // TH1: 重装值2400 波特率晶振12MHz
        TR1 = 1; // TR1: timer 1 打开
        EA = 1; //打开总中断
        ES = 1; //打开串口中断
}




/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
        InitUART();
        while(1)
        {
                   if(flag==1)
                {
                       ES=0;
                     flag=0;
                       
                    SBUF=a[0];
                    P0=SBUF;
                    P2=0x04;
                   delay_20ms(20);
                   SBUF=a[1];
                   P0=SBUF;
                   P2=0x05;
                  delay_20ms(20);
                  SBUF=a[2];
                  P0=SBUF;
                  P2=0x06;
                  delay_20ms(20);

                 ES=1;
               }
         }
}                                                            

/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
        if(RI) //判断是接收中断产生
        {
                a[u]=SBUF;
                u++;
                if(u==3) u=0;
                flag=1;
                RI=0; //标志位清零                 
        }
}

试试行么 ,不一定能解决

使用特权

评论回复
34
dengboliduo| | 2013-5-18 22:09 | 只看该作者
你的数组不断的被覆盖了的 ,显示的数所以不正确的,当3个数接收完复制给其他的数组

使用特权

评论回复
35
虚拟小张|  楼主 | 2013-5-19 10:08 | 只看该作者
dengboliduo 发表于 2013-5-18 22:09
你的数组不断的被覆盖了的 ,显示的数所以不正确的,当3个数接收完复制给其他的数组 ...

可以具体说一下,怎么解决么?

使用特权

评论回复
36
dengboliduo| | 2013-5-19 15:44 | 只看该作者
labview里发送数据开始后结尾都要有标识符 单片机已接收数据的以判断 那些数据是第一位那些是结束标志,if(u==3) u=0;并且要将保持的数组读出来

使用特权

评论回复
37
虚拟小张|  楼主 | 2013-5-19 19:31 | 只看该作者
梦幻FLY 发表于 2013-5-18 14:30
#include
#define uchar unsigned char
#define uint unsigned int

还是不行,谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则