MCU

    內容表格
    沒有標頭

    版本為 18:28, 4 Oct 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    出自於  http://www.wifi-robots.com/thread-367-1-1.html 原作者liuviking

    完整Sources Code 下載

    目標移植此單片機程式為Arduino +MSP 430 通用code ,讓下位單晶片可用Arduino  或MSP430 替代.

    這樣客戶端WIFI 遙控程式則可套用現成
    Windows 板 http://www.wifi-robots.com/thread-1790-1-1.html
    Android 板  http://www.wifi-robots.com/thread-1180-1-1.html
    API http://www.wifi-robots.com/thread-938-1-1.html
    完整VB6 Code http://www.wifi-robots.com/thread-1816-1-1.html

     

    /*
    版权声明:
    WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
    您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
    By WIFI机器人网·机器人创意工作室
    */
    
    #ifndef _STC_NEW_8051_H_
    #define _STC_NEW_8051_H_
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机内核特殊功能寄存器 C51 Core SFRs
    //                                          7     6      5       4     3    2    1     0   Reset Value
    sfr ACC  = 0xE0; //Accumulator                                                              0000,0000
    sfr B    = 0xF0; //B Register                                                               0000,0000
    sfr PSW  = 0xD0; //Program Status Word      CY    AC    F0    RS1   RS0    OV    F1    P    0000,0000
    //-----------------------------------
    sbit CY  = PSW^7;
    sbit AC  = PSW^6;
    sbit F0  = PSW^5;
    sbit RS1 = PSW^4;
    sbit RS0 = PSW^3;
    sbit OV  = PSW^2;
    sbit P   = PSW^0;
    //-----------------------------------
    sfr SP   = 0x81; //Stack Pointer                                                            0000,0111
    sfr DPL  = 0x82; //Data Pointer Low Byte                                                    0000,0000
    sfr DPH  = 0x83; //Data Pointer High Byte                                                   0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机系统管理特殊功能寄存器
    //                                          7     6      5    4     3      2    1     0     Reset Value
    sfr PCON   = 0x87; //Power Control        SMOD  SMOD0  LVDF  POF   GF1    GF0   PD   IDL    0001,0000
    //                                        7     6       5      4     3      2      1      0   Reset Value
    sfr AUXR  = 0x8E; //Auxiliary Register  T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS  0000,0000
    //-----------------------------------
    sfr AUXR1 = 0xA2; //Auxiliary Register 1  -  PCA_P4  SPI_P4  S2_P4  GF2    ADRJ   -    DPS  0000,0000
    /*
    PCA_P4:
        0, 缺省PCA 在P1 口
        1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,
                                       PCA0/PWM0 从P1.3 切换到P4.2 口
                                       PCA1/PWM1 从P1.4 切换到P4.3 口
    SPI_P4:
        0, 缺省SPI 在P1 口
        1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口
                                   MISO 从P1.6 切换到P4.2 口
                                   MOSI 从P1.5 切换到P4.1 口
                                   SS 从P1.4 切换到P4.0 口
    S2_P4:
        0, 缺省UART2 在P1 口
        1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口
                                     RxD2 从P1.2 切换到P4.2 口
    GF2: 通用标志位
    
    ADRJ:
        0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器
        1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器
    
    DPS: 0, 使用缺省数据指针DPTR0
         1,使用另一个数据指针DPTR1
    */
    //-----------------------------------
    sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO
    /*
          7            6          5          4          3       2       1      0         Reset Value
       PCAWAKEUP  RXD_PIN_IE  T1_PIN_IE  T0_PIN_IE  LVD_WAKE    _    T1CLKO  T0CLKO      0000,0000B
    
    b7 - PCAWAKEUP : PCA 中断可唤醒 powerdown。
    b6 - RXD_PIN_IE : 当 P3.0(RXD) 下降沿置位 RI 时可唤醒 powerdown(必须打开相应中断)。
    b5 - T1_PIN_IE : 当 T1 脚下降沿置位 T1 中断标志时可唤醒 powerdown(必须打开相应中断)。
    b4 - T0_PIN_IE : 当 T0 脚下降沿置位 T0 中断标志时可唤醒 powerdown(必须打开相应中断)。
    b3 - LVD_WAKE : 当 CMPIN 脚低电平置位 LVD 中断标志时可唤醒 powerdown(必须打开相应中断)。
    b2 -
    b1 - T1CLKO : 允许 T1CKO(P3.5) 脚输出 T1 溢出脉冲,Fck1 = 1/2 T1 溢出率
    b0 - T0CLKO : 允许 T0CKO(P3.4) 脚输出 T0 溢出脉冲,Fck0 = 1/2 T1 溢出率
    */
    //-----------------------------------
    sfr CLK_DIV = 0x97; //Clock Divder          -     -      -       -     -  CLKS2 CLKS1 CLKS0 xxxx,x000
    //-----------------------------------
    sfr BUS_SPEED = 0xA1; //Stretch register      -     -    ALES1   ALES0   -   RWS2  RWS1  RWS0 xx10,x011
    /*
    ALES1 and ALES0:
    00 : The P0 address setup time and hold time to ALE negative edge is one clock cycle
    01 : The P0 address setup time and hold time to ALE negative edge is two clock cycles.
    10 : The P0 address setup time and hold time to ALE negative edge is three clock cycles. (default)
    11 : The P0 address setup time and hold time to ALE negative edge is four clock cycles.
    
    RWS2,RWS1,RWS0:
      000 : The MOVX read/write pulse is 1 clock cycle.
      001 : The MOVX read/write pulse is 2 clock cycles.
      010 : The MOVX read/write pulse is 3 clock cycles.
      011 : The MOVX read/write pulse is 4 clock cycles. (default)
      100 : The MOVX read/write pulse is 5 clock cycles.
      101 : The MOVX read/write pulse is 6 clock cycles.
      110 : The MOVX read/write pulse is 7 clock cycles.
      111 : The MOVX read/write pulse is 8 clock cycles.
    */
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机中断特殊功能寄存器
    //有的中断控制、中断标志位散布在其它特殊功能寄存器中,这些位在位地址中定义
    //其中有的位无位寻址能力,请参阅 新一代 1T 8051系列 单片机中文指南
    //                                           7     6     5    4     3    2    1    0   Reset Value
    sfr IE      = 0xA8;  //中断控制寄存器        EA  ELVD  EADC   ES   ET1  EX1  ET0  EX0  0x00,0000
    //-----------------------
    sbit EA       = IE^7;
    sbit ELVD     = IE^6; //低压监测中断允许位
    sbit EADC     = IE^5; //ADC 中断允许位
    sbit ES       = IE^4;
    sbit ET1      = IE^3;
    sbit EX1      = IE^2;
    sbit ET0      = IE^1;
    sbit EX0      = IE^0;
    //-----------------------
    sfr IE2       = 0xAF;  //Auxiliary Interrupt   -     -     -    -     -    -  ESPI  ES2  0000,0000B
    //-----------------------
    //                                          7     6     5    4    3    2    1    0    Reset Value
    sfr IP      = 0xB8; //中断优先级低位      PPCA  PLVD  PADC  PS   PT1  PX1  PT0  PX0   0000,0000
    //--------
    sbit PPCA     = IP^7;  //PCA 模块中断优先级
    sbit PLVD     = IP^6;  //低压监测中断优先级
    sbit PADC     = IP^5;  //ADC 中断优先级
    sbit PS       = IP^4;
    sbit PT1      = IP^3;
    sbit PX1      = IP^2;
    sbit PT0      = IP^1;
    sbit PX0      = IP^0;
    //-----------------------
    //                                         7      6      5     4     3     2     1     0    Reset Value
    sfr IPH   = 0xB7; //中断优先级高位       PPCAH  PLVDH  PADCH  PSH  PT1H  PX1H  PT0H  PX0H   0000,0000
    sfr IP2   = 0xB5; //                       -      -      -     -     -     -   PSPI   PS2   xxxx,xx00
    sfr IPH2  = 0xB6; //                       -      -      -     -     -     -   PSPIH  PS2H  xxxx,xx00
    //-----------------------
    //新一代 1T 8051系列 单片机I/O 口特殊功能寄存器
    //                                      7     6     5     4     3     2     1     0         Reset Value
    sfr P0   = 0x80; //8 bitPort0          P0.7  P0.6  P0.5  P0.4  P0.3  P0.2  P0.1  P0.0       1111,1111
    sfr P0M0 = 0x94; //                                                                         0000,0000
    sfr P0M1 = 0x93; //                                                                         0000,0000
    sfr P1   = 0x90; //8 bitPort1          P1.7  P1.6  P1.5  P1.4  P1.3  P1.2  P1.1  P1.0       1111,1111
    sfr P1M0 = 0x92; //                                                                         0000,0000
    sfr P1M1 = 0x91; //                                                                         0000,0000
    sfr P1ASF = 0x9D; //P1 analog special function
    sfr P2   = 0xA0; //8 bitPort2          P2.7  P2.6  P2.5  P2.4  P2.3  P2.2  P2.1  P2.0       1111,1111
    sfr P2M0 = 0x96; //                                                                         0000,0000
    sfr P2M1 = 0x95; //                                                                         0000,0000
    sfr P3   = 0xB0; //8 bitPort3          P3.7  P3.6  P3.5  P3.4  P3.3  P3.2  P3.1  P3.0       1111,1111
    sfr P3M0 = 0xB2; //                                                                         0000,0000
    sfr P3M1 = 0xB1; //                                                                         0000,0000
    sfr P4   = 0xC0; //8 bitPort4          P4.7  P4.6  P4.5  P4.4  P4.3  P4.2  P4.1  P4.0       1111,1111
    sfr P4M0 = 0xB4; //                                                                         0000,0000
    sfr P4M1 = 0xB3; //                                                                         0000,0000
    //                                      7      6         5         4      3     2     1     0     Reset Value
    sfr P4SW = 0xBB; //Port-4 switch        -   LVD_P4.6  ALE_P4.5  NA_P4.4   -     -     -     -        x000,xxxx
    
    sfr P5   = 0xC8; //8 bitPort5           -     -       -      -    P5.3  P5.2  P5.1  P5.0    xxxx,1111
    sfr P5M0 = 0xCA; //                                                                         0000,0000
    sfr P5M1 = 0xC9; //                                                                         0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机定时器特殊功能寄存器
    //                                          7     6     5     4     3     2     1     0     Reset Value
    sfr TCON = 0x88; //T0/T1 Control           TF1   TR1   TF0   TR0   IE1   IT1   IE0   IT0    0000,0000
    //-----------------------------------
    sbit TF1 = TCON^7;
    sbit TR1 = TCON^6;
    sbit TF0 = TCON^5;
    sbit TR0 = TCON^4;
    sbit IE1 = TCON^3;
    sbit IT1 = TCON^2;
    sbit IE0 = TCON^1;
    sbit IT0 = TCON^0;
    //-----------------------------------
    sfr TMOD = 0x89; //T0/T1 Modes             GATE1 C/T1  M1_1  M1_0  GATE0 C/T0  M0_1  M0_0   0000,0000
    sfr TL0  = 0x8A; //T0 Low Byte                                                              0000,0000
    sfr TH0  = 0x8C; //T0 High Byte                                                             0000,0000
    sfr TL1  = 0x8B; //T1 Low Byte                                                              0000,0000
    sfr TH1  = 0x8D; //T1 High Byte                                                             0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机串行口特殊功能寄存器
    //                                          7     6     5     4     3     2     1     0     Reset Value
    sfr SCON = 0x98; //Serial Control         SM0/FE SM1   SM2   REN   TB8   RB8    TI    RI    0000,0000
    //-----------------------------------
    sbit SM0 = SCON^7;  //SM0/FE
    sbit SM1 = SCON^6;
    sbit SM2 = SCON^5;
    sbit REN = SCON^4;
    sbit TB8 = SCON^3;
    sbit RB8 = SCON^2;
    sbit TI  = SCON^1;
    sbit RI  = SCON^0;
    //-----------------------------------
    sfr SBUF = 0x99; //Serial Data Buffer                                                     xxxx,xxxx
    sfr SADEN = 0xB9; //Slave Address Mask                                                    0000,0000
    sfr SADDR = 0xA9; //Slave Address                                                         0000,0000
    //-----------------------------------
    //                                7      6      5      4      3      2     1     0        Reset Value
    sfr S2CON = 0x9A; //S2 Control  S2SM0  S2SM1  S2SM2  S2REN  S2TB8  S2RB8  S2TI  S2RI      00000000B
    sfr S2BUF = 0x9B; //S2 Serial Buffer                                                      xxxx,xxxx
    sfr BRT = 0x9C; //S2 Baud-Rate Timer                                                    0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机看门狗定时器特殊功能寄存器
    sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register
    //                                      7     6     5      4       3      2   1   0     Reset Value
    //                                  WDT_FLAG  -  EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0    xx00,0000
    //-----------------------
    
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机PCA/PWM 特殊功能寄存器
    //                                         7     6     5     4     3     2     1     0     Reset Value
    sfr CCON   = 0xD8;   //PCA 控制寄存器。    CF    CR    -     -     -     -    CCF1  CCF0   00xx,xx00
    //-----------------------
    sbit CF     = CCON^7; //PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。
    sbit CR     = CCON^6; //1:允许 PCA 计数器计数, 必须由软件清0。
    //-
    //-
    sbit CCF1   = CCON^1; //PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。
    sbit CCF0   = CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。
    //-----------------------
    sfr CMOD  = 0xD9; //PCA 工作模式寄存器。   CIDL   -     -     -   CPS2   CPS1  CPS0  ECF   0xxx,x000
    /*
    CIDL: idle 状态时 PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。
    
    CPS2: PCA 计数器脉冲源选择位 2。
    CPS1: PCA 计数器脉冲源选择位 1。
    CPS0: PCA 计数器脉冲源选择位 0。
       CPS2   CPS1   CPS0
        0      0      0    系统时钟频率 fosc/12。
        0      0      1    系统时钟频率 fosc/2。
        0      1      0    Timer0 溢出。
        0      1      1    由 ECI/P3.4 脚输入的外部时钟,最大 fosc/2。
        1      0      0    系统时钟频率,  Fosc/1
        1      0      1    系统时钟频率/4,Fosc/4
        1      1      0    系统时钟频率/6,Fosc/6
        1      1      1    系统时钟频率/8,Fosc/8
    
    ECF: PCA计数器溢出中断允许位, 1--允许 CF(CCON.7) 产生中断。
    */
    //-----------------------
    sfr CL     = 0xE9; //PCA 计数器低位                                                        0000,0000
    sfr CH     = 0xF9; //PCA 计数器高位                                                        0000,0000
    //-----------------------
    //                                         7     6      5      4     3     2     1     0     Reset Value
    sfr CCAPM0 = 0xDA; //PCA 模块0 PWM 寄存器  -   ECOM0  CAPP0  CAPN0  MAT0  TOG0  PWM0  ECCF0   x000,0000
    sfr CCAPM1 = 0xDB; //PCA 模块1 PWM 寄存器  -   ECOM1  CAPP1  CAPN1  MAT1  TOG1  PWM1  ECCF1   x000,0000
    
    //ECOMn = 1:允许比较功能。
    //CAPPn = 1:允许上升沿触发捕捉功能。
    //CAPNn = 1:允许下降沿触发捕捉功能。
    //MATn  = 1:当匹配情况发生时, 允许 CCON 中的 CCFn 置位。
    //TOGn  = 1:当匹配情况发生时, CEXn 将翻转。
    //PWMn  = 1:将 CEXn 设置为 PWM 输出。
    //ECCFn = 1:允许 CCON 中的 CCFn 触发中断。
    
    //ECOMn  CAPPn  CAPNn  MATn  TOGn  PWMn  ECCFn
    //  0      0      0     0     0     0     0   0x00   未启用任何功能。
    //  x      1      0     0     0     0     x   0x21   16位CEXn上升沿触发捕捉功能。
    //  x      0      1     0     0     0     x   0x11   16位CEXn下降沿触发捕捉功能。
    //  x      1      1     0     0     0     x   0x31   16位CEXn边沿(上、下沿)触发捕捉功能。
    //  1      0      0     1     0     0     x   0x49   16位软件定时器。
    //  1      0      0     1     1     0     x   0x4d   16位高速脉冲输出。
    //  1      0      0     0     0     1     0   0x42   8位 PWM。
    
    //ECOMn  CAPPn  CAPNn  MATn  TOGn  PWMn  ECCFn
    //  0      0      0     0     0     0     0   0x00   无此操作
    //  1      0      0     0     0     1     0   0x42   普通8位PWM, 无中断
    //  1      1      0     0     0     1     1   0x63   PWM输出由低变高可产生中断
    //  1      0      1     0     0     1     1   0x53   PWM输出由高变低可产生中断
    //  1      1      1     0     0     1     1   0x73   PWM输出由低变高或由高变低都可产生中断
    
    //-----------------------
    sfr CCAP0L = 0xEA; //PCA 模块 0 的捕捉/比较寄存器低 8 位。                                    0000,0000
    sfr CCAP0H = 0xFA; //PCA 模块 0 的捕捉/比较寄存器高 8 位。                                    0000,0000
    sfr CCAP1L = 0xEB; //PCA 模块 1 的捕捉/比较寄存器低 8 位。                                    0000,0000
    sfr CCAP1H = 0xFB; //PCA 模块 1 的捕捉/比较寄存器高 8 位。                                    0000,0000
    //-----------------------
    //                                                       7   6   5   4   3   2    1     0    Reset Value
    sfr PCA_PWM0 = 0xF2; //PCA 模块0 PWM 寄存器。            -   -   -   -   -   -  EPC0H EPC0L   xxxx,xx00
    sfr PCA_PWM1 = 0xF3; //PCA 模块1 PWM 寄存器。            -   -   -   -   -   -  EPC1H EPC1L   xxxx,xx00
    //PCA_PWMn:    7      6      5      4      3      2      1      0
    //             -      -      -      -      -      -    EPCnH  EPCnL
    //B7-B2: 保留
    //B1(EPCnH): 在 PWM 模式下,与 CCAPnH 组成 9 位数。
    //B0(EPCnL): 在 PWM 模式下,与 CCAPnL 组成 9 位数。
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机 ADC 特殊功能寄存器
    //                                            7        6      5       4         3      2    1    0   Reset Value
    sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
    sfr ADC_RES  = 0xBD;  //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2     0000,0000
    sfr ADC_RESL = 0xBE;  //A/D 转换结果低2位                                           ADCV.1 ADCV.0     0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机 SPI 特殊功能寄存器
    //                                      7     6     5     4     3     2     1     0    Reset Value
    sfr SPCTL  = 0xCE; //SPI Control Register  SSIG  SPEN  DORD  MSTR  CPOL  CPHA  SPR1  SPR0  0000,0100
    sfr SPSTAT = 0xCD; //SPI Status Register   SPIF  WCOL   -     -     -     -     -     -    00xx,xxxx
    sfr SPDAT  = 0xCF; //SPI Data Register                                                     0000,0000
    //--------------------------------------------------------------------------------
    //新一代 1T 8051系列 单片机 IAP/ISP 特殊功能寄存器
    sfr IAP_DATA    = 0xC2;
    sfr IAP_ADDRH   = 0xC3;
    sfr IAP_ADDRL   = 0xC4;
    //                                                7    6    5      4    3    2    1     0    Reset Value
    sfr IAP_CMD     = 0xC5; //IAP Mode Table          0    -    -      -    -    -   MS1   MS0   0xxx,xx00
    sfr IAP_TRIG    = 0xC6;
    sfr IAP_CONTR   = 0xC7; //IAP Control Register  IAPEN SWBS SWRST CFAIL  -   WT2  WT1   WT0   0000,x000
    //--------------------------------------------------------------------------------
    #endif
    
    
    

     

    
    串口通訊程式/*
    /********************************************************************
    协议规定:
    包头    类型位  数据位    结束位
    0XFF      1           1         0XFF
    各命令说明:
    类型位   数据位    功能
    0X00    0X01    前进
    0X00       0X02    后退
    0X00       0X03    左转
    0X00       0X04    右转
    0X00       0X00    停止
    0X01       0X01    舵机上
    0X01       0X02    舵机下
    0X02       0X01     车灯亮
    0X02       0X02     车灯灭
    0X03      雷达数据   发送雷达数据 
    ***********************************************************************/
    版权声明:
    WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
    您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
    By WIFI机器人网·机器人创意工作室
    */
    #include "uart.h"
    #include <stdio.h>
    #include "motor.h"
    #include "steer.h"
    
    
    
    extern uint16 se_timer[5];
    uint8 buffer[3];
    uint8 rec_flag=0;    //等于0等待接受 等于1正在接受
    
    void UART_init(void)
    {
        PCON |= 0x80;        //使能波特率倍速位SMOD
        SCON = 0x50;        //8位数据,可变波特率
        BRT = RELOAD_COUNT;        //设定独立波特率发生器重装值
        AUXR |= 0x04;        //独立波特率发生器时钟为Fosc,即1T
        AUXR |= 0x01;        //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;        //启动独立波特率发生器
        ES      =   1;    //允许串口中断
        EA      =   1;    //开总中断
        TI      =   1;   
    }
    
    void UART_send_byte(uint8 byte)
    {
        ES     =   0;  //关串口中断
        TI     =   0;  //清零串口发送完成中断请求标志
        SBUF   =   byte;
        while(TI ==0); //等待发送完成
        TI     =   1;  //清零串口发送完成中断请求标志
        ES     =   1;  //允许串口中断
    }
    
    void UART_send(uint8 *Buffer, uint8 Length)
    {
        while(Length != 0)
        {
            UART_send_byte(*Buffer);
            Buffer++;
            Length--;
        }
    
    }
    
    void Communication_Decode(void) 
    {   
        if(buffer[0]==0x00)
        {
            switch(buffer[1])
            {
                case 0x01:MOTOR_GO_FORWARD; return;
                case 0x02:MOTOR_GO_BACK;    return;
                case 0x03:MOTOR_GO_LEFT;    return;
                case 0x04:MOTOR_GO_RIGHT;   return;
                case 0x00:MOTOR_GO_STOP;    return;
                default: return;
            }   
        }
        else if(buffer[0]==0x01)
        {
            if(buffer[2]>180)
                return;
            switch(buffer[1])
            {
                case 0x01:se_timer[0]=buffer[2]; return;
                case 0x02:se_timer[1]=buffer[2]; return;
                case 0x03:se_timer[2]=buffer[2]; return;
                case 0x04:se_timer[3]=buffer[2]; return;
                case 0x05:se_timer[4]=buffer[2]; return;
                default : return;
            }
        }
        else
        {
            return;
        }
    }
    
    void UART_Interrupt_Receive(void) interrupt 4
    {
        static uint8 i;
       
        if(RI==1)
        {
            RI  =   0;
            if(rec_flag==0)
            {
                if(SBUF==0xff)
                {
                    rec_flag=1;   
                    i=0;
                }           
            }
            else
            {
                if(SBUF==0xff)
                {
                    rec_flag=0;   
                    if(i==3)
                    {
                        Communication_Decode();       
                    }
                    i=0;
                }
                else
                {
                    buffer[i]=SBUF;
                    i++;
                }
            }       
        }
        else
        {
            TI  =  0;
        }   
    }
    
    Powered by MindTouch Core