用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);
} |