|
蘿麗的4路遙控開關(guān),為了縮小pcb體積,想移植到DNF8的8g1k上。純小白,對著程序百度了3天,還是搞不明白。求教萬能的網(wǎng)友怎么改才能移植。
單片機源程序如下:
#include<STC8G.h>
#define u8 unsigned char
#define u16 unsigned int
/*****************************************************/
//15w寄存器,8g頭文件有,注釋掉
//sfr P3M0=0xb2;
//sfr AUXR=0x8e;
//sfr T2H=0xd6;
//sfr T2L=0xd7;
//sfr IE2=0xaf;
/*****************************************************/
//數(shù)據(jù)標(biāo)志
sbit LED=P5^5;
sbit IN=P5^4; //原來是3.5、3.4換8g1k沒有這兩個
sbit OUT1=P3^3;
sbit OUT2=P3^2;
sbit OUT3=P3^1;
sbit OUT4=P3^0;
u16 time,tt;
u8 reset,n,over=1,t_out;
/******************************************************/
//脈寬測量
void measure()
{
time=0;
TL0=0,TH0=0;
while(!IN);
TR0=1;
while(IN);
TR0=0;
time=TH0;
time<<=8;
time+=TL0;
}
void initial()
{
P3=0xf0; //P5口不知道怎么加進來,定時器怎么改
P3M0=0x2f;
TMOD=0x01;
measure();
measure();
measure();
measure();
measure();
while(over) //上電等正確信號
{
measure();
if(time<1300&&time>800)over=0;
}
}
main()
{
initial();
LED=0;
IE=0x80;
IE2=0x04;
while(1)
{
measure();
if(time>800&&time<2200)
{
if(time>1700)
{
if(reset)
{
n++;
if(n>4) //5次信號正確再啟動
{
n=0,tt=0;
t_out++;
if(t_out>4)t_out=1;
reset=0;
AUXR=0x10; //打開定時器2
}
}
}
else if(time<1300) //低于1.4ms復(fù)位
{
n++;
if(n>4)n=0,reset=1;
}
}
else n=0,reset=0;
}
}
void et2()interrupt 12
{
if(t_out==1) //接通3.3
{
OUT1=1,OUT2=0,OUT3=0,OUT4=0;
}
else if(t_out==2) //3.2
{
OUT1=0,OUT2=1,OUT3=0,OUT4=0;
}
else if(t_out==3) //3.1
{
OUT1=0,OUT2=0,OUT3=1,OUT4=0;
}
else if(t_out==4) //3.0
{
OUT1=0,OUT2=0,OUT3=0,OUT4=1;
}
tt++;
if(tt%2==0)LED=!LED;//閃爍LED
if(tt>30)P3=0xf0,AUXR=0,tt=0,LED=0; //延時2秒關(guān)閉輸出
}
|
|