找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串口通信程序遇到问题!请高手指点

查看数: 1308 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-8-16 15:53

正文摘要:

我想通过按键控制单片机发送数据到串口,每按一次按键变量r_cut加1,CS是前面五个数据的和,只取后两位。实际按键后。r_cur,CS 两个变量的数值有变化,但是串口接到的数据都是固定的没有变化。请大师指一下。谢谢。 ...

回复

ID:230975 发表于 2019-8-17 10:15
谢谢师傅指点
ID:230975 发表于 2019-8-17 09:46
是的,定义错误。谢谢,不能用CODE.谢谢指教。我调试一下。
十分感谢。
ID:213173 发表于 2019-8-17 07:48
楼主数组定义错误。数组成员只能是常量,不可以是变量或表达式。ROM中定义的数组不可更改,RAM中定义的数组才可以更改。串口只发不收不需要开接收中断。1T的MCU延时程序要修正参数。程序修改如下:
  1. #include <STC15F2K60S2.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key1=P3^2;
  5. sbit key2=P3^3;

  6. uchar a,i,flag1,r_cut,cs;
  7. //uchar code red[6]={0xc5,0xaa,0xa4,&r_cut,0x01,&cs};
  8. uchar data red[6]={0xc5,0xaa,0xa4,0x00,0x01,0x00};

  9. void delay(uint);

  10. void init()
  11. {
  12.         PCON &= 0x7F;               
  13.         SCON = 0x50;               
  14.         AUXR |= 0xC0;               
  15.         AUXR &= 0xFE;               
  16.         TMOD=0X22;
  17.         TH1=0xB8;
  18.         TL1=0xB8;
  19.         TR1=1;
  20. //        ET1=0;
  21. //        EA=1;
  22. //        ES=1;
  23.         P_SW1=0X40; //P3.6,P3.7
  24.         P3M0=0X00;
  25.         P3M1=0X00;
  26.         r_cut=0x0f;
  27.         a=10;
  28. }
  29. void delay(uint z)
  30. {
  31.         uint x,y;
  32.         for(x=z;x>0;x--)
  33.                 for(y=1150;y>0;y--);//1T/y=1150,12T/y=110
  34. }
  35. void scankey()
  36. {
  37.         if(key1==0)
  38.         {
  39.                 delay(10);
  40.                 if(key1==0)
  41.                 {
  42.                         a++;
  43.                         r_cut=a;
  44.                         red[3]=r_cut;
  45.                         cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;       
  46.                         red[5]=cs;
  47. //                        ES=0;
  48.                         for(i=0;i<6;i++)
  49.                         {
  50.                                 SBUF=red[i];
  51.                                 while(!TI);
  52.                                 TI=0;
  53.                                 //flag1=0;
  54.                         }
  55. //                        ES=1;
  56.                         while(!key1);
  57.                 }
  58.         }
  59.         if(key2==0)
  60.         {
  61.                 delay(10);
  62.                 if(key2==0)
  63.                 {
  64.                         a--;
  65.                         r_cut=a;
  66.                         red[3]=r_cut;
  67.                         cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;       
  68.                         red[5]=cs;
  69. //                        ES=0;
  70.                         for(i=0;i<6;i++)
  71.                         {
  72.                                 SBUF=red[i];
  73.                                 while(!TI);
  74.                                 TI=0;
  75.                         }
  76. //                        ES=1;
  77.                         while(!key2);
  78.                 }
  79.         }
  80. }
  81. void main()
  82. {
  83.         init();
  84.         while(1)
  85.         {
  86.                 scankey();
  87.         }
  88. }
  89. /*
  90. void ser() interrupt 4
  91. {
  92.         if (RI)
  93.         {
  94.                 RI=0;
  95.         }
  96.         else TI=0;
  97. }*/
复制代码


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

Powered by 单片机教程网

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