解:设fosc = 12MHz,则机器周期为1us。设P1.0初值为0。
周期为400us,可定义方式2定时,计数初值为256-40,一个周期中断10次为400us,在中断计数为1和2(或任意两次计数之间)时,对P1.0求反即可。
#include
sbit P1_0=P1^0; //输出周期引脚
unsigned char cnt=0; //中断次数计数器,初值为0
void main(){
P1_0=0; //输出初值为0
TMOD=0x02; //T0方式2定时
TH0=256-40; //计40次,计数初值为模256减40
TL0=TH0;
IE=0x82; //允许CPU响应中断,允许T0发中断请求
TR0=1; //启动T0
for(;;){} //无限循环等待中断
}
void timer0()interrupt 1 using 1{
cnt++;//中断次数加1
if(cnt==1||cnt==2) P1_0=!P1_0; //中断次数为1或2时对输出引脚求反
if(cnt==10)cnt=0; //中断次数达到10时复位为0
}