找回密码
 立即注册
查看: 373|回复: 6

串口助手发HEX给单片机 单片机返回总是少第一个字节

[复制链接]
  • TA的每日心情
    奋斗
    2024-2-8 07:37
  • 签到天数: 44 天

    [LV.5]常住居民I

    9

    主题

    32

    回帖

    349

    积分

    中级会员

    积分
    349
    发表于 2023-12-5 19:49:08 | 显示全部楼层 |阅读模式
            STC8G1K08


    /*------------初始化串口---------------------*/
                  void InitUart(void )
                  {
                  SCON=0X50;                         //8位数据,可变波特率
                  AUXR|=0x01;                        //串口1选择定时器2为波特率发生器
                  AUXR|=0X04;                        //定时器2时钟为Fosc,即1T
                  T2L=0XE0;                          //设置定时器处置  110592》9600
                  T2H=0XFE;                          //设置定时器处置  110592》9600
                  AUXR|=0X10;                        //启动定时器2
                  TI=1;
                  ES=1;                              //
                  EA=1;
                  }
    /*--------UART中断服务程序---串口4接收触摸屏数据---*/
                  void Uart() interrupt 4 using 1
                  {
                   if(RI)
                   {
                    Receivebuff=SBUF;             //数组下标位置的数据等于SBUF
                    i++;
                    if(i==24)                        //触摸屏结束码    FRAMELENGTH
                    {
                     Flag=1;                             //
                                    }
                    RI=0;                            //
                   }
                                }                    
    /****************************************************/
                   void Send(uchar temp)
                   {
                    unsigned serial;
                    serial=temp;
                    SBUF=(uchar)temp;
                    while(TI!=1);
                    TI=0;
                   }                                                
    /********************************************/
                                void main()
                                {
                                P0M0 = 0x00;
                                P0M1 = 0x00;
                                P1M0 = 0x00;
                                P1M1 = 0x00;
                                P2M0 = 0x00;
                                P2M1 = 0x00;
                                P3M0 = 0x00;
                                P3M1 = 0x00;
                                P4M0 = 0x00;
                                P4M1 = 0x00;
                                P5M0 = 0x00;
                                P5M1 = 0x00;
                                ss=0;
                                InitUart();                        //初始化串口
                  P_SW1=0x00;                        //RXD_2/P3.0, TXD_2/P3.1
                //  delay10ms(100);
                //  printf("0XFF,0XFF,0XFF");          //向串口屏发启动信号
                                i=0;
                                while (1)
                                    {
                                    if(Flag==1)
                                    {
                                     Flag=0;
                                     for(aa=0;aa<12;aa++)            //12个字
                                     {
                                         Avalue=Receivebuff[ss];         //字节前半部分
                                         Send(Avalue);
                                         ss++;                           //地址加一
                                         Bvalue=Receivebuff[ss];         //字节后半部分
                                         Send(Bvalue);
                                         ss++;
                                         displayGB2312(Avalue,Bvalue);   //字库芯片读16个字节点阵代码
                                         OUT4=~OUT4;   
                      }   
                                     }
                                    }
                             }
    1.png
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-8 07:37
  • 签到天数: 44 天

    [LV.5]常住居民I

    9

    主题

    32

    回帖

    349

    积分

    中级会员

    积分
    349
     楼主| 发表于 2023-12-5 20:28:47 | 显示全部楼层

    上图加数组查表下标

    上图加数组查表下标


    上图加数组查表下标地址返回
    串口助手少接收到第一个字节00

    下图加数组查表下标地址返回
    串口助手少接收到第一个数组字符BF

    点评

    zhp
    因为你的第一个数据本来就没有正确发送 发送代码要这样修改  详情 回复 发表于 2023-12-5 22:38
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    719

    回帖

    2564

    积分

    超级版主

    积分
    2564
    发表于 2023-12-5 22:38:39 | 显示全部楼层
    本帖最后由 zhp 于 2023-12-5 22:42 编辑
    caishifu 发表于 2023-12-5 20:28
    上图加数组查表下标地址返回
    串口助手少接收到第一个字节00

    因为你的第一个数据本来就没有正确发送
    发送代码要这样修改
    1. void Send(uchar temp)
    2. {
    3.     unsigned serial;
    4.     serial=temp;
    5.     while(TI!=1);
    6.     TI=0;
    7.     SBUF=(uchar)temp;
    8. }                                                
    复制代码

    不过建议串口发送也使用串口中断控制,否则会频繁进入串口中断
    参考代码
    1. #include "reg51.h"
    2. #include "intrins.h"
    3. #define FOSC        11059200UL
    4. #define BRT         (65536 - FOSC / 115200 / 4)
    5. sfr     AUXR    =   0x8e;
    6. sfr     T2H     =   0xd6;
    7. sfr     T2L     =   0xd7;
    8. sfr     P0M1    =   0x93;
    9. sfr     P0M0    =   0x94;
    10. sfr     P1M1    =   0x91;
    11. sfr     P1M0    =   0x92;
    12. sfr     P2M1    =   0x95;
    13. sfr     P2M0    =   0x96;
    14. sfr     P3M1    =   0xb1;
    15. sfr     P3M0    =   0xb2;
    16. sfr     P4M1    =   0xb3;
    17. sfr     P4M0    =   0xb4;
    18. sfr     P5M1    =   0xc9;
    19. sfr     P5M0    =   0xca;
    20. bit busy;
    21. char wptr;
    22. char rptr;
    23. char buffer[16];
    24. void UartIsr() interrupt 4
    25. {
    26.     if (TI)
    27.     {
    28.         TI = 0;
    29.         busy = 0;
    30.     }
    31.     if (RI)
    32.     {
    33.         RI = 0;
    34.         buffer[wptr++] = SBUF;
    35.         wptr &= 0x0f;
    36.     }
    37. }
    38. void UartInit()
    39. {
    40.     SCON = 0x50;
    41.     T2L = BRT;
    42.     T2H = BRT >> 8;
    43.     AUXR = 0x15;
    44.     wptr = 0x00;
    45.     rptr = 0x00;
    46.     busy = 0;
    47. }
    48. void UartSend(char dat)
    49. {
    50.     while (busy);
    51.     busy = 1;
    52.     SBUF = dat;
    53. }
    54. void UartSendStr(char *p)
    55. {
    56.     while (*p)
    57.     {
    58.         UartSend(*p++);
    59.     }
    60. }
    61. void main()
    62. {
    63.     P0M0 = 0x00;
    64.     P0M1 = 0x00;
    65.     P1M0 = 0x00;
    66.     P1M1 = 0x00;
    67.     P2M0 = 0x00;
    68.     P2M1 = 0x00;
    69.     P3M0 = 0x00;
    70.     P3M1 = 0x00;
    71.     P4M0 = 0x00;
    72.     P4M1 = 0x00;
    73.     P5M0 = 0x00;
    74.     P5M1 = 0x00;
    75.     UartInit();
    76.     ES = 1;
    77.     EA = 1;
    78.     UartSendStr("Uart Test !\r\n");
    79.     while (1)
    80.     {
    81.         if (rptr != wptr)
    82.         {
    83.             UartSend(buffer[rptr++]);
    84.             rptr &= 0x0f;
    85.         }
    86.     }
    87. }
    复制代码



    回复 支持 1 反对 0 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3018

    回帖

    6803

    积分

    超级版主

    积分
    6803
    发表于 2023-12-5 22:44:03 | 显示全部楼层
    请参考STC官方例程。
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-8 07:37
  • 签到天数: 44 天

    [LV.5]常住居民I

    9

    主题

    32

    回帖

    349

    积分

    中级会员

    积分
    349
     楼主| 发表于 2023-12-10 16:45:43 | 显示全部楼层
    用了串口触摸屏 #include     "stdio.h"
    printf函数 出现的异常
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9441

    回帖

    1万

    积分

    管理员

    积分
    13981
    发表于 2023-12-10 18:03:39 | 显示全部楼层
    用仿真功能来调试,查你的程序错在哪
    截图202312101802299661.jpg

    截图202312101803258008.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9441

    回帖

    1万

    积分

    管理员

    积分
    13981
    发表于 2023-12-10 18:06:18 | 显示全部楼层
    回复 支持 1 反对 0 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-15 22:42 , Processed in 0.071464 second(s), 59 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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