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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機串口通信-字符數組

作者:佚名   來源:本站原創   點擊數:  更新時間:2009年12月08日   【字體:

     在上一篇文章中可以看到,利用一個一個字符來判斷命令和通信協議不但很麻煩,而且有很大的缺陷,比如:輸入一個字符串其中只要有命令就會執行,而且上一篇的程序不可以處理一些特殊的字符串(停止命令是end,但是如果是輸入一個en的話,就會卡在while(RI==0),這個語句里,沒有下一個字符的輸入,RI在上面的程序被置為0,就會一直在while語句里出不來。如果一開始就置為1的話,就接受不到下一個字符了)

         所以我又重新開始考慮用字符數組處理命令,再用上個程序之前其實最初是用字符數組來做這個程序的,但是一直都有一些問題沒有解決;昨天我用c++來做了一個字符接收和判讀函數,然后用keil做一個同樣的程序發現還是用一些同的:

 

    C語言和c++里面定義字符數組用兩種形式:

例如(1)char t[6]="start";這個字符串的長度是5但是系統默認這種定義方法在字符串的后面加上一個\0;所以就要用一個長度位六位的字符數組來存放,如果定義5位(t[5])編譯器就會報出一個錯誤,說數組存放不了;

           (2)char a[5]={'s','t','a','r','t'}     這樣定義可以省去系統默認的\0,但是可以明顯發現,這種定義方法對于長的字符串的定義并不實用;

   keil里定義數組:

     上面的第二種方法同樣可以定義,不過第一種方法就會用不同了:

   定義一個start數組:char t[5]="start";   明顯發現在keil里面編譯器沒有給字符數組一個默認的\0,這就是這兩個編譯器的不同了;

         在有的情況下,這個不同是致命的:

#include<reg52.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
uchar t[5]="start";
int i;uchar a[5];
void main()
{
TMOD=0x20;
TH1=0xfd;TL1=0xfd;
SM1=1;SM0=0;
REN=1;ET1=1;TR1=1;ES=1;
while(1)
{
for(i=0;i<5;)   //輸入到數組里
  {RI=0;
  while(RI==0);                        //如果在此處定義的字符串的長度位6位的話,就會一直等待第六個輸入,造成程序無法執行
  a[i]=SBUF;i++;
  }
  for(i=0;i<5;)   //通過單片機輸出到電腦
  {
  SBUF=a[i];
  while(TI==0);i++;TI=0;
  }
}
}  

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲视频在线一区 | 九九99久久 | 亚洲 欧美 另类 综合 偷拍 | 日韩午夜一区二区三区 | 美女黄色在线观看 | 中文字幕亚洲一区二区三区 | 精品三区 | 午夜精品一区二区三区三上悠亚 | 国产午夜精品视频 | 精品国产一区二区在线 | 国产精品久久久久久久久久久久久久 | 2018国产大陆天天弄 | 国产一区中文字幕 | 国产成人久久精品一区二区三区 | 国产96在线 | 曰批视频在线观看 | 欧美午夜精品 | 亚洲国产在 | 中文字幕一区二区三区在线乱码 | 久久国产精品72免费观看 | 伊人网站 | 久久成人免费视频 | 精品久久国产老人久久综合 | 亚洲午夜电影 | .国产精品成人自产拍在线观看6 | 黑人精品欧美一区二区蜜桃 | 亚洲国产黄 | 在线资源视频 | 久久综合av | 亚洲精品自拍视频 | 精品欧美一区二区三区久久久 | 亚洲国产精品激情在线观看 | 在线视频中文字幕 | av大片| 午夜影院在线播放 | 成人欧美一区二区三区在线观看 | 九九九久久国产免费 | 国产精品久久久久久久久久久久久 | 久久国产电影 | 91精品国产91久久久久青草 | 亚洲成人av在线播放 |