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

プログラムは割り込み信号を受信するたびに、現在0または1に設定されているTIMSKかどうかに応じて、の値を0x40(10進数で64)または0x00(10進数で0)に変更し、次に、を実行してFLAGの値を反転します。 FLAG1を使用したビット単位のXOR演算。

コードの残りの部分(init()関数、宣言されている他の変数、およびsei()関数)に関しては、コードが実行していること/実行しようとしていることを正確に判断するための十分なコンテキストがコードによって提供されていません。

このページは役に立つかもしれません: http ://www.avr-asm-tutorial.net/avr_en/beginner/PDETAIL.html

コードがATMELAVR組み込みプロセッサでレジスタ値を設定しているようです。

于 2011-05-13T01:30:39.797 に答える