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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1631|回復: 1
收起左側

輝芒60F021芯片寫1527遙控器解碼程序0和1判斷條件范圍加大;還是不能正常執(zhí)行;請教大神

[復制鏈接]
ID:1003176 發(fā)表于 2022-8-27 17:30 | 顯示全部樓層 |閱讀模式
// 芯片型號: FT60F021    SOP-8
// 芯片參數(shù): Flash 2KX14b, EEPROM 256X8b, SRAM 128X8b
// 作者:
// 公司:
// 版本:
// 日期:
/*                         FT60F021  SOP8
*                          ----------------
*           VDD-----------|4(VDD)   (GND)13|-----------GND
*      指示燈3------------|5(PA4)   (PA6)12|------------指示燈2
*           RF------------|6(PA2)   (PA7)11|------------指示燈1
*  按鍵+指示燈------------|7(PA0)   (PA1)10|------------指示燈0
*                                       ----------------
//===========================================================*/
#include        "SYSCFG.h"
//========================宏定義===========================
#define  SET_SE                    PA0
#define  RF             PA2
#define  LED3                PA4  
#define  LED2                PA6
#define  LED1                PA7   
#define  LED0                PA1
#define  uchar                unsigned char   
#define  uint                    unsigned int
#define  ulong          unsigned long
#define  T0_N           256-228
//===========================================================
//=======================函數(shù)聲明==========================
void POWER_INITIAL (void);                    //IO口初始化
void DelayUs(uint Time);                      //微秒延時函數(shù)
void delay_1ms(uint Time);                    //毫秒延時函數(shù)
void INT_INITIAL(void);                       //中斷初始化函數(shù)
void Eeprom_Write(uchar address, uchar value);//寫數(shù)據到EEPROM
void rx_receive(void)   ;   //數(shù)據接收函數(shù)
void TIMER0_INITIAL (void); //定時器中斷初始化函數(shù)
void interrupt ISR(void);   //定時器中斷初始化函數(shù)

//===========================================================
//=======================變量定義==========================
//ulong mma,mm;  //接收數(shù)據保存變?
//uchar l;
uchar data1_1,data1_2,data1_3;
uchar data2_1,data2_2,data2_3;
     uchar hle_w=0;      //高電平時間
     uchar lle_w=0;      //低電平時間        
     uchar old_bit;  //1位數(shù)據讀完標記位
     uchar tb_ok=0;    //前導碼判斷完成標記位
     uchar rf_ok1=0;     //第一組數(shù)據接收完畢標記位
     uchar rf_ok2;     //第二組數(shù)據接收完畢標記位
//===========================================================

/*-------------------------------------------------
* 函數(shù)名:main
* 功能: 主函數(shù)
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void main(void)
{
   POWER_INITIAL();//系統(tǒng)初始化
   TIMER0_INITIAL ();//計時器中斷初始化//計時50微秒中斷一次
   while(1)
   {
       LED0=0;LED1=0;LED2=0;LED3=0;
   }
}
/*----------------------------------------------------
* 函數(shù)名稱:rx_receive
* 功能:    接收RF數(shù)據
* 輸入參數(shù):無
* 返回參數(shù):無
----------------------------------------------------*/
void rx_receive(void)//數(shù)據接收函數(shù)
{   
    uchar bma;       //接收數(shù)據保存
    uchar ma_n=0;    //數(shù)據接收位數(shù)
    if (!RF)     
    {
       lle_w++;      //數(shù)據低電平時間
        old_bit=1;    //一位數(shù)據接收完成標記
    }
    else
    {
       hle_w++;      //數(shù)據高電平時間  
           if (old_bit) //數(shù)據接收完成進入
       { // LED2=1;
          Eeprom_Write(0x20,ma_n); //測試用來看執(zhí)行了多少位
          if ((!tb_ok)&&(hle_w>=2)&&(hle_w<=8)&&(lle_w>=100)&&(lle_w<=200)) //判斷前導碼  
          {  
              Eeprom_Write(0x00,hle_w); Eeprom_Write(0x03,lle_w);//測試用來看高低電平時間
              ma_n=0;tb_ok=1;bma=0;hle_w=0;lle_w=0;old_bit=0;  //接收位數(shù)標記;前導碼判斷完常;數(shù)據清零
          }
          else if(tb_ok&&(lle_w>=10)&&(lle_w<=30))//判斷數(shù)據0
          {
             Eeprom_Write(0x11,lle_w);LED2=1; //測試用來看低電平時間
                     ma_n++;                //接收數(shù)據位數(shù)標記位
             bma=bma<<1;     //數(shù)據左移1位保存
             hle_w=0;lle_w=0;old_bit=0;
          }
          else if(tb_ok&&(lle_w>=3)&&(lle_w<=8))//判斷數(shù)據1
         {   
            Eeprom_Write(0x12,lle_w);//測試用來看低電平時間
            ma_n++;
            bma=bma<<1;    //數(shù)據先左移1位 //寫0
            bma=bma+1;      //寫1
            hle_w=0;lle_w=0;old_bit=0;
         }
         else{ma_n=0;tb_ok=0;bma=0;hle_w=0;lle_w=0;rf_ok1=0;rf_ok2=0;old_bit=0;} //接收數(shù)據有誤標記位全部清零

         if(ma_n==8){data1_1=bma;bma=0;}
         else if(ma_n==16){data1_2=bma;bma=0;}
         else if(ma_n==24){data1_3=bma;bma=0;tb_ok=0;old_bit=0;}   
         if(ma_n==24)      //數(shù)據接收夠24位進入
         {
            if(!rf_ok1)    //判斷是不是接收到的第一組數(shù)據
                    {   
                LED0=1;
                            data2_1=data1_1;    //把data1數(shù)據復制data2
                data2_2=data1_2;
                data2_3=data1_3;
                        rf_ok1=1;   //第一組數(shù)據接收完畢標記位置1
                            ma_n=0;     //接收數(shù)據位數(shù)標記位清零
                    }
                    else if(rf_ok1)  
                {
                     LED1=1;
                     rf_ok2=1;   //第二組數(shù)據接收完畢標位置1                           
                      ma_n=0;     //接收數(shù)據位數(shù)標記位清零        
            }     
         }                                                                                                                                                      
       }
    }
    if(rf_ok2)//第二組數(shù)據接收完畢進入
    {
       if(data2_1 == data1_1&&data2_2 == data1_2&&data2_3 == data1_3) //接收的兩次數(shù)據對比
           {
                  rf_ok1 = 0;     //第一組數(shù)據接收完畢標記位清零
                  rf_ok2 = 0;     //第二組數(shù)據接收完畢標記位清零
          Eeprom_Write(0x30,data2_1);//寫數(shù)據
          Eeprom_Write(0x31,data2_2);
          Eeprom_Write(0x32,data2_3);
          LED3=1;
          delay_1ms(1000);//完成閃燈
          LED3 = 0;
          delay_1ms(1000);
          LED3 = 1;
          delay_1ms(1000);
          LED3 = 0;
       }
    }
}
/*----------------------------------------------------
* 函數(shù)名:TIMER0_INITIAL
* 功能: 初始化設置定時器 Timer0
* 設置 TMR0 定時時長=(1/系統(tǒng)時鐘頻率)*指令周期*預分頻值*255
(1/16000000)*2*2*(256-228)=60us//計算的時間實際測試有誤差,現(xiàn)在的取值實際測試剛好是60US
----------------------------------------------------*/
void TIMER0_INITIAL (void)
{
    OPTION = 0B00000000;
    //Bit5: T0CS Timer0 時鐘源選擇
    // 1-外部引腳電平變化 T0CKI 0-內部時鐘(FOSC/2)
    //Bit4: T0CKI 引腳觸發(fā)方式 1-下降沿 0-上升沿
    //Bit3: PSA 預分頻器分配位 0-Timer0 1-WDT
    //Bit[2:0]: PS 8 個預分頻比 111 - 1:256
    T0IF = T0_N; //清空 T0 軟件中斷
    T0IE = 1;
    GIE  = 1;
}
/*-------------------------------------------------
* 函數(shù)名:interrupt ISR
* 功能: Timer0 的中斷處理函數(shù)
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void interrupt ISR(void)
{
   if(T0IE && T0IF) //60us 進一次
   {
      T0IF = 0;
      TMR0 = T0_N;
     // LED0 = ~LED0;
      rx_receive();
   }
}
/*----------------------------------------------------
* 函數(shù)名稱:EEPROM_write
* 功能:    寫數(shù)據到EEPROM
* 輸入參數(shù):EEAddr 需要寫入數(shù)據的地址
*                         Data 需要寫入的數(shù)據
* 返回參數(shù):無
----------------------------------------------------*/
void Eeprom_Write(uchar address, uchar value)//EERM寫數(shù)據函數(shù)
{
CLRWDT();
        EEADR = address;

        EEDAT = value;
        EECON1 = 0x34;
        WR = 1;
        while(WR==1)CLRWDT();
        WREN1 = 0;
        WREN2 = 0;
        WREN3 = 0;
}
/*-------------------------------------------------
* 函數(shù)名:POWER_INITIAL
* 功能:  上電系統(tǒng)初始化
* 輸入:  無
* 輸出:  無
--------------------------------------------------*/        
void POWER_INITIAL (void)
{
        OSCCON = 0B01110001;                //WDT=32k IRCF=111=16M
    INTCON = 0;                                        //暫禁止所有中斷
        PORTA = 0B00000000;               
        TRISA = 0B00000101;                        //PA輸入輸出 0-輸出 1-輸入  //PA1,PA4,PA6,PA7,PA1,-輸入 PA0-輸出                                                        
        //PORTC = 0B00000000;         
        //TRISC = 0B00000000;                //PC輸入輸出 0-輸出 1-輸入  
        WPUA = 0B00000000;                     //PA端口上拉控制 1-開上拉 0-關上拉  //開PA6,PA7,PA1上拉                                                
        OPTION = 0B00001000;                //Bit3=1,WDT MODE,PS=000=WDT RATE 1:1      
    WDTCON = 0b00000000;
    //Bit4=0,禁止LVR(60F01x O版之前)      
        //Bit4=0,LVREN使能時,開啟LVR(60F01x O版及O版之后)  
    //Bit4=1,LVREN使能時,工作時開啟LVR,睡眠時自動關閉LVR(60F01x O版及O版后)           
        CMCON0 = 0B00000111;                //關閉比較器,CxIN為數(shù)字IO口
}
/*----------------------------------------------------
* 函數(shù)名稱:DelayUs
* 功能:    短延時函數(shù) --16M-2T--大概快1%左右.
* 輸入參數(shù):Time延時時間長度 延時時長Time Us
* 返回參數(shù):無
----------------------------------------------------*/
void DelayUs(uint Time)
{
        uint a;
        for(a=0;a<Time;a++) { NOP();}
}                  
/*----------------------------------------------------
* 函數(shù)名稱:DelayMs
* 功能:    短延時函數(shù)
* 輸入參數(shù):Time延時時間長度 延時時長Time ms
* 返回參數(shù):無
----------------------------------------------------*/
void delay_1ms(uint Time)
{
        uchar b;//
    uint a;
        for(a=0;a<Time;a++)
        {
                for(b=0;b<5;b++) {DelayUs(197);}                //快1%
        }
}


回復

使用道具 舉報

ID:1003176 發(fā)表于 2022-8-27 17:34 | 顯示全部樓層
264d8931b4fd5b8333cb3491eb1632d.jpg
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产亚洲一区二区三区大结局 | 日本不卡视频在线播放 | 欧美激情国产精品 | 亚洲在线一区 | 国产久| 在线国产欧美 | 成年人免费在线视频 | 成人三级视频在线观看 | 欧美综合国产精品久久丁香 | 色综合久久久 | 国产午夜精品一区二区 | 免费在线看a | 欧美日韩综合 | 视频1区 | 欧美激情精品久久久久久变态 | 国产视频在线观看一区二区三区 | 亚洲精久久久 | 精品永久 | 国产精品视频观看 | a免费观看 | 成人av在线播放 | 成av在线| 国产免费又色又爽又黄在线观看 | 91欧美| 日韩在线一区二区三区 | 国产69久久精品成人看动漫 | 久久国产亚洲 | 欧美精品电影一区 | 久久成人免费视频 | 国产精品自拍视频 | 亚洲国产成人在线 | 国产精品成人一区二区三区 | 亚洲美女天堂网 | 色橹橹欧美在线观看视频高清 | 亚洲第一av | 成人久久18免费网站麻豆 | 亚洲视频在线看 | 中文字幕精品视频 | 久久久久久久久久久福利观看 | 亚洲精品9999 | 久久久久国产精品 |