久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4140|回復: 7
打印 上一主題 下一主題
收起左側

串口數組賦值錯誤

[復制鏈接]
跳轉到指定樓層
樓主
10黑幣
程序代碼如下:

  1. #include<reg52.h>
  2. #include<stdio.h> //打印到串口函數
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar date_zi[4][10];        //存放接收到的數據
  6. uint i_index=0;        //接收到的字符個數
  7. uint i=0;        //i字符用于循環
  8. unsigned int xia = 0;        //用于保存到數據的下標
  9. void fh_zi(unsigned int a)        //返回字符到串口
  10. {
  11. ES=0;
  12. TI=0;
  13. SBUF=a;
  14. while(!TI);
  15. TI=1;
  16. ES=1;
  17. }
  18. void init()
  19. {
  20. TMOD=0x20;
  21. TH1=0xfd;
  22. TL1=0Xfd;
  23. //TH0=(65536-45872)/256;
  24. //TL0=(65536-45872)%256;
  25. TR1=1;
  26. SM0=0;
  27. SM1=1;
  28. REN=1;
  29. EA=1;
  30. ES=1;
  31. }
  32. void main()
  33. {
  34. i_index=0;
  35. xia=2;        
  36. init();

  37. while(1);
  38. }
  39. void ser() interrupt 4 //串口
  40. {
  41. if(RI == 1)
  42. {
  43. RI=0;
  44. date_zi[xia][i_index] = SBUF;
  45. i_index++;
  46. if(i_index>10)        //接受完10個字符后顯示數組所有內容
  47. {
  48. i_index=0;
  49. for(i=0;i<11;i++)        //顯示數組中所有內容
  50. fh_zi(date_zi[0][i]);
  51. for(i=0;i<11;i++)
  52. fh_zi(date_zi[1][i]);
  53. for(i=0;i<11;i++)
  54. fh_zi(date_zi[2][i]);
  55. for(i=0;i<11;i++)
  56. fh_zi(date_zi[3][i]);
  57. }


  58. }
  59. }
復制代碼

以16進制發送【03 55 aa 01 01 00 0a 07 03 02 ff】11個數據后,總是會多出03,ff這兩個首尾字符,這是為什么?
我這個代碼哪里錯誤了?


最佳答案

查看完整內容

void ser() interrupt 4 //串口 { if(RI == 1) { RI=0; date_zi[xia] = SBUF; i_index++; if(i_index==10) //這里改等于10,不然將會寫入到date_zi[xia][10]中,數組訪問溢出!!! { i_index=0; for(i=0; i
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:97438 發表于 2016-9-12 01:03 | 只看該作者
void ser() interrupt 4 //串口
{
        if(RI == 1)
        {
                RI=0;
                date_zi[xia][i_index] = SBUF;
                i_index++;
                if(i_index==10)        //這里改等于10,不然將會寫入到date_zi[xia][10]中,數組訪問溢出!!!
                {
                        i_index=0;
                        for(i=0; i<10; i++)      //這里的11改成10,不然同樣是數組訪問溢出的問題
                                fh_zi(date_zi[0][i]);
                        for(i=0; i<10; i++)
                                fh_zi(date_zi[1][i]);
                        for(i=0; i<10; i++)
                                fh_zi(date_zi[2][i]);
                        for(i=0; i<10; i++)
                                fh_zi(date_zi[3][i]);
                }


        }
}
回復

使用道具 舉報

板凳
ID:134543 發表于 2016-9-12 01:27 | 只看該作者
沒有人知道?
回復

使用道具 舉報

地板
ID:79358 發表于 2016-9-12 11:09 | 只看該作者
應該是程序問題,判斷接收頭和尾的時候多裝入了一次
回復

使用道具 舉報

5#
ID:7485 發表于 2016-9-12 11:13 | 只看該作者
串口寄存器是8位的!unsigned char。
回復

使用道具 舉報

6#
ID:97438 發表于 2016-9-12 14:43 | 只看該作者
樓主你這個小程序問題多多。。。
回復

使用道具 舉報

7#
ID:97438 發表于 2016-9-12 14:44 | 只看該作者
ahshmj 發表于 2016-9-12 11:13
串口寄存器是8位的!unsigned char。

有這個錯誤,但不是致命錯誤
回復

使用道具 舉報

8#
ID:134543 發表于 2016-9-13 23:19 | 只看該作者
程序錯誤如下:
void fh_zi(unsigned int a)        //返回字符到串口
{
ES=0;
//TI=0;   //刪除
SBUF=a;
while(!TI);
TI=0;   //TI值0
ES=1;
}
以及串口接收函數中:
if(i_index==10)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久国产一区二区三区 | 91资源在线 | 一级黄色裸片 | www亚洲一区 | 亚洲欧美综合网 | 麻豆一区一区三区四区 | 精品1区2区3区4区 | 九久久| 欧美国产日韩在线 | 97精品超碰一区二区三区 | 一区二区精品 | 成人在线视频一区二区三区 | 久草网视频| 草草视频在线观看 | 久操国产 | h视频免费在线观看 | 日韩欧美在线免费观看视频 | 中文字幕二区 | 一级午夜aaa免费看三区 | 久久精品无码一区二区三区 | 成人国产网站 | 亚洲国产成人久久久 | 成人免费大片黄在线播放 | 久草成人| 欧美一区二区三区在线 | 二区三区视频 | 久久网站免费视频 | 久久久久av| 欧美精品在欧美一区二区少妇 | 欧美视频在线播放 | 91免费在线| 日本在线视频中文字幕 | 99免费视频 | 一区二区中文 | 国产一区二区影院 | 日韩一区二区在线播放 | 992tv人人草 久久精品超碰 | 狠狠狠色丁香婷婷综合久久五月 | 免费观看羞羞视频网站 | 免费看黄色小视频 | 日本免费在线看 |