?? rmt.c.bak
字號:
#include "define.h"
#pragma EI
#pragma DI
#pragma rot
#pragma vect INTP0 INTP0_Int
#define CustomecodeA 0b10101010
#define CustomecodeB 0b01010101
unsigned char MODEP; //Step for remote control
unsigned char m,n; //Number of remote date
unsigned char D_BAKt20; //Backup time of edge falling in remote signal
unsigned char Rmt_cnt; //Counter for first code of 9ms low signal
unsigned char REGTM20; //Time of edge falling in remote signal
unsigned char D_RMTbuf[7]; //Date of remote
unsigned char D_TMPsetp,C_SettimeB; //for display use ,set temprature
sreg unsigned char M_flag;
#define f_rmtok M_flag.0 //remote signal receive ok
#define f_PWRon1 M_flag.1 //power on flag
#define f_TMRset M_flag.2 //flag of timing set of power on or off
#define f_ton M_flag.3 //time set of power on
#define f_toff M_flag.4 //time set of power off
#define f_temph M_flag.5
extern unsigned char C_RMT1s,C_cnt8; //delay time for remote ,to control mode
extern unsigned char M_MODrun;
extern unsigned char M_FANset;
extern unsigned char M_auto;
extern unsigned char D_TMPset,M_MODset,C_Settime;
extern sreg unsigned char V_flag;
#define f_temp V_flag.0
#define f_quick V_flag.1
#define f_mode V_flag.2
#define f_COOLonly V_flag.3
#define f_capa V_flag.4
extern sreg unsigned char M_flag2;
#define f_PWRon M_flag2.0 //flag of power on
extern sreg unsigned char flag;
#define f_settm flag.2
extern sreg unsigned char M_flag4;
#define f_SLEEP M_flag4.7
extern sreg unsigned char flagkey;
#define f_slpkey flagkey.5
const char TEMPTAB[26]=
{ 0, //0
1, //1
1, //2
2, //3
2, //4
3,
3,
4,
5,
5,
6,
6,
7,
7,
8,
8,
9,
10,
10,
11,
11,
12,
12,
13,
13,
14,
};
void headb(void);
void heada(void);
void DATACD(void);
void head5(void);
void BAKtm20(void);
void Rotrmt(unsigned char k);
void Rmtfunc(void);
void BEEP1tms(void);
void PWRset(void);
//void M_auto(void);
void MautoCHK(void);
void SETtmr(void);
void RtmpSET(void);
void RfanSET(void);
void RslpSET(void);
void Rmtdec()
{ register unsigned char reg1,reg2,reg3,reg4;
if(f_rmtok)
{ f_rmtok=0;
f_iicen=1;
reg2=D_RMTbuf[5]; // custom check
reg1=D_RMTbuf[6];
reg1&=0b00001111; //clear high 4 bit
reg2&=0b11110000; //clear low 4 bit
reg4=reg3=CustomecodeA;
if(f_temp)
{
reg3=reg4=CustomecodeB;
}
reg3&=0b00001111; //shift customcode to right
reg4&=0b11110000; //shift custmocode to left
if(reg1==reg3&®2==reg4) //compare customecode
Rmtfunc(); // remote date decode
else
return;
}
}
void Rmtfunc()
{unsigned char reg1,reg2;
reg1=D_RMTbuf[0];
reg1&=0b00000011;
if(reg1==3)
{if(f_COOLonly)
{ if(f_PWRon1)
PWRset();
return;
}
}
reg1=D_RMTbuf[0];
reg1&=0b00000100;
if(reg1==4) //automode check for display first
{ MautoCHK();
M_auto=M_MODrun;
M_MODset=4;
}
else
{reg1=D_RMTbuf[0];
reg1&=0b00000011;
M_MODset=reg1;
}
C_RMT1s=2;
SETtmr(); //timing time decode
PWRset(); //decode for power on or off
BEEP1tms(); //beep on
RtmpSET(); //temprature decode
RslpSET(); //slp check
RfanSET(); //fan mode decode
}
void PWRset()
{
register unsigned char reg1,reg2;
reg1=D_RMTbuf[0];
reg1&=0b00001000;
if(reg1!=8)
{if(!f_PWRon1)
return;
else
{ f_PWRon1=0;
}
}
else
{
if(f_settm)
{
f_PWRon1=0;
return;
}
else
{if(f_PWRon1)
return;
else
{
f_PWRon1=1;
// f_TMRset=0;
}
}
}
}
//=======================================
void SETtmr()
{register unsigned char reg1,reg2;
reg1=D_RMTbuf[4];
reg1&=0b01000000;
if(reg1==0x40)
{ f_settm=1;
reg1=D_RMTbuf[4];
reg1&=0b00001111;
reg1+=reg1;
reg2=D_RMTbuf[3];
reg2&=0b11110000;
if(reg2==0x30)
{reg1++;
}
reg2=D_RMTbuf[4];
reg2&=0b00010000;
if( reg2==0x10)
reg1+=20;
C_Settime=reg1;
C_cnt8=0; //clear count of setting time
}
else
f_settm=0;
if(!f_PWRon1) //if(Power off , cancel set time power on function
f_ton=0;
C_SettimeB=C_Settime;
}
//========================================
void RtmpSET()
{register unsigned char reg1,*reg2,reg3;
reg1=D_RMTbuf[5];
reg1&=0b00001111;
D_TMPset=reg1;
if(f_temp)
{ reg3=D_RMTbuf[4];
reg3&=0b10000000;
if(reg3==0x80)
{f_temph=1;
reg1+=16;
}
D_TMPsetp=reg1;
reg2=(unsigned char *)(reg1+TEMPTAB);
D_TMPset= * reg2;
}
else
D_TMPset=D_TMPset+16;
}
//==========================================
void RslpSET()
{register unsigned char reg1,reg2;
reg1=D_RMTbuf[4];
reg1&=0b00100000;
if(reg1==32) //Sleep bit
{ f_SLEEP=1;
reg1=D_RMTbuf[4];
reg1&=0b00001111;
reg1+=1;
reg1+=reg1;
C_Settime=reg1;
C_cnt8=0;
f_slpkey=0;
}
if(reg1==0)
{
f_SLEEP=0;
f_toff=0;
if(!f_settm)
{
C_Settime=0;
}
}
C_SettimeB=C_Settime;
}
void RfanSET()
{
register unsigned char reg1;
reg1=D_RMTbuf[0];
reg1&=0b00110000;
reg1=rorb(reg1,4);
M_FANset=reg1;
if(M_MODset==n_Mdry)
M_FANset=n_FANlow;
}
void TMRremot() //check the start code 9ms
{ if(!MODEP)
{ if(!i_rmt)
{ Rmt_cnt++;
if(Rmt_cnt>=8)
{ MODEP=1;
D_BAKt20=TM50;
PMK0=0;
Rmt_cnt=0;
INTM0=4; //RISING CAPTURE
}
else
{
return;
}
}
else
{ Rmt_cnt=0;
PMK0=1; //off intp0
return;
}
}
}
//===================================
void INTP0_Int()
{ PMK0=1;
PIF0=0;
BAKtm20();
switch(MODEP)
{case 1: heada();
break;
case 2: headb();
break;
case 3: DATACD();
break;
default: head5();
break;
}
}
//===================================
void heada()
{ if(i_rmt)
{
if(REGTM20>=25&®TM20<=65) //2ms
{ MODEP=2;
INTM0=0; //check mode is terminated ;change to FALLING EDGE mode
}
else
{ head5();
return;
}
}
PMK0=0;
EI();
}
void headb()
{ register unsigned char i;
if(!i_rmt)
{
if(REGTM20>=130&®TM20<=155) //4.5ms high level //32us/step
{ for(i=0;i<7;i++)
D_RMTbuf[i]=0;
MODEP=3;
}
else
{ head5();
return;
}
}
PMK0=0;
}
void DATACD()
{register unsigned char i;
if(!i_rmt)
{
if(REGTM20>=30)
{if(REGTM20<=105)
{if(REGTM20<=45)
i=0;
else
i=1;
Rotrmt(i);
}
else
{head5();
return;
}
}
else
{head5();
return;
}
}
PMK0=0;
}
void head5()
{ m=n=0;
MODEP=0;
PMK0=1;
}
void BAKtm20()
{ REGTM20=TM50-D_BAKt20;
D_BAKt20=TM50;
}
void Rotrmt(unsigned char k)
{
if(k)
D_RMTbuf[n]|=0b10000000;
else
D_RMTbuf[n]&=0b01111111;
m++;
if(m<8)
D_RMTbuf[n]=rorb(D_RMTbuf[n],1);
if(m>=8)
{
m=0;
n++;
if(n>=7)
n=0;
}
if(n==6&&m==4)
{ f_rmtok=1;
m=n=0;
D_RMTbuf[6]=rorb(D_RMTbuf[6],3);
MODEP=0;
PMK0=1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -