|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-12-14 19:21:23
|
显示全部楼层
/******************************************
芯片型号:tiny13A
******************************************/
#include <avr/io.h>
#include <util/delay.h>
#include "adc_init.c"
#define unchar unsigned char
#define unint unsigned int
unchar counter,d,f;
unchar duty,freq,x;
int flag,a,c,b;
/****************************************************
PWM初始化程序
*****************************************************/
void pwm_init()
{
TCCR0B = 0X0c;
TCCR0A = 0X23;
TCNT0 = 0;
}
/***************************************************
PWM控制程序
***************************************************/
void pwm_con(void)
{
if ((PINB & _BV(PB3)) != 0)//PB3输入低电平时启动PWM,搞电平停止
{
_delay_ms(1);
if ((PINB & _BV(PB3)) != 0)
{
TCCR0B = 0;
TCCR0A = 0;
}
}
else
{
TCCR0B = 0x0c;
TCCR0A = 0X23;
}/**/
}
/*************************************************
PWM更新程序
*************************************************/
void pwm_set()
{
if ((TIFR0 & (1 << OCF0B)) != 0)//
{
b = adc(2);//acd2
f = adc(1);//acd1
a = f;
if (b < 230)//控制占空比在90%以内
{
b = (b * 100);//求占空比
x = (b / 256);
a = (a * x);
d = (a / 100);
}
OCR0A = f;
OCR0B = d;
TIFR0 |= (1 << OCF0B);
}
}
/************************************************
主程序
************************************************/
int main()
{
pwm_init();
adc_init();
DDRB = 0x23;
while(1)
{
pwm_con();
pwm_set();
}
} |
|