打印

求助:用串口 接受发送数组

[复制链接]
6002|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
109445686|  楼主 | 2011-9-8 12:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用串口 接受一串数组,然后判断正确发出另一串数组,下面的程式通不过,请高手指点

#include <reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        
#include"main.h"
#include"com.h"
uint count=0;
unsigned char raid[4];//={0x01,0x02,0x03};
unsigned char rai[4]={0x01,0x02,0x03};
//                    串口初始化
//------------------------------------------------*/
void UartInit(void)  [url=]//9600bps@11.0592MHz[/url]
{
PCON |= 0x80;  //使能波特率倍速位SMOD
SCON = 0x50;  //8位数据,可变波特率
AUXR &= 0xbf;  //定时器1时钟为Fosc/12,即12T
AUXR &= 0xfe;  //串口1选择定时器1为波特率发生器
TMOD &= 0x0f;  //清除定时器1模式位
TMOD |= 0x20;  //设定定时器1为8位自动重装方式
TL1 = 0xFA;  //设定定时初值
TH1 = 0xFA;  //设定定时器重装值
ET1 = 0;  //禁止定时器1中断
TR1 = 1;  //启动定时器1
EA  = 1;                  //打开总中断
ES = 1;       //打开串口中断
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void sendbyte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void senddata(unsigned char *s)
{
ES = 0;     //关闭串口中断
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
  sendbyte(*(s));
  s++;
}
ES = 1;            //打开串口中断
}

/*------------------------------------------------
                     串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{  
if(RI)
{
  RI = 0;   //清除接收中断标志位
  raid[count]=SBUF; //读出接收到的数据               
  count++;
}  
if(count==4)
{  
  senddata(rai);//串口输出
  count=0;
}
if(raid[]=rai[])
{
  senddata(rai);//串口输出
}
if(TI)  //如果是发送标志位,清零
TI=0;
}
void main (void)
{
UartInit();//初始化
while(1)
{   
  
}         
   
}

相关帖子

沙发
NE5532| | 2011-9-8 12:20 | 只看该作者
板凳
yadaovs| | 2011-9-8 13:05 | 只看该作者
if(raid[]=rai[])
这是什么意思?

使用特权

评论回复
地板
nigl| | 2011-9-8 13:07 | 只看该作者
不能在中断里调用 senddata(rai);//串口输出

使用特权

评论回复
5
nigl| | 2011-9-8 13:09 | 只看该作者
这样试试:
void main (void)
{
UartInit();//初始化
while(1)
{   
     if(count==4)
{  
  senddata(rai);//串口输出
  count=0;
}

}         
   
}

使用特权

评论回复
6
yadaovs| | 2011-9-8 13:12 | 只看该作者
5# nigl 楼主想判断完整个字符串是否接收正确。关键在他中断中的数组判断语句不对,另外发送函数调用时也用错了形参类型

使用特权

评论回复
7
109445686|  楼主 | 2011-9-8 13:28 | 只看该作者
3# yadaovs



就是当两个数组相同时 做下面的内容

使用特权

评论回复
8
109445686|  楼主 | 2011-9-8 13:28 | 只看该作者
6# yadaovs
能给个正确的么,  本人是新手,请指点,谢谢

使用特权

评论回复
9
joyme| | 2011-9-8 14:01 | 只看该作者
去掉
if(raid[]=rai[])
{
  senddata(rai);//串口输出
}
至少应该能工作,如果你要比较受到的数据,那么就按字节比较
if(raid[]=rai[])根本不是你要的比较语句,一个“=”是赋值,不会连这么简单的语法都不知道吧,赋值语句放在if条件里将总是为真

使用特权

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

本版积分规则

0

主题

4

帖子

1

粉丝