打印
[AVR单片机]

配置快速pwm影响外部中断,什么原因

[复制链接]
1188|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用mege16写一个程序,外部中断IN0下降沿检测独立按键,然后在中断服务程序里设置一个引脚为高电平(led会亮),单独执行外部中断时没有问题。程序还有两路pwm输出,配置也是正确的,当程序里这两部分都有时,外部中断服务函数的执行结果就会受影响,led量一下就会灭,单独执行外部中断的代码是就不会这样,led会一直亮着。

相关帖子

沙发
朝圣者的光辉|  楼主 | 2016-3-28 17:50 | 只看该作者
单独运行两段代码都没有问题,加在一起就不行了,很晕

使用特权

评论回复
板凳
朝圣者的光辉|  楼主 | 2016-3-28 17:51 | 只看该作者
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
void port_init(void)
{DDRD&=~0X02;//PD1输入
PORTD|=0X02;
}
void pwm_init(void)
{
DDRD|=0X70;//PD4 5 6输出
PORTD|=0X40;//PD6置位  作驱动器方向信号

TCCR1A|=0xb2;//ocra 比较匹配清零 ocrb 比较匹配置位
TCCR1B|=0x1b;//模式14,TOP值由ICR1决定  时钟64分频

ICR1H=0X01;//计300个数
ICR1L=0X2C;

OCR1AH=0X00;
OCR1AL=0X3C;//OCRA 60  20%占空比  
OCR1BH=0X00;
OCR1BL=0X78;//OCRB 120 40%
TIMSK|=0X1C;//使能中断
SREG|=0X80;//开全局中断
}
void delay(void)
{
uint a,b;
for(a=0;a<2000;a++)
  for(b=0;b<1000;b++)
  ;
}
void inter_init(void)
{
DDRC|=0X01;//PD3输出 接继电器引脚
PORTC&=~0X01;//PD3清零

MCUCR|=0X02;//外部中断0,下降沿触发
GICR|=BIT(6);//使能外部中断0

DDRD&=~BIT(2);//引脚初始化,PD2输入
PORTD|=(1<<2);//上拉电阻

SREG|=BIT(7);//总中断开关

}
void main(void)
{
port_init();
inter_init();
pwm_init();
while(1)
{if(!(PIND&0X02))
{PORTC&=~0X01;
}
}
}
#pragma interrupt_handler inter0:2
void inter0(void)
{
PORTC|=BIT(0);
}

使用特权

评论回复
地板
朝圣者的光辉|  楼主 | 2016-3-28 17:58 | 只看该作者
这是程序,求大神帮忙分析原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝