回复
下面是我改了的程序 不知道行不行 你自己试试 我只是凭感觉改的 不知道能不能达到你的目的
#include <reg51.h>
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);
}
发表时间:2006年8月8日11:20:16