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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:876099 發表于 2021-6-3 16:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想問一下怎么寫單片機的串口才能讓打開串口一瞬間就可以接收到數據,大牛見笑了
  1. /**************************************************************************************
  2. *                              串口通信實驗                                                                                                  *
  3. 實現現象:下載程序后打開串口調試助手,將波特率設置為4800,選擇發送的數據就可以顯示
  4.                         在串口助手上。
  5. 注意事項:無。                                                                                                                                                                  
  6. ***************************************************************************************/

  7. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

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


  10. /*******************************************************************************
  11. * 函數名         :UsartInit()
  12. * 函數功能                   :設置串口
  13. * 輸入           : 無
  14. * 輸出                  : 無
  15. *******************************************************************************/
  16. void UsartInit()
  17. {
  18.         SCON=0X50;                        //設置為工作方式1
  19.         TMOD=0X20;                        //設置計數器工作方式2
  20.         PCON=0X80;                        //波特率加倍
  21.         TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
  22.         TL1=0XF3;
  23.         ES=1;                                                //打開接收中斷
  24.         EA=1;                                                //打開總中斷
  25.         TR1=1;                                        //打開計數器
  26. }

  27. /*******************************************************************************
  28. * 函 數 名       : main
  29. * 函數功能                 : 主函數
  30. * 輸    入       : 無
  31. * 輸    出             : 無
  32. *******************************************************************************/
  33. void main()
  34. {        
  35.         UsartInit();  //        串口初始化
  36.         while(1);               
  37. }

  38. /*******************************************************************************
  39. * 函數名         : Usart() interrupt 4
  40. * 函數功能                  : 串口通信中斷函數
  41. * 輸入           : 無
  42. * 輸出                  : 無
  43. *******************************************************************************/
  44. void Usart() interrupt 4
  45. {
  46. //u8 receiveData;
  47. //receiveData=SBUF;//出去接收到的數據
  48. //RI = 0;//清除接收中斷標志位
  49.     SBUF=0xf0;
  50.          while(TI==0);                         //等待發送數據完成
  51.          TI=0;                                                 //清除發送完成標志位
  52. }
復制代碼
我這樣寫的,然后我打開串行助手第一個收到的數據是00,然后就沒有了,我隨便發送個數據就收到很多f0,
希望大神幫我解答一下謝謝


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

使用道具 舉報

沙發
ID:876099 發表于 2021-6-3 17:51 | 只看該作者
有沒有大牛幫忙解決一下,感謝感謝,,急急急!!!
回復

使用道具 舉報

板凳
ID:241273 發表于 2021-6-3 19:53 | 只看該作者
中斷接收函數里  SUBF     就是你中斷接收的數據    那個不是用來賦值的       直接弄一個變量接收它的值就行
回復

使用道具 舉報

地板
ID:94031 發表于 2021-6-3 20:09 | 只看該作者
接收是硬件緩存器接收完成,發起中斷軟件在中斷里接收,發送你就放在main循環里,你這樣子無法發送。
回復

使用道具 舉報

5#
ID:876099 發表于 2021-6-3 21:11 | 只看該作者
zjy007 發表于 2021-6-3 19:53
中斷接收函數里  SUBF     就是你中斷接收的數據    那個不是用來賦值的       直接弄一個變量接收它的值就 ...

好的我去改一下試試
回復

使用道具 舉報

6#
ID:876099 發表于 2021-6-3 21:12 | 只看該作者
xuyaqi 發表于 2021-6-3 20:09
接收是硬件緩存器接收完成,發起中斷軟件在中斷里接收,發送你就放在main循環里,你這樣子無法發送。

能說的詳細一點嗎,因為串行通信這塊我平時解除的少算是的小白謝謝
回復

使用道具 舉報

7#
ID:777356 發表于 2021-6-3 23:01 | 只看該作者
首先,你串口中斷里面這一行代碼不能注釋掉
//RI = 0;//清除接收中斷標志位
其次,不推薦你在串口里重新發數據,數據量少還沒多大的問題,一旦數據量比較大就問題就比較嚴重
#include<reg52.h>
#define uchar unsigned char
sbit p=P1^0;

uchar i=0;

void delay(uchar a)
{
        uchar b;
        for(a;a>0;a--)
                for(b=124;b>0;b--);
}

void csh()
{
        SCON =0x50; // SCON: 模式 1, 8-bit UART, 使能接收
        TMOD |= 0x20; // TMOD:timer 1, mode 2, 8-bit 重裝
        TH1 =TL1= 0xFD; // TH1: 重裝值9600 波特率 晶振 11.0592MHz
        TR1 =1; // TR1: timer 1 打開
        EA = 1; //打開總中斷
        ES = 1; //打開串口中斷
        PCON=0;
}

void main()
{
        csh();
        while(1);
}

void a() interrupt 4
{
        uchar k=0;
        while(RI==1)
        {
                RI=0;
                k=SBUF;
                i=k;
                SBUF=k;
                while(TI==0);
                TI=0;
                delay(200);               
        }
        if(i=='a')
        p=1;
        else
        p=0;
}
上面是在中斷里面發送數據量不大就可以,建議還是放在外面
#include<reg52.h>
#define uchar unsigned char
sbit p=P1^0;

uchar i=0;

void delay(uchar a)
{
        uchar b;
        for(a;a>0;a--)
                for(b=124;b>0;b--);
}

void csh()
{
        SCON =0x50; // SCON: 模式 1, 8-bit UART, 使能接收
        TMOD |= 0x20; // TMOD:timer 1, mode 2, 8-bit 重裝
        TH1 =TL1= 0xFD; // TH1: 重裝值9600 波特率 晶振 11.0592MHz
        TR1 =1; // TR1: timer 1 打開
        EA = 1; //打開總中斷
        ES = 1; //打開串口中斷
        PCON=0;
}

void main()
{
        csh();
        while(1)
        {
                if(i == 1)
                {
                        i = 0;
                        SBUF=k;
                        while(TI==0);
                        TI=0;
                }
        }
}

void a() interrupt 4
{
        uchar k=0;
        while(RI==1)
        {
                RI=0;
                i=1;
                k=SBUF;               
        }

}

回復

使用道具 舉報

8#
ID:883031 發表于 2021-6-4 12:06 | 只看該作者
這樣是沒法觸發中斷的。
回復

使用道具 舉報

9#
ID:238019 發表于 2021-6-4 12:51 | 只看該作者
接收放在中斷里,接收放在主程序里
回復

使用道具 舉報

10#
ID:932412 發表于 2021-6-4 20:45 | 只看該作者
其實如果不是很明白的話,建議:一般官網都有相關例程和對應手冊,根據例程先調通,不了解就看手冊,手冊里有寄存器和時序還有硬件工作原理,這樣你可以更快學習。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线不卡 | 精国产品一区二区三区 | 欧美bondage紧缚视频 | 91精品国产91久久久久久最新 | 一区二区三区视频在线免费观看 | 国产精品久久久乱弄 | 国产蜜臀97一区二区三区 | 国产精品一区二区久久久久 | 午夜视频在线 | 国产成人免费一区二区60岁 | 国产一区 | 亚洲色在线视频 | 久久精彩视频 | 亚洲毛片一区二区 | 人人天天操 | 理论片午午伦夜理片影院 | 91精品国产综合久久久密闭 | 欧美精品一区二区在线观看 | 成人在线一级片 | 天天射天天操天天干 | 久久成人综合 | 欧美不卡在线 | 中文字幕av第一页 | 天堂一区二区三区 | 午夜视频在线视频 | 日韩欧美专区 | 日韩国产在线观看 | 亚洲成人一区二区在线 | 欧美精产国品一二三区 | 亚洲综合视频 | 一二三四在线视频观看社区 | 国产www成人 | 麻豆精品一区二区三区在线观看 | 免费精品在线视频 | xxxxx免费视频 | 国产一区二区三区亚洲 | 999久久久 | 欧美男人天堂 | 亚洲精品国产成人 | 欧美黑人一区二区三区 | 国产欧美一区二区三区在线看 |