解释这段代码

时间:2011-05-13 01:20:03

标签: c avr

任何人都可以解释一下这段代码吗?

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

char n = 0;
char FLAG =0x00;
char FLAG2 =0x00;

char RST=0x00;
unsigned char minutes_save [20];
unsigned char seconds_save [20];
int seconds, minutes, shift, count;




void init(void)
{

    DDRB = 0xff;
    DDRA  =0xff;
    MCUCR = 0x0F;
    GICR = 0xC0;
    TCCR2 = 0x05;
    ASSR = 0x08;
    TCNT2 = 0x00;
    sei();
}


SIGNAL(SIG_INTERRUPT0)

{   

    if (FLAG == 0x00)
        TIMSK = 0x40;

    if (FLAG == 0x01)
        TIMSK = 0x00;

    FLAG = FLAG ^ 1;

}

1 个答案:

答案 0 :(得分:0)

每当程序收到中断信号时,它会将TIMSK的值修改为0x40(十进制为64)或0x00(十进制为0),具体取决于FLAG当前是否设置为0或1,然后通过执行1的按位XOR运算反转FLAG的值。

至于代码的其余部分(init()函数,声明的其他变量和sei()函数),代码提供的上下文不足以确定它究竟是什么做/尝试做。

此页面可能会有所帮助:http://www.avr-asm-tutorial.net/avr_en/beginner/PDETAIL.html

您的代码似乎是在ATMEL AVR嵌入式处理器上设置寄存器值。