[求教]一段中断程序
我要用单片机输出占空比可变的20k的pwm,pwm用两个定时器采用工作方式二产生,P2—7输出pwm,外部中断产生时,P1—0~P1—5,P2—6七个口并行送入pwm占空比的值,大约几百ms送一次,由另一个单片机与此单片机直接相连,产生中断并送数,现在问题是pwm能输出,外部中断0有下降沿跳变,但输出的pwm占空比始终不变为什么?
#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
}
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);
}
发表时间:2006年8月7日19:10:18