萝丽的4路遥控开关,为了缩小pcb体积,想移植到DNF8的8g1k上。纯小白,对着程序百度了3天,还是搞不明白。求教万能的网友怎么改才能移植。
单片机源程序如下:
#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;
/*****************************************************/
//数据标志
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复位
{
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秒关闭输出
}
|