打印
[AVR单片机]

定时中断实验 LED不闪烁?

[复制链接]
1578|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哈雷彗星|  楼主 | 2014-7-2 08:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译通过,为什么等不闪烁, 程序哪边出了什么问题?


#include  <avr/io.h>
#include  <avr/interrupt.h>
#include <ctype.h>                                                // 字符操作函数

int main(void)
{
        DDRA   = 0xff;                                // PA4 输出,输出高 (灯)
        PORTA  = 0xff;                               
       
        TCNT0 = 111;
        TIMSK |= ( 1<< TOIE0);
        sei();
        TCCR0 = 0x05;           //1024/7.3728
       
        while(1);
}



        volatile unsigned int cnt = 0;
SIGNAL( SIG_OVERFLOW0 )
{
        TCNT0 = 111;                 //1024*(255-111)/7.3728 = 20.000 ms                                 
        cnt++ ;
        if ( cnt>=50 )       //20*50 = 1000 MS
        {
                cnt = 0;
                PORTA ^= ( 1 << 4 ) ;    // PA4 取反
        }
}


相关帖子

沙发
ningling_21| | 2014-7-2 09:57 | 只看该作者
有中断服务函数吗?

使用特权

评论回复
板凳
哈雷彗星|  楼主 | 2014-7-2 11:00 | 只看该作者
ningling_21 发表于 2014-7-2 09:57
有中断服务函数吗?

     volatile unsigned int cnt = 0;
SIGNAL( SIG_OVERFLOW0 )
{
        TCNT0 = 111;                 //1024*(255-111)/7.3728 = 20.000 ms                                 
        cnt++ ;
        if ( cnt>=50 )       //20*50 = 1000 MS
        {
                cnt = 0;
                PORTA ^= ( 1 << 4 ) ;    // PA4 取反
        }
}


这个

使用特权

评论回复
地板
ningling_21| | 2014-7-2 11:04 | 只看该作者
哈雷彗星 发表于 2014-7-2 11:00
volatile unsigned int cnt = 0;
SIGNAL( SIG_OVERFLOW0 )
{

和我用的有点差别

#pragma interrupt_handler adc_isr:iv_ADC
void adc_isr(void)

....

使用特权

评论回复
5
哈雷彗星|  楼主 | 2014-7-2 11:54 | 只看该作者
我用的是winavr 编译器 ,不清楚是不是和这个有关系

使用特权

评论回复
6
bufubaoni| | 2014-7-3 14:45 | 只看该作者
哈雷彗星 发表于 2014-7-2 11:54
我用的是winavr 编译器 ,不清楚是不是和这个有关系

新版的中断服务程序是这个了
ISR(TIMER0_OVF_vect)
{

}

使用特权

评论回复
7
lxy_613| | 2014-7-3 21:37 | 只看该作者
去掉while(1);等待语句,将while(1)轮询放在主程序外面。

使用特权

评论回复
8
哈雷彗星|  楼主 | 2014-7-4 11:27 | 只看该作者
lxy_613 发表于 2014-7-3 21:37
去掉while(1);等待语句,将while(1)轮询放在主程序外面。

下午试试!

使用特权

评论回复
9
哈雷彗星|  楼主 | 2014-7-4 17:00 | 只看该作者
lxy_613 发表于 2014-7-3 21:37
去掉while(1);等待语句,将while(1)轮询放在主程序外面。

不行

使用特权

评论回复
10
哈雷彗星|  楼主 | 2014-7-4 17:01 | 只看该作者
bufubaoni 发表于 2014-7-3 14:45
新版的中断服务程序是这个了
ISR(TIMER0_OVF_vect)
{

试了 不行

使用特权

评论回复
11
hexin261234088| | 2014-8-12 09:39 | 只看该作者
问题在于控制LED的IO操作。PORTA ~= ( 1 << 4 ) ;

使用特权

评论回复
12
哈雷彗星|  楼主 | 2014-8-13 15:05 | 只看该作者
今天没事把程序在烧了一遍,一点没改   奇迹般的好了

使用特权

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

本版积分规则

14

主题

63

帖子

0

粉丝