使用51单片机,晶振频率为6MHz,使用定时器0,以 方式2,在P1.0输出周期400us, 占空
发布网友
发布时间:2022-04-23 16:38
我来回答
共2个回答
热心网友
时间:2023-10-09 13:49
#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则产生的波形不准确。
热心网友
时间:2023-10-09 13:50
如下即可:
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