0

谁能解释一下这段代码?

#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;

}
4

1 回答 1

0

每当程序接收到中断信号时,它会TIMSK根据当前设置为 0 或 1 将 的值修改为 0x40(十进制的 64)或 0x00(十进制的 0)FLAG,然后FLAG通过执行与 1 的按位异或运算。

至于其余的代码(init()函数、声明的其他变量和sei()函数),代码没有提供足够的上下文来确定它到底在做什么/试图做什么。

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

看来您的代码正在 ATMEL AVR 嵌入式处理器上设置寄存器值。

于 2011-05-13T01:30:39.797 回答