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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5337|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STC8G單片機串口通訊疑問,每次只能發(fā)送一個字節(jié)正確數(shù)據(jù)問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:782831 發(fā)表于 2020-7-16 10:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
STC8G單片機使用printf()函數(shù)發(fā)送數(shù)據(jù),出現(xiàn)錯亂現(xiàn)象:
void UartIsr() interrupt 4
{
        int d=0,e=1,f=2,g=3;
        if (RI)
                {
                        ES=0;
                        RI = 0;
                        printf("%d%d%d",e,f,g); //接收中斷后 回傳1 2 3
                          ES=1;
                }
}



只能收到e=1,后面的字節(jié)收不到;切換到HEX模式,則還是有錯誤:


31的asc碼是1,A6和FE明顯是錯誤顯示;


現(xiàn)在把發(fā)送分成3次,程序如下,但發(fā)現(xiàn)還是有錯誤:
void UartIsr() interrupt 4
{
        int d=0,e=1,f=2,g=3;
        if (RI)
                {
                        ES=0;
                        RI = 0;
                        printf("%d",e);
                        printf("%d",f);
                        printf("%d",g);
                          ES=1;
                }
}



非常奇怪,只能發(fā)送一個字節(jié)出去;


單片機選用型號是STC8G2K64S4,屬于1T單片機,晶振設(shè)置的是22.1184MHZ,波特率是19200,完整程序如下,跪求各路大神解惑,謝謝!
#include "reg51.h"
#include"stdio.h"
#include "intrins.h"


#define  CKSEL  (*(unsigned char volatile xdata *)0xfe00)           //時鐘相關(guān)寄存器地址
#define  CLKDIV  (*(unsigned char volatile xdata *)0xfe01)
#define  HIRCCR  (*(unsigned char volatile xdata *)0xfe02)
#define  XOSCCR  (*(unsigned char volatile xdata *)0xfe03)
#define  IRC32KCR  (*(unsigned char volatile xdata *)0xfe04)


sfr  P_SW2  =  0xba;   //特殊寄存器
sfr  AUXR  =  0x8e;
sfr  P0M1  =  0x93;//管腳配置寄存器地址 與通訊無關(guān)
sfr  P0M0  =  0x94;
sfr  P1M1  =  0x91;
sfr  P1M0  =  0x92;
sfr  P2M1  =  0x95;
sfr  P2M0  =  0x96;
sfr  P3M1  =  0xb1;
sfr  P3M0  =  0xb2;
sfr  P4M1  =  0xb3;
sfr  P4M0  =  0xb4;
sfr  P5M1  =  0xc9;
sfr  P5M0  =  0xca;


int K=0;


void UartInit()//串口初始化函數(shù)
{
PCON=0x00;                   //PCON=0X00 波特率不加倍         SMOD=0
SCON = 0x50;        //SM0=0 SM1=1 串口1模式1可變波特率  8位數(shù)據(jù)模式
TMOD = 0x20;          //定時器1模式2  8位自動重裝載模式
TL1 =0xDC;          //1T模式  22.1184MHZ晶振下  19200波特率
TH1 =0xDC;
IE=0x90;// 等同于EA=1;ES=1;
TCON=0x40;//等同于  TR1=1;
TI=1;
AUXR = 0x40;   //串口1模式0的波特率不加倍        選擇定時器1作為波特率發(fā)射器
}


void main()
{
P_SW2 = 0x80;//首先選擇內(nèi)部時鐘
CKSEL = 0x00;  // 選擇內(nèi)部 IRC (  默認(rèn) )   22.1184MHZ
//CLKDIV = 0x02;  // 時鐘 2 分頻
P_SW2 = 0x00;


UartInit();


while (1)
        {
                if(K==1)
                ;
                if(K==2)
                 ;
        }
}


void UartIsr() interrupt 4
{
        int d=0,e=1,f=2,g=3;
        if (RI)
                {
                        ES=0;
                        RI = 0;
                        printf("%d",e);
                        printf("%d",f);
                        printf("%d",g);
                          ES=1;
                }
}



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

使用道具 舉報

沙發(fā)
ID:804115 發(fā)表于 2020-7-16 13:23 | 只看該作者
兩個問題:
1. 你的串口發(fā)送如果選擇hex的話,就不能填1了吧,應(yīng)該填31吧!這個你再核對下。可以下載sscom試試。
2. 這個很重要:中斷中不能執(zhí)行耗時太長的任務(wù),否則會對整個系統(tǒng)造成影響。
你在串口中斷中調(diào)用printf就不行,因為printf太耗時了,如果你要做回環(huán)測試的話,將中斷收到的數(shù)據(jù)先放到一個全局變量的數(shù)組中暫時存起來,等退出中斷后,在大循環(huán)中判斷是否收到數(shù)據(jù),如果收到數(shù)據(jù),則將收到的數(shù)據(jù)用printf打印出來。這樣就不會出現(xiàn)只能收到1字節(jié)的問題了。如果你已經(jīng)這樣改了,還不能收到,那么就是你的中斷響應(yīng)太慢了,這時候就要降低波特率來降低中斷觸發(fā)的速度。

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:800866 發(fā)表于 2020-7-18 15:44 | 只看該作者
重定義 printf函數(shù)功能 ,即fputc函數(shù)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国精久久 | 日本久久一区二区三区 | 国产精品不卡 | 久久精品色欧美aⅴ一区二区 | 91最新在线视频 | www日韩 | www.日本在线观看 | 午夜免费观看 | 免费在线观看一区二区三区 | 亚洲精彩免费视频 | 国产精品色av | 91久久精品国产 | 久久久久久久一区二区三区 | 91精品国产麻豆 | 成人国产精品久久 | 久久三区| 久久人人爽人人爽人人片av免费 | 成人妇女免费播放久久久 | 精品欧美一区二区三区久久久 | 久久一及片 | 国产美女h视频 | 国产伦精品一区二区三区精品视频 | 狠狠爱综合 | 久久婷婷av| 99视频精品 | 欧美综合一区 | 羞羞的视频在线看 | 欧美日产国产成人免费图片 | 国产在线中文字幕 | www.久| 国产片一区二区三区 | 欧美片网站免费 | 亚洲色欲色欲www | 欧美视频成人 | 成人国产一区二区三区精品麻豆 | 久久久九九 | 国内91在线| 欧美视频区| 黄免费在线 | 国产乱码久久久 | 操操日 |