欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)發(fā)送數(shù)據(jù)給電腦但有些數(shù)據(jù)沒(méi)有被再次發(fā)送 [打印本頁(yè)]

作者: 迷茫的落葉    時(shí)間: 2020-12-29 15:13
標(biāo)題: 單片機(jī)發(fā)送數(shù)據(jù)給電腦但有些數(shù)據(jù)沒(méi)有被再次發(fā)送
我用單片機(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),再也沒(méi)收到電壓高8位;有沒(méi)有大佬幫忙看看程序哪里出了問(wèn)題。
**********************************************************************
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ǔ)句有沒(méi)有走到加上的)
   }
}
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;
}
}
******************************************************
程序開(kāi)始跑后指示燈是有閃爍的,但是電腦串口接收到的數(shù)據(jù)如上面所描述,沒(méi)有高8位

作者: 名字不是重點(diǎn)    時(shí)間: 2020-12-30 11:12
if (TI0==!0)這樣也可以嗎?TI0==0 或TI0!=0,一般我都 是這么寫(xiě)判斷的。
作者: 人人學(xué)會(huì)單片機(jī)    時(shí)間: 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)備注代碼出處。
作者: 迷茫的落葉    時(shí)間: 2020-12-30 15:30
名字不是重點(diǎn) 發(fā)表于 2020-12-30 11:12
if (TI0==!0)這樣也可以嗎?TI0==0 或TI0!=0,一般我都 是這么寫(xiě)判斷的。

這個(gè)判斷應(yīng)該是沒(méi)有問(wèn)題的,因?yàn)槟茏龅綌?shù)據(jù)傳輸,如果判斷語(yǔ)句不起作用那么低8位不會(huì)傳輸,但實(shí)際結(jié)果是高8位自第一次傳輸后再也沒(méi)有傳輸,低8位正常輸出。
作者: 迷茫的落葉    時(shí)間: 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è)好辦法,我試一下
作者: 迷茫的落葉    時(shí)間: 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è)出問(wèn)題,但是現(xiàn)在換成case語(yǔ)句后解決了我的問(wèn)題,而且感覺(jué)按順序輸出多少數(shù)據(jù)都不是問(wèn)題。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1