sbit P1_0=P1^0; //并行输入口
sbit P1_1=P1^1; //并行输入口
sbit P1_2=P1^2; //并行输入口
sbit P1_3=P1^3; //并行输入口
sbit P1_4=P1^4; //并行输入口
sbit P1_5=P1^5; //并行输入口
sbit P2_6=P2^6; //并行输入口
sbit P2_7=P2^7; //并行输入口
unsigned int t=30;
void timer0(void) interrupt 1 using 1 //定时器0中断服务程序
{
TR0=0;
P2_7=1;
TR1=1;
}
void timer1(void) interrupt 3 using 2 //定时器1中断服务程序
{
TR1=0;
P2_7=0;
TR0=1;
}
void service_int1(void) interrupt 0 using 3 //外部中断服务程序
{
EA=1; //实现中断嵌套
t=0;
if(P2_6) t=64; //接收数据
if(P1_5) t=t+32;
if(P1_4) t=t+16;
if(P1_3) t=t+8;
if(P1_2) t=t+4;
if(P1_1) t=t+2;
if(P1_0) t=t+1;
t=t/2; //送入t的范围是2= <t <=80
}
void main(void)
{
IP=0x0a; //优先级设定,定时器高,外部中断低
IT0=1; //下降沿触发
TMOD=0x22; //工作方式二
TH1=256-t; //装载初值
TL1=TH1;
TH0=256-(41-t);
TL0=TH0;
IE=0x8b; //开中断
TR0=1; //开定时器
while(1);
}
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
unsigned int t=30;
void timer0(void) interrupt 1 using 1 //定时器0中断服务程序
{
TR0=0;
P2_7=0;
}
void timer1(void) interrupt 3 using 2 //定时器1中断服务程序
{
P2_7=1;
TR0=1;
}
void service_int1(void) interrupt 0 using 3 //外部中断服务程序
{
EA=1;
t=0;
if(P2_6) t=64;
if(P1_5) t=t+32;
if(P1_4) t=t+16;
if(P1_3) t=t+8;
if(P1_2) t=t+4;
if(P1_1) t=t+2;
if(P1_0) t=t+1;
t=t/2;
}
void main(void)
{
while(1)
{
IP=0x0a;
IT0=1;
TMOD=0x22;
TH1=256-41;
TL1=TH1;
TH0=256-t;
TL0=TH0;
IE=0x8b;
TR0=1;
TR1=1;
}
}
sbit P1_0=P1^0; //并行输入口
sbit P1_1=P1^1; //并行输入口
sbit P1_2=P1^2; //并行输入口
sbit P1_3=P1^3; //并行输入口
sbit P1_4=P1^4; //并行输入口
sbit P1_5=P1^5; //并行输入口
sbit P2_6=P2^6; //并行输入口
sbit P2_7=P2^7; //并行输入口
unsigned int t=30;
void timer0(void) interrupt 1 using 1 //定时器0中断服务程序
{
TR0=0;
P2_7=1;
TR1=1;
}
void timer1(void) interrupt 3 using 2 //定时器1中断服务程序
{
TR1=0;
P2_7=0;
TR0=1;
}
void service_int1(void) interrupt 0 using 3 //外部中断服务程序
{
EA=1; //实现中断嵌套
t=0;
if(P2_6) t=64; //接收数据
if(P1_5) t=t+32;
if(P1_4) t=t+16;
if(P1_3) t=t+8;
if(P1_2) t=t+4;
if(P1_1) t=t+2;
if(P1_0) t=t+1;
t=t/2; //送入t的范围是2= <t <=80
TMOD=0x22; //工作方式二
TH1=256-t; //装载初值
TL1=TH1;
TH0=256-(41-t);
TL0=TH0;
TR0=1;
}
void main(void)
{
IP=0x01; //优先级设定,定时器低,外部中断高, 只有通过外部设置好
了占空比后才可能产生定时中断
IT0=1; //下降沿触发
IE=0x8b; //开中断
//TR0=1; //开定时器
while(1);
}