打印

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

[复制链接]
2359|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 | 只看该作者
或许是变化太慢,感觉不出来。
加大变化速率试试。

使用特权

评论回复
5
wplhd| | 2009-11-23 19:50 | 只看该作者
分别测试一下全亮和全灭

使用特权

评论回复
6
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

主题

3763

帖子

5

粉丝