找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3063|回复: 3
收起左侧

单片机串口通讯程序变量赋值问题

[复制链接]
ID:290141 发表于 2019-4-8 09:43 | 显示全部楼层 |阅读模式
20黑币
如图 我想把这三个数取过来 231 是定义三个数组呢  还是直接使用变量赋值 这下面是我写的 但是取不出来
  1. #include<stc12.h>//头文件
  2. sbit DU=P2^6;
  3. sbit WE=P2^7;
  4. unsigned int date[6],value,one,two,three;
  5. unsigned char num=0;
  6. unsigned int  code sz[4]={0x3f,0x06,0x5b ,0x4f};         
  7. void delay(unsigned char xms)                  //xms等于几就延迟几毫秒
  8. {
  9.    unsigned int i,j;
  10.         for(i=xms;i>0;i--)
  11.             for(j=112;j>0;j--);
  12. }
  13. void UartConfiguration()
  14. {
  15.         
  16.            TMOD=0x20;    //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重装的8位定时器。         
  17.      TH1=0xfd;     //定时器1初值  ,设置波特率为9600 晶振11.0529MHZ?  
  18.      TL1=0xfd;  
  19.            AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
  20.            AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  21.      TR1=1;        //开启定时器1  
  22.            SCON=0X50;
  23.            PCON=0X00;
  24.            


  25.            ES=1;         //允许串口中断  
  26.      EA=1;         //允许中断(总闸)   
  27.         }

  28. void main()
  29. {
  30.   UartConfiguration();
  31. while(1)
  32. {
  33. //   one=date[0]%10;
  34. //   two=date[2]%10;
  35. //   three=date[4]%10;
  36.         
  37.           one=value%10;
  38.     two=(value%100)/10;
  39.     three=value/100;
  40.     P0=sz[one];
  41.                 DU=1;
  42.                 DU=0;
  43.                 P0=0x7f;
  44.                 WE=1;
  45.                 WE=0;
  46.                 delay(2);               

  47.                 P0=sz[two];        
  48.                 DU=1;
  49.                 DU=0;
  50.                 P0=0xbf;
  51.                 WE=1;
  52.                 WE=0;
  53.                 delay(2);

  54.                 P0=sz[three];        
  55.                 DU=1;
  56.                 DU=0;
  57.                 P0=0xdf;
  58.                 WE=1;
  59.                 WE=0;
  60.                 delay(2);
  61.         
  62. }
  63.         }
  64. void Uart() interrupt 4
  65. {
  66.         if(RI==1)
  67.         {
  68.                         RI=0;
  69. //                 date[num]=SBUF;
  70. //                 num++;
  71. //                 if(num==7)
  72. //                 {
  73. //                  num=0;
  74. //                  }
  75.                  value=SBUF;
  76.          
  77.         }
  78. }
复制代码

串口发送的内容

串口发送的内容
回复

使用道具 举报

ID:101620 发表于 2019-4-10 19:54 | 显示全部楼层
提供一个思路,因为串口输出过来的都是有空格来断开的,当你需要这些数据的时候,你可以在你获取数据的程序里按照顺序以空格来判断这个数据是不是完整的,类似于C语言的那个提取字符串。
回复

使用道具 举报

ID:337069 发表于 2019-4-10 23:14 | 显示全部楼层
如果按你写的程序,当串口接收数据是0xe7,这样可以的.
如果按你电脑上的数据是三个十六进制数,程序可以用数组接收,
注意电脑收到是6个数据0x32 0x20 0x33 0x20 0x31 0x20
回复

使用道具 举报

ID:509060 发表于 2019-4-11 08:52 | 显示全部楼层
串口接受的一般是字符串发送,发送的是ASCII码,需要转换成自己需要的数字,去掉空格,用数组储存起来比较合适!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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