永发信息网

MUC与pc串口通信时 出现错误帧

答案:1  悬赏:30  手机版
解决时间 2021-08-11 23:44

MUC与pc串口通信时 出现错误帧

程序如下 运行到send_one时出现错误帧

#include<reg52.h>
#include<intrins.h>
sbit k2=P3^1;
sbit k1=P3^0;
sbit rs=P2^4;
sbit rw=P2^5;
sbit ep=P2^6;
unsigned char num1=0;
unsigned char num2=0;
unsigned char cou=0;
unsigned char check[15]; //数据缓存
unsigned char message_string[50];
unsigned char message_sended[]={'T','h','e','M','e','s','s','a','g','e','H','a','s','B','e','e','n','S','e','n','d','e','d','.','\0'};
unsigned char code connecting[]={'c','o','n','n','e','c','t','i','n','g','.','.','.','\0'};
unsigned char code start[]={0xa1,'\0'};
unsigned char code message[]={'W','r','i','t','e','T','h','e','M','e','s','s','a','g','e',':','\0'};
unsigned char code wrong[]={'E','r','r','o','r','!','\0'};
unsigned char code num[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
unsigned char code tc_at[]={'A','T','\n','\0'};
unsigned char code tc_at_cmgf[]={'A','T','+','C','M','G','F','=','1','\n','\0'};
unsigned char code tc_at_cmgs[]={'A','T','+','C','M','G','S','=','"','+','8','6','1','5','9','5','1','8','6','3','3','1','6','"','\n','\0'};
unsigned char code tc_at_csca[]={'A','T','+','C','S','C','A','=','"','+','8','6','1','3','8','0','0','2','5','0','5','0','0','"','\n','\0'};
void delay(unsigned int n)  //延迟nMS
{
  unsigned int m;
  while(n--)
  {
    for(m=0;m<=114;m++);
  }
 
}

bit lcd_bz() //忙
{
  bit result;
  rs=0;
  rw=1;
  ep=1;
  _nop_();_nop_();_nop_();
  result=(bit)(P0&0x80);
  _nop_();_nop_();_nop_();
  ep=0;
  _nop_();_nop_();_nop_();
  return result;
}
void lcd_wcmd(unsigned char cmd)  //写命令
{
  while(lcd_bz());
  rs=0;
  rw=0;
  ep=0;
  _nop_();_nop_();_nop_();
  P0=cmd;
  _nop_();_nop_();_nop_();
  ep=1;
  _nop_();_nop_();_nop_();
  ep=0;
}
void lcd_wdat(unsigned char dat)    //写数据
{
  while(lcd_bz());
  rs=1;
  rw=0;
  ep=0;
  P0=dat;
  delay(80);
  _nop_();_nop_();_nop_();
  ep=1;
  _nop_();_nop_();_nop_();
  ep=0;
}
void lcd_init()      //初始化
{
  lcd_wcmd(0x01);
  delay(1);
  lcd_wcmd(0x05);
  delay(1);
  lcd_wcmd(0x38);
  delay(1);
  lcd_wcmd(0x0f);
  delay(1);
  lcd_wcmd(0x06);
  delay(1);
}
void uart_init() //串口初始化
{
  SCON = 0x50;
  TMOD = 0x20;
  TH1 = 0xfd;
  TL1 = 0xfd;
  ES = 1;
  TR1 = 1;
  EA = 1;
}
void display(unsigned char *p3)   //显示
{
  unsigned int m=0;
  while(*p3!='\0')
  {
      if(m<=15)
  {
    lcd_wcmd(0x00+0x80+m);
  }
  if(m>=16&&m<=31)
  {
    lcd_wcmd(0x40+0x70+m);
  }
  if(m>=32&&m<=47)
  {
    lcd_wcmd(0x00+0x70+m);
  }
  if(m>=48&&m<=63)
  {
    lcd_wcmd(0x40+0x60+m);
  }
  if(m>=64)
  {
    lcd_wcmd(0x01);
    m=0;
  }  
 lcd_wdat(*p3);
 p3++;
 m++;
  }
}

void send(unsigned char *p1)    //串口发送
{
  unsigned int count=0;
  unsigned char *p2;
  while(1)
  {
    unsigned int k=1;
 unsigned int flag=0;
 cou=0;
 count++;
 p2=p1;
    while(*p2!='\0')
 {
      SBUF=*p2;
   while(!TI);           
   TI=0;
   p2++;  
 }
 delay(500);
 while(check[k]!='\0')
 {
     if(check[k-1]=='O'&&check[k]=='K')
     {      
    check[k-1]='\0';
    check[k]='\0';
    flag++;
    break;
     }
  k++;      
 }
 if(flag==1)
 {
       break;
 }
 if(count==10)
 {
    lcd_wcmd(0x01);
    display(wrong);
    while(1);
 }
  }
}
void send_one(unsigned char *p3)
{
     while(*p3!='\0')
 {
      SBUF=*p3;
   while(!TI);           
   TI=0;
   p3++;  
 }
}

unsigned char keyscan(void)   //键盘扫描
{
 unsigned char cord_h,cord_l;
 P1=0x0f;          
 cord_h=P1&0x0f;    
 if(cord_h!=0x0f)   
 {
  delay(9);       
  if((P1&0x0f)!=0x0f)
  {
    cord_h=P1&0x0f;
    P1=cord_h|0xf0; 
    cord_l=P1&0xf0; 
    return(cord_h+cord_l);
   }
  }
   return(0xff);    
}
void change(unsigned char m,unsigned char n) //按键变换
{
  if(num2==0)
  {
    lcd_wcmd(0x01);
 delay(10);
  }
  if(num1<m||num1>n)
  {
    num1=m;
  }
      if(num2<=15)
  {
    lcd_wcmd(0x00+0x80+num2);
  }
  if(num2>=16&&num2<=31)
  {
    lcd_wcmd(0x40+0x70+num2);
  }
  if(num2>=32&&num2<=47)
  {
    lcd_wcmd(0x00+0x70+num2);
  }
  if(num2>=48&&num2<=63)
  {
    lcd_wcmd(0x40+0x60+num2);
  }
  if(num2>=64)
  {
    lcd_wcmd(0x01);
    num2=0;
  }
  lcd_wdat(num[num1]);
  delay(10);
  message_string[num2]=num[num1];
  num1++;   
}

void receive_uart() interrupt 4
{
  while(RI==1)
  {
    RI=0;
 check[cou]=SBUF;
 cou++;
  }
}

void main()

   unsigned char key;
   uart_init(); //串口初始化
   lcd_init(); //初始化LCD
   display(connecting);
   delay(10);
   send(tc_at);
   send(tc_at_csca);
   send(tc_at_cmgf);                  
   send(tc_at_cmgs);
   lcd_wcmd(0x01);
   display(message);
   delay(10);
   while(1)
   {
     while(!k1)
  {
    delay(10);
    {
      while(!k1)
   {
     num2++;
     while(!k1)
     {
       delay(10);
    while(!k1);
     }
   }
    }
  }
     while(!k2)
  {
    delay(10);
    {
      while(!k2)
   {
     send_one(message_string);//////从这开始出现错误帧、、、、
     delay(30);
     send_one(start);
     display(message_sended);
     while(1);
   }
    }
  }
  key=keyscan();
     switch(key)
    {              
     case 0x7e:
     {
        change(0,2);
        break;
     }
     case 0x7d:
  {
        change(3,5);
        break;
  }
     case 0x7b:
  {
     change(6,9);
        break;
  }
     case 0x77:
  {
     change(10,11);
        break;
  }
     case 0xbe:
  {
     change(12,13);
        break;
  }
     case 0xbd:
  {
     change(14,15);
        break;
  }
     case 0xbb:
  {
     change(16,17);
        break;
  }
     case 0xb7:
  {
     change(18,29);
        break;
  }
     case 0xde:
  {
     change(20,21);
        break;
  }
     case 0xdd:
  {
     change(22,23);
        break;
  }
     case 0xdb:
  {
     change(24,25);
        break;
  }
     case 0xd7:
  {
     change(26,27);
        break;
  }
     case 0xee:
  {
     change(28,39);
        break;
  }
     case 0xed:
  {
     change(30,31);
        break;
  }
     case 0xeb:
  {
     change(32,33);
        break;
  }
     case 0xe7:
  {
     change(34,36);
        break;
  }   
   }
  }
}

最佳答案
单片机的文章怎么弄这来了?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这个怎么回事,为什么大括后面要再加个分号
是不是我终究为爱情流泪?
2010广西建设职业技术学院新生用军训吗
帮忙取个艺名
90后的青年,有固定工作好,还是自己干个体好
什么网站可以查询快递价格?
有紫钻去那领音速地下旋转的东西
问一下上海国际金融中心双子塔建筑是美国设计
神农架林区神农架林区阳日牲猪养殖业协会这个
如果墨盒中的墨水用完了。。下回装入墨水墨头
那里有寂寞卖?
玩游戏超超卡
霸王爱人的动漫在线观看
女朋友发给我老公被她妈看到了,说什么借口
怎么把vb工具箱恢复 ,急急急
推荐资讯
脸上缝了12针,线拆晚了会怎样
快十八岁了没有150cm!还能长高么?
桂阳县郴州姊妹快餐店地址在哪,我要去那里
有那位朋友知道国产在线浊度监测仪哪家生产?
圣灵之剑/锤任务,生命之穴没人
怎么我的寻仙兑换码会错误
为什么我的qq图标按不出网址
荆州区荆州好邻居(凤凰路店)地址在哪,我要去
我有中国银行卡我有20块钱在里面想点财付通
嵊州浦口开发区附近有没有好一点的房子可以租
本人想把我的+10万仞加12有没有哪位大虾介绍
用什么工具做魔幻片
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?