1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標(biāo)題: 想讓c51單片機(jī)串口實現(xiàn)加1計數(shù) [打印本頁]

作者: 樹先生37    時間: 2020-5-25 14:47
標(biāo)題: 想讓c51單片機(jī)串口實現(xiàn)加1計數(shù)
  1. #include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

  2. typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
  3. typedef unsigned char u8;

  4. void UsartInit()
  5. {
  6.         SCON=0X50;                        //設(shè)置為工作方式1
  7.         TMOD=0X20;                        //設(shè)置計數(shù)器工作方式2
  8.         PCON=0X80;                        //波特率加倍
  9.         TH1=0XF3;                                //計數(shù)器初始值設(shè)置,注意波特率是4800的
  10.         TL1=0XF3;
  11.         ES=1;                                                //打開接收中斷
  12.         EA=1;                                                //打開總中斷
  13.         TR1=1;                                        //打開計數(shù)器
  14. }

  15. void main()
  16. {       
  17.         UsartInit();  //        串口初始化
  18.         while(1);               
  19. }

  20. void Usart() interrupt 4
  21. {
  22.         u8 receiveData;

  23.         receiveData=SBUF;//出去接收到的數(shù)據(jù)
  24.         if(RI)
  25.         {
  26.         RI=0;
  27.         SBUF=receiveData+1;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
  28.         }
  29.         if(TI)
  30.         {
  31.         TI=0;
  32.         }                                                 //清除發(fā)送完成標(biāo)志位
  33. }
復(fù)制代碼
我的代碼是這樣的我想讓subf實現(xiàn)每一次返回后都能加1,就是我第一次發(fā)送的是1,可以返回值是2,可以在不改變串口通信助手的情況下把第二次發(fā)送的改成2么?

作者: xuyaqi    時間: 2020-5-25 15:19
你的這個要求,需要改變串口通信助手軟件,否則實現(xiàn)不了。
作者: wulin    時間: 2020-5-25 15:53
串口組手的發(fā)送和接收是分開的,沒有按接收到的數(shù)據(jù)再發(fā)送的選項。
你這樣寫不能保證發(fā)送完畢TI被清0。
    if(TI)
    {
           TI=0;
    }
要這樣寫才對
void Usart() interrupt 4
{
        u8 receiveData;
        RI=0;
        receiveData=SBUF;//保存接收到的數(shù)據(jù)
        SBUF=receiveData+1;//將接收到的數(shù)據(jù)+1返回上位機(jī)
        while(!TI);//等待發(fā)送完成
        TI=0;//清除發(fā)送完成標(biāo)志位
}
作者: 996445591    時間: 2020-5-25 16:40
你的代碼有問題,最終可能會導(dǎo)致這樣的情況,你無論發(fā)送什么數(shù)字都串口都沒有反饋數(shù)據(jù)過來,或者你發(fā)送任何數(shù)字反饋都是1.  幫你代碼改動下, 你仿真看看
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

typedef unsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;



void UsartInit()
{
        SCON=0X50;                        //設(shè)置為工作方式1
        TMOD=0X20;                        //設(shè)置計數(shù)器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數(shù)器初始值設(shè)置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數(shù)器
}

void main()
{        
        UsartInit();  //        串口初始化
        while(1);               
}

void Usart() interrupt 4
{
        
        u8 receiveData;
     
        if(RI)
        {
        RI=0;
        SBUF=receiveData+1;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
        }
        if(TI)
        {
        TI=0; //清除發(fā)送完成標(biāo)志
         receiveData=SBUF;  //只要有發(fā)送,就把發(fā)送緩存區(qū)的數(shù)據(jù)賦值給接收數(shù)據(jù)
         RI=1; //這里添加用意:當(dāng)你發(fā)送數(shù)據(jù)的時候,必須設(shè)置接收標(biāo)志位,才可以觸發(fā)接收中斷
        }                                                
}
作者: 樹先生37    時間: 2020-5-26 09:39
xuyaqi 發(fā)表于 2020-5-25 15:19
你的這個要求,需要改變串口通信助手軟件,否則實現(xiàn)不了。

主要是我們師傅要我們實現(xiàn)通過串口通信按下計數(shù)這個要求
作者: 樹先生37    時間: 2020-5-26 09:42
wulin 發(fā)表于 2020-5-25 15:53
串口組手的發(fā)送和接收是分開的,沒有按接收到的數(shù)據(jù)再發(fā)送的選項。
你這樣寫不能保證發(fā)送完畢TI被清0。
  ...

感謝您的幫助
作者: 桀啊桀    時間: 2020-5-26 10:22
應(yīng)該不行吧,可以用labview啥的,自己做個簡單的串口通信上位機(jī)
作者: 隨風(fēng)飄遠(yuǎn)    時間: 2020-5-26 10:31
應(yīng)該是有一個計數(shù)的變量,有串口接收數(shù)據(jù)就計數(shù)加1吧
作者: xuyaqi    時間: 2020-5-26 11:36
樹先生37 發(fā)表于 2020-5-26 09:39
主要是我們師傅要我們實現(xiàn)通過串口通信按下計數(shù)這個要求

可以用兩個單片機(jī)完成師傅要。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1