使用51单片机,晶振频率为6MHz,使用定时器0,以 方式2,在P1.0输出周期400us, 占空

使用51单片机,晶振频率为6MHz,使用定时器0,以 方式2,在P1.0输出周期400us, 占空比为1:10的方波,以中断方式编程

#include<reg52.h>

sbit P1_1=P1^0;//PWM输出
unsigned int num;//定时器计时标志位,一次40us

/*********************************************************
主函数
**********************************************************/
void main()
{
TMOD=0x02; //设置定时器0工作方式2 (00000010)
TH0=256-20;//40us@6MHz 方式2为八位初值自动装载
TL0=256-20;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
// num = 0;//定时器计时标志位,一次40us
while(1);//等待

}

/********************************************************
中断函数
********************************************************/
void time0() interrupt 1
{
// TL0 = (65536-50) % 256;
// TH0 = (65536-50) / 256; //50us @12MHz
num++;
if(num>=10)num=0;//PWM周期为 40*10=400us
if(num<1)P1_1=0xff;
else P1_1=0x00;
}

周期为:400us,40us产生一次中断,所以占空比为1:9 。占空比为1:10则产生的波形不准确。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-10
如下即可:

ORG 0000H
SJMP START
;----------------------
ORG 000BH
CLR P1.0
DJNZ R2, T0_EXIT
SETB P1.0
MOV R2, #10
T0_EXIT:
RETI
;----------------------
START:
MOV TMOD, #02H
MOV TH0, #236
MOV TL0, #236
SETB TR0
MOV IE, #82H
MOV R2, #10
SJMP $
;----------------------
END本回答被提问者采纳