最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

這一個數(shù)據(jù)折騰了我五天

作者:ihafd 欄目:單片機
這一個數(shù)據(jù)折騰了我五天
因為這個數(shù)據(jù),折騰了我5天,每天起床第一時間就開始想:為什么.但一直找不到原因,為個數(shù)據(jù)我感到非常失敗啊!
程序可能有點不好看,但只要做過遙控器解碼的朋友一看就懂了。很簡單的。請幫幫小弟吧,無限感激!
我的做法是如下:
  把一個數(shù)據(jù)(8位)通過無線模塊發(fā)射出去.然后接收下來,距離100米,然后通過LED顯示就可以了.多么簡單的一個電路啊!
  無線模塊是不帶編碼的那種,只有一個數(shù)據(jù)腳,我把要發(fā)的數(shù)據(jù)用單片機參考SAA3010遙控編碼格式編碼后發(fā)送.然后接收就參考了程序匠人的<關于狀態(tài)機的SAA3010解碼程程>.做解碼.
總體上是正常的.可以順利收發(fā)數(shù)據(jù),但有一種數(shù)據(jù)就老是接收失敗.如果這個數(shù)據(jù)最后三位是011那就會接收失敗,例如:0x03、0x33、0xBB.等都收不到。為什么。?

//**數(shù)據(jù)發(fā)送程序****//
//數(shù)據(jù)編碼完全按照SAA3013遙控編碼芯片格式編碼編寫
//用示波器分析過。發(fā)送數(shù)據(jù)沒有錯。

#include<reg51.h>
typedef unsigned CHAR uCHAR;
typedef unsigned int uint;

void delay(uCHAR i);  //短延時
void longdelay(uCHAR i);//長延時。
uCHAR data_code,d1,TEMP,dd;//全局變量。
sbit RX=P3^7; //數(shù)據(jù)輸出口。
void sent_begin();   //發(fā)送開始碼
void sent_data(uCHAR i);//發(fā)送數(shù)據(jù)碼。
void sent1();  //發(fā)送1
void sent0();  //發(fā)送0。

sbit key1=P3^7;
sbit key2=P1^6;


main()
{
  uCHAR W1;
  TMOD=0x01;   //下時器0方式1
  TH0=0xFC;   //844us延時。
  TL0=0xBA;  

key1=1;
longdelay(20);  //0。5延時。
if(key2==1)
   key1=1;      //0。5延時?
  else
    key1=0;
longdelay(20);
     
   
  while(1)
   {
    dd=P1;  //把P1口的數(shù)據(jù)發(fā)送出去。

    for(W1=0;W1<2;W1++)
    {
    sent_begin();   //發(fā)開始碼。
    sent_data(dd);  //發(fā)數(shù)據(jù)碼。
    delay(40);  
    }
   }
}

//**********發(fā)送開始碼**********//[此數(shù)據(jù)格式按照SAA3010遙控編碼芯片編寫]
void sent_begin()
{
uCHAR dd;
TR0=1;
RX=1;
TF0=0;
TH0=0xFC;
TL0=0xBA;
while(!TF0);
RX=0;
TF0=0;    // 1243us
TH0=0xFC;
TL0=0xBA;
while(!TF0);
RX=1;
TF0=0;    //2087 (2087-1243=844)us
TH0=0xFC;
TL0=0xBA;
while(!TF0);
RX=0;
TF0=0;   //2931
TH0=0xFC;
TL0=0xBA;
while(!TF0);
RX=1;
TF0=0;   //3775
TH0=0xFC;
TL0=0xBA;
while(!TF0);
TF0=0;
TH0=0xFC;
TL0=0xBB;
while(!TF0);
for(dd=0;dd<4;dd++)
   {
    RX=0;
    TF0=0;      //5464 (5463-3775= 1688)us
    TH0=0xFC;
    TL0=0xBA;
    while(!TF0);
    RX=1;
    TF0=0;     //6308
    TH0=0xFC;
    TL0=0xBD;
    while(!TF0);
   }
RX=0;  
TF0=0;   //1220us
TH0=0xFC;
TL0=0xD3;      //適當咸小計數(shù)時間,留給下面的語句運行用。
while(!TF0);
RX=0;
}          
//////////////////////////////////////////////////////
//***********發(fā)送數(shù)據(jù)碼**************//{按照SAA3010遙控編碼芯片編寫]
void sent_data(uCHAR i)
{
for(d1=0;d1<8;d1++)
   {
     TEMP=i<<d1;
     if((TEMP&0x80)==0x80)
      sent1();
       else
        sent0();
   }
//   RX=0;
}

//***發(fā)送1碼******//
void sent1()
{

  RX=0;
  TF0=0;   //13065us (13065-12220=845)us
  TH0=0xFC;
  TL0=0xBA;
  while(!TF0);
  RX=1;
  TF0=0;    //13909us
  TH0=0xFC;
  TL0=0xD7;    //適當咸小定時時間,以供下面的語句運行使用。
  while(!TF0);
}
//********發(fā)送0碼**********//
void sent0()
{
RX=1;
TF0=0;   //14754us
TH0=0xFC;
TL0=0xBA;
while(!TF0);
  RX=0;  //15597us
  TF0=0;
  TH0=0xFC;
  TL0=0xDD;        //適當咸小定時時間,以供下面的語句運行使用。      
  while(!TF0);

}

//****延時函數(shù)*****//

void delay(uCHAR i)
{
uCHAR dd,tj;
for(dd=3000;dd>0;dd--)
  for(tj=55;tj>0;tj--)
   for(;i>0;i--);
}

void longdelay(uCHAR i)
{
  uint k1,k2;
for(k1=500;k1>0;k1--) //500
   for(k2=80;k2>0;k2--)
    for(;i>0;i--);
}







//**接收解碼程度********//

#include<reg51.h>
typedef unsigned CHAR uCHAR;

uCHAR ykcode;  //
bit ykok;
uCHAR ykbnum;  //已接收數(shù)據(jù)收位。
uCHAR ykdelay; //數(shù)據(jù)延時接收。
uCHAR ykbtc;  // 中斷時ykbtc=TH1.
bdata uCHAR ykcodeTEMP;
sbit ykcodeTEMP0=ykcodeTEMP^0;

sbit YKIO=P3^2;  //外部中斷0。

void YkInit(void);  //初始化
uCHAR YkGetcode(void);//返回據(jù)據(jù)碼。
void led_show(uCHAR); //顯示。
bit YkTest(void);  //檢查有沒有接收到數(shù)據(jù)。


//********初始化
void YkInit(void)
{
TMOD=0x11;
SCON=0x00;
TH1=0;
TL1=0;
IE|=0x89;
IP|=0x01;    //INTO中斷優(yōu)先。
TCON|=0x41;
ykcodeTEMP=0;
ykdelay=0;
}

//*********返回據(jù)據(jù)碼。
uCHAR YkGetcode(void)
{
return(ykcode);
}

//*********檢查有沒有接收到數(shù)據(jù)?
bit YkTest(void)
{
return(ykok);
}

//*********接收中斷函數(shù)****************//[是參考程序匠人的基于狀態(tài)機的SAA3010解碼程序]
void intx0() interrupt 0 using 2
{
ykbtc=TH1; TH1=0;TL1=0;TR1=1;ET1=1;
SWITCH(ykbnum)
{
  case(0):
          ykbnum=1;
          break;
  case(1):
          if(ykbtc==6) {ykbnum=2;}

            else
              ykbnum=0;
          break;
  case(2):
          if(ykbtc==9||ykbtc==6) ykbnum=3;
            else
             ykbnum=0;
          break;
  case(3):
          if(ykbtc==9||ykbtc==6) ykbnum=4;
             else
             ykbnum=0;
   default:
           if(ykbnum<7)
          &nb
2樓: >>參與討論
ihafd
基本上是正常的.
就是,最后三位是011時才不能接收.

3樓: >>參與討論
ihafd
還在調試中,還是找不到原因.
!!

參與討論
昵稱:
討論內容:
 
 
相關帖子
高手請進;評估計算不知道對不對
關于MCS51定時器2的說明,一般的書上都沒有.
892051+LCD 用什么方法控制啊?
關于at24c256的問題
剛寫的一個8位ADPCM壓縮程序,秀一下.
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號