|
本帖最后由 明日香 于 2021-1-29 10:53 編輯
用定時(shí)器0,任選一管腳P21,使其輸出頻率50HZ,周期20ms,輸出1500us的高電平時(shí)間
具體單片機(jī)程序如下:
#include <stc12c5a.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P2^1;//P21輸出PWM波
uchar time=0; //占空比
/**單片機(jī)晶振11.0592MHZ,時(shí)鐘周期為1/11.0592us,8位定時(shí)器最大定時(shí)時(shí)間256us**/
/*11.0592MHZ除以12=921600HZ,就是1秒921600機(jī)器周期,0.1ms就是92機(jī)器周期*/
/** 輸出PWM頻率為50HZ,即周期20ms,分成兩百份,中斷200次**/
/** 定時(shí)器初值:256-92=164 **/
/*周期20ms中高電平時(shí)間為1.5ms,也就是15*0.1ms*/
void time0init()//定時(shí)器0初始化
{
TMOD=0X02;//定時(shí)器0,工作方式2
TH0=164;
TL0=164;
ET0=1;
EA=1;
TR0=1;//開啟定時(shí)器
}
void timer0() interrupt 1
{
TR0=0;//賦初值時(shí)關(guān)閉定時(shí)器
TH0=164; //定時(shí)器賦初值
TL0=164; //定時(shí)器賦初值
TR0=1;
time++;
if(time == 200)//PWM周期為0.1ms*200=20ms
{
time=0;
PWM=1;
}
if(time == 15)//占空比為15%,高電平時(shí)間為1500us
PWM=0;
}
void main()
{
time0init();
while(1)
{
}
}
用這是proteus仿真的波形:為啥會出現(xiàn)連續(xù)的波形呢?這明顯不對啊,請問程序哪里不對呢?
|
|