自己写了一个PWM波程序,频率50HZ,用的STC12C5A单片机,然后用逻辑分析仪测了一下,结果出现了错误的连续波
我在一个群里问了一下,有人用51单片机运行我的程序,结果却是对的
但我用STC12C5a单片机,波形却不对,请问这是为啥呢?是因为STC12C和51之间的差别造成的吗?该如何修改呢?谢谢老哥们指点
源程序如下:
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/*用定时器T0,任选一管脚P21输出PWM波*/
/*单片机晶振11.0592MHZ,时钟周期为1/11.0592us*/
/*11.0592M除以12=921600,就是1秒921600个机器周期*/
/*0.1ms就是92机器周期,输出PWM波周期为20ms,分成200份,
中断200次,定时器初值为256-92=164*/
/*周期20ms中高电平时间1.5ms,也就是0.1ms×15*/
sbit PWM=P2^1;//P21输出PWM波
uchar time=0; //占空比
void time0init()//定时器初始化
{
TMOD=0X02;//定时器0工作方式2,8位重装
TH0=164;//92个机器周期,即0.1ms
TL0=164;
ET0=1;
EA=1;
TR0=1;
}
void time0() interrupt 1
{
time++;
if(time<200)//周期为0.1ms*200=20ms
{
if(time<=15)//高电平时间为0.1ms*15=1.5ms
PWM=1;
else
PWM=0;
}
else
time=0;
}
void main()
{
time0init();
while(1)
{
}
}
|