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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)發(fā)送數(shù)據(jù)給電腦但有些數(shù)據(jù)沒有被再次發(fā)送

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 8 黑幣 回復(fù)本帖可獲得 2 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:803014 發(fā)表于 2020-12-29 15:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我用單片機(jī)的ADC測(cè)量電壓將測(cè)得值發(fā)送給電腦,00為標(biāo)志,收到的數(shù)據(jù)理應(yīng)是電壓高8位,電壓低8位,00,然后電壓高8位電壓低8位,00;這樣循環(huán),但實(shí)際收到的數(shù)據(jù)是電壓高8位電壓低8位,00;電壓低8位00;電壓低8位00;之后循環(huán),再也沒收到電壓高8位;有沒有大佬幫忙看看程序哪里出了問題。
**********************************************************************
void ADC0_ISR (void) interrupt 10
{
   static unsigned long accumulator = 0;     // accumulator for averaging
   static unsigned int measurements = 2048;  // measurement counter
//static unsigned int measurements = 4095;
   unsigned long result=0;
  // unsigned long mV;                         // measured voltage in mV
unsigned long mVH;
static unsigned int  RH;
   AD0INT = 0;                               // clear ADC0 conv. complete flag
   accumulator += ADC0;
   measurements--;
   if(measurements == 0)
   {
      measurements = 2048;
      result = accumulator / 2048;
      accumulator=0;
      // The 10-bit ADC value is averaged across 2048 measurements.
      // The measured voltage applied to P1.4 is then:
      //
      //                           Vref (mV)
      //   measurement (mV) =   --------------- * result (bits)
      //                       (2^12)-1 (bits)
   //   mV =  result * 2200 / 4095;
   mV =  result * 2200 / 4095;
   mVH=(mV>>8);
//      printf("P1.1 voltage: %ld mV\n",mV);
   RI0=0;
   TI0=0;
   if(unsend)
   
   {
    unsend=0;//低8位發(fā)送完成標(biāo)志清0
    SBUF0=0;//發(fā)送數(shù)據(jù)0
   }
  _nop_();
   send=1;//高8位發(fā)送完成標(biāo)識(shí)置1
   SBUF0=mVH;//發(fā)送高8位
       n=~n;//指示燈閃爍(后續(xù)為了驗(yàn)證上面一句語(yǔ)句有沒有走到加上的)
   }
}
void UART0_Interrupt (void) interrupt 4
{
  Delay_ms (2);

if (TI0==!0)
{ if(send)
{
  send=0;//高8位發(fā)送完成標(biāo)識(shí)清0
  unsend=1;//低8位發(fā)送完成標(biāo)識(shí)置1
  SBUF0=mV;//發(fā)送低8位

  
}
TI0=0;
}
else if(RI0==!0)
{

RI0=0;
}
}
******************************************************
程序開始跑后指示燈是有閃爍的,但是電腦串口接收到的數(shù)據(jù)如上面所描述,沒有高8位
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:824490 發(fā)表于 2020-12-30 11:12 | 只看該作者
if (TI0==!0)這樣也可以嗎?TI0==0 或TI0!=0,一般我都 是這么寫判斷的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:390416 發(fā)表于 2020-12-30 11:42 | 只看該作者
#include "all.h"
bit Uart1_Flag=1;
u8 code Uart1_Up_Symbol_Buffer[30]={"\r\n溫度:  遙控解碼:  超聲波:mm"};
u8 xdata Uart1_Up_Num_Buffer[10];
void Uart1_Init()
{
        SM0=0;
        SM1=1;
        REN=1;
        //SCON|=0x50;
        
        PCON&=0x3f;
        AUXR|=0x01;
        AUXR|=0X14;
        T2H=0xfc;
        T2L=0xf3;
        ES=1;
}


void Uart1_Up_Data_Drive()
{
        static u8 xdata count=0;
        if(Uart1_Flag)
        {
                Uart1_Flag=0;
                count++;
                switch(count)
                {
                        case 1 : SBUF=Uart1_Up_Symbol_Buffer[0];break;
                        case 2 : SBUF=Uart1_Up_Symbol_Buffer[1];break;
                        case 3 : SBUF=Uart1_Up_Symbol_Buffer[2];break;
                        case 4 : SBUF=Uart1_Up_Symbol_Buffer[3];break;
                        case 5 : SBUF=Uart1_Up_Symbol_Buffer[4];break;
                        case 6 : SBUF=Uart1_Up_Symbol_Buffer[5];break;
                        case 7 : SBUF=Uart1_Up_Symbol_Buffer[6];break;
                        case 8 : SBUF=Uart1_Up_Num_Buffer[0];break;
                        case 9 : SBUF=Uart1_Up_Num_Buffer[1];break;
                        case 10 :SBUF=Uart1_Up_Num_Buffer[2];break;
                        case 11 :SBUF=Uart1_Up_Num_Buffer[3];break;
                        
                        case 12 : SBUF=Uart1_Up_Symbol_Buffer[7];break;
                        case 13 : SBUF=Uart1_Up_Symbol_Buffer[8];break;
                        case 14 : SBUF=Uart1_Up_Symbol_Buffer[9];break;
                        case 15 : SBUF=Uart1_Up_Symbol_Buffer[10];break;
                        case 16 : SBUF=Uart1_Up_Symbol_Buffer[11];break;
                        case 17 : SBUF=Uart1_Up_Symbol_Buffer[12];break;
                        case 18 : SBUF=Uart1_Up_Symbol_Buffer[13];break;
                        case 19 : SBUF=Uart1_Up_Symbol_Buffer[14];break;
                        case 20 : SBUF=Uart1_Up_Symbol_Buffer[15];break;
                        case 21 : SBUF=Uart1_Up_Symbol_Buffer[16];break;
                        case 22 : SBUF=Uart1_Up_Symbol_Buffer[17];break;
                        case 23 : SBUF=Uart1_Up_Num_Buffer[5];break;
                        case 24 : SBUF=Uart1_Up_Num_Buffer[6];break;
                        
                        case 25 : SBUF=Uart1_Up_Symbol_Buffer[18];break;
                        case 26 : SBUF=Uart1_Up_Symbol_Buffer[19];break;
                        case 27 : SBUF=Uart1_Up_Symbol_Buffer[20];break;
                        case 28 : SBUF=Uart1_Up_Symbol_Buffer[21];break;
                        case 29 : SBUF=Uart1_Up_Symbol_Buffer[22];break;
                        case 30 : SBUF=Uart1_Up_Symbol_Buffer[23];break;
                        case 31 : SBUF=Uart1_Up_Symbol_Buffer[24];break;
                        case 32 : SBUF=Uart1_Up_Symbol_Buffer[25];break;
                        case 33 : SBUF=Uart1_Up_Symbol_Buffer[26];break;
                        case 34 : SBUF=Uart1_Up_Num_Buffer[7];break;
                        case 35 : SBUF=Uart1_Up_Num_Buffer[8];break;
                        case 36 : SBUF=Uart1_Up_Num_Buffer[9];break;
                        case 37 : SBUF=Uart1_Up_Symbol_Buffer[27];break;
                        case 38 : SBUF=Uart1_Up_Symbol_Buffer[28];break;
                        case 39 :count=0;break;
                }
        }
}

void Uart1_Routine() interrupt 4
{
        static char Uart1_ser_n=0;
        if(RI)
        {
                RI=0;
                Uart1_Flag=1;
                if(SBUF==0x7f)//9600波特率
                {
                        Uart1_ser_n++;
                        if(Uart1_ser_n>=10)
                        {
                                Uart1_ser_n=0;
                                IAP_CONTR|=0xe0;
                        }
                }
        }
        if(TI)
        {
                TI=0;
                Uart1_Flag=1;
                Uart1_Up_Data_Drive();
        }
}

一、以上代碼是STC15W的,可能需要修改定時(shí)器參數(shù)。
二、主函數(shù)while大循環(huán)前面初始化IO口和Uart1_Init();
三、主函數(shù)每間隔大約500ms 執(zhí)行一次Uart1_Up_Data_Drive();這個(gè)函數(shù),確保數(shù)據(jù)能夠發(fā)送。
四、串口通信,電腦發(fā)送一個(gè)字節(jié)。才能讓單片機(jī)發(fā)送。
五、接收端波特率要正確,文本模式接收才能顯示漢字。
六、以上代碼由《人人學(xué)會(huì)單片機(jī)》視頻教程原創(chuàng),也就是我本人原創(chuàng),引用請(qǐng)備注代碼出處。
回復(fù)

使用道具 舉報(bào)

地板
ID:803014 發(fā)表于 2020-12-30 15:30 | 只看該作者
名字不是重點(diǎn) 發(fā)表于 2020-12-30 11:12
if (TI0==!0)這樣也可以嗎?TI0==0 或TI0!=0,一般我都 是這么寫判斷的。

這個(gè)判斷應(yīng)該是沒有問題的,因?yàn)槟茏龅綌?shù)據(jù)傳輸,如果判斷語(yǔ)句不起作用那么低8位不會(huì)傳輸,但實(shí)際結(jié)果是高8位自第一次傳輸后再也沒有傳輸,低8位正常輸出。
回復(fù)

使用道具 舉報(bào)

5#
ID:803014 發(fā)表于 2020-12-30 15:31 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2020-12-30 11:42
#include "all.h"
bit Uart1_Flag=1;
u8 code Uart1_Up_Symbol_Buffer[30]={"\r\n溫度:  遙控解碼:  超聲 ...

謝謝回復(fù),用case語(yǔ)句來(lái)選擇好像是個(gè)好辦法,我試一下
回復(fù)

使用道具 舉報(bào)

6#
ID:803014 發(fā)表于 2020-12-30 15:52 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2020-12-30 11:42
#include "all.h"
bit Uart1_Flag=1;
u8 code Uart1_Up_Symbol_Buffer[30]={"\r\n溫度:  遙控解碼:  超聲 ...

雖然還是不知道為什么之前那個(gè)出問題,但是現(xiàn)在換成case語(yǔ)句后解決了我的問題,而且感覺按順序輸出多少數(shù)據(jù)都不是問題。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片成人免费看a | 日韩av中文 | 亚洲激情综合网 | 午夜天堂精品久久久久 | 夜久久 | a级大片 | av黄色国产| 免费av在线 | 国产精品一区二区三区四区 | 国产美女久久 | 瑟瑟视频在线看 | 日韩精品免费视频 | 国产一区二区毛片 | 国产精品色综合 | 国产精品永久免费 | 鸳鸯谱在线观看高清 | 亚洲黄色片免费观看 | 久久综合伊人 | 日本午夜免费福利视频 | 成人免费在线视频 | 日韩中文字幕在线视频 | 久久逼逼 | 国产一区2区 | 国产大片一区 | 国产精品久久久久久久久婷婷 | 色网在线播放 | 国产成人精品免费视频大全最热 | 在线视频h| 欧美日韩一区二区三区在线观看 | 久久国产精品无码网站 | 亚洲视频一区在线观看 | 黄色国产| 国产精品2 | 国产精品一二区 | 欧美一二区 | 日韩欧美在线观看视频网站 | 天天操天天拍 | 国产精品成人在线播放 | 国产日韩一区二区三免费高清 | 久久国产一区二区三区 | 国产视频久久 |