初次接触1T的stc15W408as单片机,不清楚哪些程序要改动?
请教如何把89c52单片机红外解码程序移植到15W408中运行?
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};
sbit IR = P3^2; //红外接收端
uchar N[4]; //识别码,操作码存放
uchar sj=0;
void XSQ(void);
void YS(uchar time);
/****************** 主函数 *******************/
void main(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
while(1)
{
XSQ();
}
}
/**********************数码管显示函数************************/
void XSQ(void)
{
P0=tab[X3];
P2_6=0;
YS(1); //操作码
P2_6=1;
P0=tab[X4];
P2_7=0;
YS(1);
P2_7=1;
}
/********************** 外部中断函数************************/
void exint0() interrupt 0
{
uint cnt;
uchar i;
EX0 = 0;
cnt = 0;
while(!IR) cnt++; //记录引导码时间
if(cnt < 1000){EX0=1;return;} //9ms的计数值(12MHz:1000< cnt <1500)
cnt = 0;
while(IR) if(cnt++ > 400){EX0=1;return;} //防卡死,超时保护(12MHz: > 300)
if(cnt < 200){EX0=1;return;} //(12MHz不分频: <260)
for(i=0; i<32; i++) //读取32位位码
{
cnt = 0;
while(!IR);
while(IR) if(cnt++ > 200){EX0=1;return;} //超时保护(12MHz:>=200)
N[i/8] >>= 1;
if(cnt>60) N[i/8] |= 0x80; //0和1的计数界线(12MHz:< 109)
}
if(N[0] == ~N[1] && N[2] == ~N[3]) //校验识别码,操作码
{
X1 = N[0]/16;
X2 = N[0]%16;
X3 = N[2]/16;
X4 = N[2]%16;
}
EX0 = 1;
}
/***************************************************************
函数功能:按键消抖 延时程序
入口参数:1ms×time (晶振=12MHz)
***************************************************************/
void YS(uchar time)
{
uchar i,j;
for(i=0; i<time; i++)
for(j=0; j<247; j++)
_nop_();
}
|