标题:
关于单片机PWM频率输出问题,请指教...
[打印本页]
作者:
Listen丶51
时间:
2018-4-14 12:44
标题:
关于单片机PWM频率输出问题,请指教...
本帖最后由 Listen丶51 于 2018-4-14 12:45 编辑
/*
/*******************
工作芯片:STC 15W101
********************
*/
#include <reg51.h>
#include<RegDefined.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit PWM = P3^4;
sbit key = P3^5;
sbit r_led = P3^2;
sbit g_led = P3^1;
sbit b_led = P3^3;
sbit BEEP = P3^0;
//u8 Motor_on[]={0,5,10,15};
char timer;
/*
void delay(u16 num)
{
u16 x,y;
for(x=num; x>0; x--)
for(y=110; y>0; y--)
{
;
}
}
*/
void IO_Init(void)
{
P3M0 = 0x10;
P3M1 = 0x20;
PWM = 0;
r_led = 1;
g_led = 1;
b_led = 1;
}
void InitTimer0(void)
{
TMOD = 0x01;
//TL0 = 0x48; //200us定时
//TL0 = 0x0A4;
TH0 = 0x0FF; //5us定时
TL0 = 0x0FB;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main (void)
{
IO_Init();
InitTimer0();
while(1);
}
void timer_t0(void) interrupt 1//定时器0中断服务函数,入口 定时200us
{
//TL0 = 0x48; //200us定时
//TL0 = 0x0A4;
TH0 = 0x0FF; //5us定时
TL0 = 0x0FB;
timer++;
if(timer == 9)
timer = 1;
if(timer <= 5)
PWM = 0;
else
PWM = 1;
}
作者:
HC6800-ES-V2.0
时间:
2018-4-14 17:35
定时器中断服务函数中,应该加上清除中断标记的语句——TF0 = 0;//清除定时器0中断标志。
手册上是说可以自动清除,但我在实践中发觉不是那么回事,一定要加清除中断标记才行。
你试试。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1