51单片机中断编程

已知89C51单片机的晶振频率为6MHz,T1扩展为第三外部终端源,用T0定时。试编程实现T1扩展为第三外部终端源功能(每次中断就取反P1.2引脚)且由P1.0和P1.1引脚分别输出周期为3ms和600us的方波。(用中断编程,T1用模式2、T0用模式1;写出定时计数初值计算过程,程序的首地址从0000H开始,注释每条语句)
回答的对的追加50分

外部中断信号接到P3.3口,为INT0中断,程序如下
#include<reg51.h>
sbit X0=P1^0; //用X0表示P1.0
sbit X1=P1^1; //用X0表示P1.1
sbit X2=P1^2; //用X0表示P1.2
void main(void)
{
P1=0x00; //将P1口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
EA=1; //中断允许
IT1=1; //触发方式为下降沿触发
EX1=1; //外部中断允许

while(1); //这里可以随便写你需要的主程序,我用了个死循环,目的是等待中断
}

void counter1(void) interrupt 2 //INT1中断
{
EX1=0; //禁止外部中断
ET0=1; //计时器中断0允许
ET1=1; //计时器中断1允许
TMOD=0x21; //T1用模式2、T0用模式1
IP=0x0a; //T1、T0为高优先级
X2=~X2; //每次中断就取反P1.2引脚
X1=1; //P1.1输出低电平0.3ms
X0=1; //P1.0输出低电平1.5ms
TH0=0xfd; //T0用模式1,16位计时器,在1.5ms后执行时间中断0
TL0=0x12;
TH1=0x6a; //T1用模式2,8位计时器,在0.3ms执行时间中断1
TL1=0x6a;
TR1=1; //启动计时器T1
TR0=1; //启动计时器T0
while(X0==1); //等待中断响应完成
EX1=1; //允许外部中断

}
void counter2(void) interrupt 1 //定时器0中断
{
X0=0;
}
void counter3(void) interrupt 3 //定时器1中断
{
X1=0;
}
程序已经经过仿真调试,可以完成你的要求,等待加分中。。。。
PS一下,如果满意的话,十分期待给好评,谢谢了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-25
开中断以后,在中断服务子程序中设置一个中断次数计数器,统计达到2次后
中断次数计数器清0,然后再把莫寄存器加一。
第2个回答  2011-06-25
找找datasheet看看
第3个回答  2011-06-25
awd