找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3612|回復: 8
收起左側

想讓c51單片機串口實現(xiàn)加1計數(shù)

[復制鏈接]
ID:744346 發(fā)表于 2020-5-25 14:47 | 顯示全部樓層 |閱讀模式
  1. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

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

  4. void UsartInit()
  5. {
  6.         SCON=0X50;                        //設置為工作方式1
  7.         TMOD=0X20;                        //設置計數(shù)器工作方式2
  8.         PCON=0X80;                        //波特率加倍
  9.         TH1=0XF3;                                //計數(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ā)送完成標志位
  33. }
復制代碼
我的代碼是這樣的我想讓subf實現(xiàn)每一次返回后都能加1,就是我第一次發(fā)送的是1,可以返回值是2,可以在不改變串口通信助手的情況下把第二次發(fā)送的改成2么?
回復

使用道具 舉報

ID:94031 發(fā)表于 2020-5-25 15:19 | 顯示全部樓層
你的這個要求,需要改變串口通信助手軟件,否則實現(xiàn)不了。
回復

使用道具 舉報

ID:213173 發(fā)表于 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返回上位機
        while(!TI);//等待發(fā)送完成
        TI=0;//清除發(fā)送完成標志位
}
回復

使用道具 舉報

ID:298663 發(fā)表于 2020-5-25 16:40 | 顯示全部樓層
你的代碼有問題,最終可能會導致這樣的情況,你無論發(fā)送什么數(shù)字都串口都沒有反饋數(shù)據(jù)過來,或者你發(fā)送任何數(shù)字反饋都是1.  幫你代碼改動下, 你仿真看看
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

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



void UsartInit()
{
        SCON=0X50;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數(shù)器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數(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ā)送完成標志
         receiveData=SBUF;  //只要有發(fā)送,就把發(fā)送緩存區(qū)的數(shù)據(jù)賦值給接收數(shù)據(jù)
         RI=1; //這里添加用意:當你發(fā)送數(shù)據(jù)的時候,必須設置接收標志位,才可以觸發(fā)接收中斷
        }                                                
}
回復

使用道具 舉報

ID:744346 發(fā)表于 2020-5-26 09:39 | 顯示全部樓層
xuyaqi 發(fā)表于 2020-5-25 15:19
你的這個要求,需要改變串口通信助手軟件,否則實現(xiàn)不了。

主要是我們師傅要我們實現(xiàn)通過串口通信按下計數(shù)這個要求
回復

使用道具 舉報

ID:744346 發(fā)表于 2020-5-26 09:42 | 顯示全部樓層
wulin 發(fā)表于 2020-5-25 15:53
串口組手的發(fā)送和接收是分開的,沒有按接收到的數(shù)據(jù)再發(fā)送的選項。
你這樣寫不能保證發(fā)送完畢TI被清0。
  ...

感謝您的幫助
回復

使用道具 舉報

ID:456196 發(fā)表于 2020-5-26 10:22 | 顯示全部樓層
應該不行吧,可以用labview啥的,自己做個簡單的串口通信上位機
回復

使用道具 舉報

ID:319023 發(fā)表于 2020-5-26 10:31 | 顯示全部樓層
應該是有一個計數(shù)的變量,有串口接收數(shù)據(jù)就計數(shù)加1吧
回復

使用道具 舉報

ID:94031 發(fā)表于 2020-5-26 11:36 | 顯示全部樓層
樹先生37 發(fā)表于 2020-5-26 09:39
主要是我們師傅要我們實現(xiàn)通過串口通信按下計數(shù)這個要求

可以用兩個單片機完成師傅要。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表