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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機比較兩數是否相同(接受串口數據)

[復制鏈接]
跳轉到指定樓層
樓主
ID:426161 發表于 2018-11-14 09:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include<reg51.h>
  2. #include<string.h> //后面有一個比較函數
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. bit  UART_Flag=0;  //定義串口接收標志位
  6. uchar str[50];   //定義一數組
  7. uchar length=0;  //數組長度從0開始
  8. void init() //初始化uart
  9. {
  10.   
  11.   
  12.    TMOD=0X20;  //定時器1定時器方式  工作模式2,可自動重載的8位計數器常把定時/計數器1以模式2作為串行口波特率發生器
  13. SCON=0X50; //選擇工作模式1使能接收,允許發送,允許接收
  14.     EA=1; //開總中斷
  15. ES=1;  //打開串口中斷
  16. ET1=0;  //打開定時器中斷
  17.        PCON=0X80; //8位自動重載,波特率加倍
  18. TH1=0XFF;  //用22.1184 mhz波特率
  19. TL1=0XFF;
  20.    
  21. TR1=1; //打開中時器
  22.    

  23. }
  24. void UART_Putch(uchar dat)  //輸出一個字符
  25. {
  26. SBUF=dat; //把數據送給sbuf緩存器中
  27. while(TI!=1);//發送標志位 TI如果發送了為1,沒發送為0,沒發送等待,到了退出循環
  28. TI=0;  //到了,TI清為0
  29. }
  30. void init1() interrupt 4  //uart中斷 ,4為串口中斷
  31. {

  32.   if(RI==1)  //收到數據
  33.   {
  34.      uchar m=SBUF; //m為計算機發送給串口的數據,例,open //總體思想是,計算機通知串口,我要發數據了
  35.   RI=0;   //收到清0
  36.   
  37.      if(m=='\r')   //判斷m這位數據有無\r
  38.        {
  39.        UART_Putch('\r');  //回車
  40.        UART_Putch('\n');  // 換行
  41.     str[length]='\0'; //數據最后位加0標志位表示發完了數據
  42.     UART_Flag=1;  // 傳 完 標 志 位
  43.         }
  44.    else if(m=='\n')
  45.   {

  46.   }
  47.      else if(m=='\b')//b表退格 //下面幾句表刪鋤
  48.        {
  49.          UART_Putch('\b');
  50.     UART_Putch('');
  51.    UART_Putch('\b');
  52.    length=length-1; //刪鋤了后總長度減一
  53.        }
  54.   
  55.    
  56.      else
  57.      {
  58.      str[length++]=m; //比如m為open,先傳0后傳p,length加一
  59.   UART_Putch(m);    //輸出 比如open
  60.      }
  61.   
  62. }
  63. }
  64. void check(char *str)  //計算機發一數據,我來檢查,
  65. {
  66.    if( strcmp("open",str)==0 ) //比較兩數是否相同,相同為0,不同為1 //要加string.h頭文件
  67.    {
  68.        UART_Putch('o'); //計算機中寫入open我回復ok
  69.     UART_Putch('k');
  70.        UART_Putch('\r'); //回車是跑到這一行的最前      UART_Putch('\n'); //換行是跳到下一行
  71.   }
  72.    else if( strcmp("close",str)==0 )
  73.    {
  74.        UART_Putch('o');
  75.     UART_Putch('k');
  76.        UART_Putch('\r');
  77.        UART_Putch('\n');
  78.   
  79.   
  80.    }
  81.    else    //否則出錯
  82.    {
  83.        UART_Putch('e');
  84.     UART_Putch('r');
  85.        UART_Putch('r');
  86.        UART_Putch('o');
  87.        UART_Putch('r');
  88.        UART_Putch('!');
  89.     UART_Putch('\r');
  90.     UART_Putch('\n');
  91.    }

  92. }
  93. void main()
  94. {
  95.   init();
  96.   while(1)
  97.   {
  98.     if(UART_Flag==1)  //接收標志位表示接收完成
  99.      {
  100.      check(str);//檢查
  101.      length=0; //長度清0
  102.      UART_Flag=0;//標志位清0
  103.   }

  104.   }

  105. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:95613 發表于 2021-9-13 15:50 | 只看該作者
后面函數在哪啊
回復

使用道具 舉報

板凳
ID:965912 發表于 2021-9-14 00:09 | 只看該作者
沒有仿真學習下嗎
回復

使用道具 舉報

地板
ID:875095 發表于 2021-9-15 00:11 | 只看該作者
看著好累,就不能直接寫:
void serial_out(char* pchar)
{
   while(*pchar)
    {
       SBUF = *pchar;
       while(TI == 0);
       TI = 0;
    }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂久久 | 精品国产乱码久久久久久88av | 日韩欧美中文 | 古装人性做爰av网站 | 日韩一区二区福利 | 国内精品视频在线观看 | 美女福利网站 | 国产二区三区 | 在线观看中文字幕视频 | 人人鲁人人莫人人爱精品 | 国产美女精品视频 | 成人在线精品 | 午夜色播 | 亚洲精品一区国语对白 | 日韩毛片中文字幕 | 久久久久久高清 | 亚洲成人精品国产 | 国产伦精品一区二区三区高清 | 国产精品日韩在线观看一区二区 | 成人久久18免费网站麻豆 | 国产成人在线播放 | 国产亚洲成av人片在线观看桃 | 欧美福利在线 | 久久新视频 | 亚洲www | 正在播放国产精品 | 国产精华一区 | 亚洲一区二区三区免费观看 | 久久一区二区三区四区 | 在线国产一区二区三区 | 亚洲天堂影院 | 精品久久久久久 | 无人区国产成人久久三区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 亚洲精品在线视频 | 日韩视频精品在线 | 夜夜摸夜夜操 | 日韩在线观看网站 | 日美女逼逼 | 91精品久久久久久久久 | 在线亚洲免费视频 |