找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4611|回复: 0
打印 上一主题 下一主题
收起左侧

串口只能收到第一个数据

[复制链接]
跳转到指定楼层
楼主
ID:76820 发表于 2015-4-13 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jill0630 于 2015-4-13 14:03 编辑


求助:串口只能收到第一个数据,第二个怎么都收不到,查了中断与定时器也没有找到问题,希望大神来帮忙,主要程序如下:


void Comm_Init(void)////初始化串口
{
    SCON = 0xD0;   // 串口工作于9位可变波特率方式,
    PCON &= 0x3F;  //工作于非FE (帧错误检测)模式
    ES = 1;         //允许串口中断
    AUXR =0X01;              //禁止ALE信号

        TMOD |= 0X20;        //,定时器2  baudrate 发生器

        PCON |= 0x80;//波特率加倍
        TH1 = 0XFD;//115200;//0xDC 9600;


TR1 = 1;

ET2 = 1; //允许 timer2 中断
RCAP2L= TIMER_LOW;
    RCAP2H= TIMER_HIGHT;
        TR2 =1;//启动Timer 2
        ReceveCount=0;
        
         Frame_Len=0;
         EA=1;
         BL_Timer = BL_DELAY;
}

void commProc() interrupt 4        //发送接收中断
{
char a,b;
checkoutError = 0; //通讯校验错误位
if(TI)         //发送中断标志,发送完置1
{
TI = 0;
if(sendPosi < SendCount)
                {
                        sendPosi++;
                        ACC = SendData[sendPosi];
                        if(P==1)     //A中1的个数为奇数
                        SCON|=0x08;         //串口控制寄存器
                        else
                        SCON&=~0x08;  //加上校验位
                    SBUF = SendData[sendPosi];
                }


        
}
  if(RI)
{
RI = 0;
Frame_timer = TIMEOUT;


ReceveData[ReceveCount] = SBUF;
                ACC = ReceveData[ReceveCount];
                a=SCON;
                b=P;
                if(((b==1)&&((a&0x04)==0x00))||((b==0)&&((a&0x04)==0x04)))
                        checkoutError = 2;        
                        if(ReceveCount<79)
                        ReceveCount++
                                       

}
}



void Timer2_Proc() interrupt 5//定时器2中断服务程
{
TF2 =0;        //T2的溢出标志位

        if(Frame_timer>0)
                {
        if((--Frame_timer) == 0)
                {
        Frame_Len = ReceveCount; //帧的长度
        ReceveCount = 0;

        
                }
                }

void main()
{
        unsigned char temp[80]

        
        EA=1; //Interurupt Enabled

        RST_Port =0;


        RST_Port =1;


        Ini();
        DisDotsA(0,0);//lcd clear
        Comm_Init();
        while (1)
        {
        uint va,vb,vc;

        va=(uint)ReceveData[0];
        vb=(uint)ReceveData[1];
        vc=222;

                sprintf(temp,"电压(V) Va=%03u  Vb=%03u, Vc=%03u ",va,vb,vc);           
                DisGBStr(temp);//display in the screen

        }
}


va,vb的数据是电脑从串口发送到单片机,再在lcd屏幕上显示,可是只有va是正确的,vb没有变化,如果连续发送,则与va相同,这是怎么回事,哪位大神指点下?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表