˜Ëî}: ¼tÍâʹÓÃ†ÎÆ¬™CÍⲿÖДà+¶¨•rÆ÷½â´a [´òÓ¡±¾í“]

×÷Õß: Á_ÎĽܠ   •rég: 2018-8-5 21:36
˜Ëî}: ¼tÍâʹÓÃ†ÎÆ¬™CÍⲿÖДà+¶¨•rÆ÷½â´a
°üº¬Á˼tÍâ½â´a£¬×Ô„Ó¸ù“þ²¨ÌØÂÊÔOÖö¨•rÆ÷Òç³öÂÊÒÔ¼°Ê¹Óö¨•rÆ÷ÑÓ•r
´®¿Ú²¿·Ö£º
void UART1_Init(u32 Boud)
{
        u16 Temp = (65536 - FOSC/Boud/4);
        SCON = 0x50;
    T2L = Temp;        
    T2H = Temp >> 8;
    AUXR |= 0x15;                                //†¢„Ó¶¨•rÆ÷
    ES = 1;                                     //ʹÄÜ´®¿ÚÖДà
}
char putchar(u8 c)
{
        SBUF = c;
        while(!TI);
        TI = 0;
        return c;
}
void UART1_ISR() interrupt 4 using 1
{
    if(RI)
    {
        RI = 0;                                 //ÇåÖДà˜ËÖ¾
    }
//        if(TI)
//        {
//                TI = 0;                                 //ÇåÖДà˜ËÖ¾
//        }
}

//¶¨•rÆ÷ÑÓ•r²¿·Ö
#include "delay.h"
#define TICK_US                (FOSC/1000000/12)
volatile u16 told = 0;                                //Ó‹”µÆ÷ÅfÖµ               
volatile u16 tnow = 0;                                //Ó‹”µÆ÷ÐÂÖµ               
volatile u16 tick = 0;                                //Ó‹”µÖµ               
volatile u16 delay_tick = 0;                //ÑÓ•rÓ‹”µÖµ
void delay_init(void)
{
        T4L = 0;                                
    T4H = 0;
        T4T3M &= 0x0F;
        T4T3M |= B1000_0000;         //†¢„Ó¶¨•rÆ÷ 12T
        told = 0;                        
        tnow = 0;
        tick = 0;
        delay_tick = 0;
}
void delay(u16 us)
{
        told = T4H << 8 | T4L;                        
        tnow = 0;tick = 0;
        delay_tick = us * TICK_US;
        while(1)
        {
                tnow = T4H << 8 | T4L;
                if(tnow != told)
                {
                        if(tnow > told)
                        {
                                tick += tnow - told;
                        }
                        else                                //¶¨•rÆ÷Òç³ö
                        {
                                tick += 65535 + tnow - told;
                        }
                        told = tnow;
                        if(tick >= delay_tick)
                                break;
                }
        }
}

//¼tÍâ½â´a
#include "INT.h"
#include "USART.h"
u8 IR_Cnt = 0;
#define T51                                (FOSC/1000000/12)
#define REMOTE_ID                 0   
//ßb¿ØÆ÷½ÓÊÕ î‘B(t¨¤i)
//[7]:ÊÕµ½ÁËÒýŒ§´a˜ËÖ¾
//[6]:µÃµ½ÁËÒ»‚€°´æIµÄËùÓÐÐÅÏ¢
//[5]:±£Áô        
//[4]:˜ËÓ›ÉÏÉýÑØÊÇ·ñÒѽ›±»²¶«@                                                                  
//[3:0]:Òç³öÓ‹•rÆ÷
u8 IR_sta = 0;
u32 IR_Rec = 0;
sbit INT0 = P3^2;
void IR_Init(void)
{
        IT0 = 0;            //ʹÄÜINT0ÉÏÉýÑØºÍϽµÑØÖДà
    EX0 = 1;             //ʹÄÜINT0ÖДà
        AUXR &= 0x7F;                //¶¨•rÆ÷•rçŠ12Tģʽ
        TMOD &= 0xF0;                //ÔOÖö¨•rÆ÷ģʽ
        TMOD |= 0x01;                //ÔOÖö¨•rÆ÷ģʽ
        TF0 = 0;                //Çå³ýTF0˜ËÖ¾
        TL0 = 0;                //ÔOÖö¨•r³õÖµ
        TH0 = 0;                //ÔOÖö¨•r³õÖµ
        TR0 = 0;                //¶¨•rÆ÷0é_ʼӋ•r
        ET0 = 1;
}
//ÌŽÀí¼tÍâæI±P
//·µ»ØÖµ:
//         0,›]ÓÐÈκΰ´æI°´ÏÂ
//ÆäËû,°´Ïµİ´æIæIÖµ.
u8 IR_Scan(void)
{      
        u8 Key = 0;      
        if(IR_sta & (1<<6))//µÃµ½Ò»‚€°´æIµÄËùÓÐÐÅÏ¢ÁË
        {  
                u8 TEMP[2];
            TEMP[0] = IR_Rec>>24;                        //µÃµ½µØÖ·´a
            TEMP[1] = (IR_Rec>>16)&0xff;        //µÃµ½µØÖ··´´a
             if((TEMP[0] == (u8)~TEMP[1]) && TEMP[0] == REMOTE_ID)//™zòžßb¿Ø×R„e´a(ID)¼°µØÖ·
            {
                TEMP[0] = IR_Rec>>8;
                TEMP[1] = IR_Rec;         
                if(TEMP[0] == (u8)~TEMP[1])
                                Key = TEMP[0];//æIÖµÕý´_         
                }
                if(Key == 0||(IR_sta&0X80) == 0)//°´æI”µ“þåeÕ`/ßb¿ØÒѽ››]Óа´ÏÂÁË
                {
                        IR_sta&=~(1<<6);//Çå³ý½ÓÊÕµ½ÓÐЧ°´æI˜Ë×R
                        IR_Cnt = 0;                //Çå³ý°´æI´Î”µÓ‹”µÆ÷
                }
        }  
    return Key;
}

void INT0_ISR(void) interrupt 0 using 1
{
        if(INT0)//ÉÏÉýÑØ²¶«@
        {
                TL0 = 0;                //ÔOÖö¨•r³õÖµ
                TH0 = 0;                //ÔOÖö¨•r³õÖµ
                TR0 = 1;                //¶¨•rÆ÷0é_ʼӋ•r
                IR_sta |= 0X10;                                        //˜ËÓ›ÉÏÉýÑØÒѽ›±»²¶«@
        }
        else //ϽµÑز¶«@
        {
                u16 Count_Time = 0;
                Count_Time = TH0 << 8|TL0;                                
                TL0 = 0;                //ÔOÖö¨•r³õÖµ
                TH0 = 0;                //ÔOÖö¨•r³õÖµ
                if(IR_sta & 0X10)                                        //Íê³ÉÒ»´Î¸ßëŠÆ½²¶«@
                {
                        if(IR_sta & 0X80)//½ÓÊÕµ½ÁËÒýŒ§´a
                        {
                                if(Count_Time > (300 * T51) && Count_Time < (800 * T51))                        //560žé˜ËœÊÖµ,560us
                                {
                                        IR_Rec <<= 1;        //×óÒÆÒ»Î».
                                        IR_Rec |= 0;        //½ÓÊÕµ½0        
                                }
                                else if(Count_Time > (1400 * T51) && Count_Time < (1800 * T51))        //1680žé˜ËœÊÖµ,1680us
                                {
                                        IR_Rec <<= 1;        //×óÒÆÒ»Î».
                                        IR_Rec |= 1;        //½ÓÊÕµ½1
                                }
                                else if(Count_Time > (2200 * T51) && Count_Time < (2600 * T51))        //µÃµ½°´æIæIÖµÔö¼ÓµÄÐÅÏ¢ 2500žé˜ËœÊÖµ2.5ms
                                {
                                        IR_Cnt++;                 //°´æI´Î”µÔö¼Ó1´Î
                                        IR_sta&=0XF0;        //Çå¿ÕÓ‹•rÆ÷        
                                }
                        }
                        else if(Count_Time > (4200 * T51) && Count_Time < (4700 * T51))                //4500žé˜ËœÊÖµ4.5ms
                        {
                                IR_sta|=1<<7;        //˜ËÓ›³É¹¦½ÓÊÕµ½ÁËÒýŒ§´a
                                IR_Cnt=0;                //Çå³ý°´æI´Î”µÓ‹”µÆ÷
                        }                                                
                }
                IR_sta &=~(1<<4);
        }               
}
void TIME0_ISR(void) interrupt 1 using 1
{
    TL0 = 0;                //ÔOÖö¨•r³õÖµ
        TH0 = 0;                //ÔOÖö¨•r³õÖµ
        if(IR_sta&0x80)//ÉÏ´ÎÓДµ“þ±»½ÓÊÕµ½ÁË
        {        
                IR_sta &= ~0X10;                                                //È¡ÏûÉÏÉýÑØÒѽ›±»²¶«@˜ËÓ›
                if((IR_sta&0X0F) == 0X00)
                        IR_sta|=1<<6;//˜ËÓ›Òѽ›Íê³ÉÒ»´Î°´æIµÄæIÖµÐÅÏ¢²É¼¯        
                if((IR_sta&0X0F) < 14)
                        IR_sta++;
                else
                {
                        TR0 = 0;                //¶¨•rÆ÷0é_ʼӋ•r
                        IR_sta&=~(1<<7);//Çå¿ÕÒýŒ§˜Ë×R
                        IR_sta&=0XF0;        //Çå¿ÕÓ‹”µÆ÷        
                }                        
        }        
}


STC8.rar

288.26 KB, ÏÂÝd´Î”µ: 28, ÏÂÝd·e·Ö: ºÚŽÅ -5


×÷Õß: wuyuwangluo    •rég: 2018-8-22 00:22
˜ËӛϠ ¸ÐÖx˜ÇÖ÷
×÷Õß: HongZQ2007    •rég: 2018-10-21 23:22
¸ÐÖxÄúµÄŸo˽·ÖÏí£¬ÖxÖxÄ㣡£¡£¡
×÷Õß: lindeijun1    •rég: 2018-10-22 15:39
ÖxÖx˜ÇÖ÷·ÖÏí
×÷Õß: wxbdcmh    •rég: 2020-6-24 20:10
ÖxÖx˜ÇÖ÷·ÖÏí




šgÓ­¹âÅR (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1