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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

想讓c51單片機串口實現加1計數

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

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

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

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

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

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

使用道具 舉報

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

使用道具 舉報

ID:213173 發表于 2020-5-25 15:53 | 顯示全部樓層
串口組手的發送和接收是分開的,沒有按接收到的數據再發送的選項。
你這樣寫不能保證發送完畢TI被清0。
    if(TI)
    {
           TI=0;
    }
要這樣寫才對
void Usart() interrupt 4
{
        u8 receiveData;
        RI=0;
        receiveData=SBUF;//保存接收到的數據
        SBUF=receiveData+1;//將接收到的數據+1返回上位機
        while(!TI);//等待發送完成
        TI=0;//清除發送完成標志位
}
回復

使用道具 舉報

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

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;



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

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

void Usart() interrupt 4
{
        
        u8 receiveData;
     
        if(RI)
        {
        RI=0;
        SBUF=receiveData+1;//將接收到的數據放入到發送寄存器
        }
        if(TI)
        {
        TI=0; //清除發送完成標志
         receiveData=SBUF;  //只要有發送,就把發送緩存區的數據賦值給接收數據
         RI=1; //這里添加用意:當你發送數據的時候,必須設置接收標志位,才可以觸發接收中斷
        }                                                
}
回復

使用道具 舉報

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

主要是我們師傅要我們實現通過串口通信按下計數這個要求
回復

使用道具 舉報

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

感謝您的幫助
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费观看网站 | 国产做a爱免费视频 | 欧美日韩在线一区二区三区 | 久久不射电影网 | 精品人伦一区二区三区蜜桃网站 | 97国产爽爽爽久久久 | 2020亚洲天堂 | 自拍视频国产 | 性国产丰满麻豆videosex | 日韩成人 | 国产自产21区 | 久久久久久久综合 | 久久久久久久久久久久久久av | 精品欧美乱码久久久久久 | 成人网av| 亚洲一区二区三区在线播放 | 欧美高清视频一区 | 欧美1区| 国产网站在线播放 | 在线视频一区二区三区 | 日本三级电影免费 | 国产免费高清 | 亚洲欧洲小视频 | 啪啪免费网 | 日本久久精品视频 | 91精品国产色综合久久不卡98 | 2018国产精品| 欧美激情视频一区二区三区在线播放 | 欧美一级在线免费观看 | 日本一道本视频 | 在线观看av网站 | 精品美女视频在线观看免费软件 | 人人操日日干 | 欧美精品一区二区三区在线播放 | 中文字幕在线一区 | www.jizzjizz | 91精品国产91久久久久久吃药 | 伊人热久久 | 国产99久久精品 | 久久久久久国产精品免费免费狐狸 | 免费看国产一级特黄aaaa大片 |