请帮我看看这个PWM控制LED渐亮渐暗的程序那里有问题?

[复制链接]
3123|5
 楼主| gaohq 发表于 2009-11-22 19:05 | 显示全部楼层 |阅读模式
用I/O口模拟的,纯粹为了练手,结果就是灯的亮暗无变化,不知是程序不对还是参数设定不好人眼感觉不出来?M16,4MHz,初学,请指教。

#include <mega16.h>
#define PORT_on  PORTB=0B0111111;
#define PORT_off PORTB=0B1111111;  // 控制PB7口的LED
unsigned char pwm=50;              //占空比初定为50
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(++pwm==100)pwm=0;           //按下K1键 占空比增加
}
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if (--pwm==0) pwm=100;          //按下K2键 占空比减少
}  
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
static unsigned char  m=0 ;
TCNT0=0x06;
m++;
if(m<=pwm)  
PORT_on;
else
PORT_off;
if(m==100)
m=0;  
}
void main(void)
{
PORTB=0xFF;
DDRB=0xFF;
TCCR0=0x01;
TCNT0=0x06;
OCR0=0x00;
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
TIMSK=0X01;
GIFR=0xC0;
#asm("sei")
while (1);
}
chen3bing 发表于 2009-11-23 08:57 | 显示全部楼层
你用的什么编译软件?
 楼主| gaohq 发表于 2009-11-23 12:23 | 显示全部楼层
回楼上,用ICCAVR7  和CVAVR 都试过,编译没问题的。
chen3bing 发表于 2009-11-23 13:33 | 显示全部楼层
或许是变化太慢,感觉不出来。
加大变化速率试试。
wplhd 发表于 2009-11-23 19:50 | 显示全部楼层
分别测试一下全亮和全灭
 楼主| gaohq 发表于 2009-11-23 20:18 | 显示全部楼层
谢谢楼上两位,搞定了,是在TIMER0中断里面少了几句 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { static unsigned char m=0 ; TCNT0=0x06; m++; if(m<=pwm) PORT_on; else PORT_off; if(m==100) m=0; }
从红色部分开始加上pwm++;if(pwm==100) pwm=0;
结贴!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

378

主题

3767

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部