|
自己寫了一個PWM波程序,頻率50HZ,用的STC12C5A單片機(jī),然后用邏輯分析儀測了一下,結(jié)果出現(xiàn)了錯誤的連續(xù)波
捕獲1.PNG (4.19 KB, 下載次數(shù): 89)
下載附件
2021-3-10 09:53 上傳
我在一個群里問了一下,有人用51單片機(jī)運(yùn)行我的程序,結(jié)果卻是對的
但我用STC12C5a單片機(jī),波形卻不對,請問這是為啥呢?是因?yàn)镾TC12C和51之間的差別造成的嗎?該如何修改呢?謝謝老哥們指點(diǎn)
源程序如下:
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/*用定時(shí)器T0,任選一管腳P21輸出PWM波*/
/*單片機(jī)晶振11.0592MHZ,時(shí)鐘周期為1/11.0592us*/
/*11.0592M除以12=921600,就是1秒921600個機(jī)器周期*/
/*0.1ms就是92機(jī)器周期,輸出PWM波周期為20ms,分成200份,
中斷200次,定時(shí)器初值為256-92=164*/
/*周期20ms中高電平時(shí)間1.5ms,也就是0.1ms×15*/
sbit PWM=P2^1;//P21輸出PWM波
uchar time=0; //占空比
void time0init()//定時(shí)器初始化
{
TMOD=0X02;//定時(shí)器0工作方式2,8位重裝
TH0=164;//92個機(jī)器周期,即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)//高電平時(shí)間為0.1ms*15=1.5ms
PWM=1;
else
PWM=0;
}
else
time=0;
}
void main()
{
time0init();
while(1)
{
}
}
|
|