AT90S1200のプログラミングは32個の汎用レジスターを利用しI/Oレジスターにアクセスすることによりいろいろな仕事をさせることができます。

■I/Oレジスター

EEARのように英大文字4〜5文字で表記してあるのはI/Oレジスターです。またEEAR(EERE)のように表記したときはレジスターEEARのEEREビットと言う意味です。またセットはこのビットを1に、クリアは0にすることです。

■システムフラグ SREG
AT90S1200は8個のフラグを持ちます。この中で
Tフラグは汎用レジスターのビットの検査をします。汎用レジスターの各ビットをこのTにコピーする命令があり、コピー後Tの状態による条件ジャンプでTEST(分岐)します。また
Iフラグは割り込み許可のGENERALでこれを0にすることによりすべての割り込みを禁止します。Iを1にした後、割り込みが発生するとCPUはこのフラグを0にし続く割り込みが発生しないようにします。またRETI命令はルーチンからリターンするとともにIを1にし割り込みを許可します。

■I/Oポート PORTB、DDRB,PINB PORTD、DDRD,PIND
AT90S1200は8本のBポートと7本のDポートを持っています。これらのポートはI/OであるPORTB、DDRB,PINBおよびPORTD、DDRD,PINDの二組の3つのI/Oレジスターにアクセスすることにより操作できます。Dのビットは0〜6です。

PORTx:出力です。ここに書き込むことにより出力に設定されていればその値が出力されます。読出しもできます。
PINx:入力です。読出しのみ。
DDRx:入出力の切り替えです。相対するビットが0で入力、1で出力に設定します。
  DDRxを入力にした時PORTxが0でハイインピーダンス、1でプルアップ。

■EEP-ROM EEAR、EEDR、EECR
AT90S1200は64個の8ビットEEP-ROMを持っています。これは自由に読み書きすることができますがアクセスが遅いのでちょっとした工夫がしてあります。
読出しはアドレスをOUT命令でEEARに入れ、EECR(EERE)をセットします。4クロックの後EEDRからIN命令でデータを読み出すことができます。なお、CPUはEECR(EERE)がセットされEEDRにデータを出した後EECR(EERE)をクリアします。
書込みはデータをEEDRにOUTしアドレスをOUT命令でEEARに入れ、EECR(EEWE)をセットします。約3ms(VCCにより異なる)掛かってEEP-ROMにデータが記憶されます。同様に書込みが終了するとCPUはEECR(EEWE)をクリアします。
どちらの場合もEEWEやEEREをスキャンすることによって正しいデータが読み書きされたことがわかります。当然EEWEやEEREがセットしている状態で、次の読み書きを始めると値は保証されません。

■タイマー/カウンター TCNT0、TCCR0TIFRTIMSK
AT90S1200はタイマーやカウンターとして使える8ビットのTCNT0レジスターを1つ持っています。これは入力として外部ピンPD4-T0を選ぶとカウンターとして、内部のクロックを使うとタイマーとして利用することができます。またTCCR0を設定することによりこの接続を切り替えることができます。

TCCR0    
CS02 CS01 CS00 TCCR0         動       作
  0   0   0   0  TCNT0 カウントしない
  0   0   1   1  クロックに直接接続
  0   1   0   2  クロックを1/8分周して接続
  0   1   1   3   〃 1/64 〃
  1   0   0   4   〃 1/512 〃
  1   0   1   5   〃 1/4096 〃
  1   1   0   6  外部ピンに接続、パルス立下りでカウント
  1   1   1   7  外部ピンに接続、パルス立上がりでカウント 

TCNT0はカウント中オバーフローするとTIFR(TOV0)フラグをセットします。また同時に割り込み要求を出しますので、タイマー/カウンター割り込み許可のTIMSK(TOIE0)とSREG(I)がセットされていれば割り込みが発生します。

■コンパレータ ACSR
PB0-ACP1が+、PB1-ACN1を−入力とするコンパレータです。ACSRレジスターが担当します。まずコンパレータの電源の入切をACSR(ACD)が行い1で電源OFFです。コンパレータの出力はACSR(ACO)に出るのでこれを読み込み調べます。
コンパレータを割り込みのソースとする時はACSR(ACIE),SREG(I)をセットして許可します。割り込み発生のタイミングはACSR(ACIS0、ACIS1)が0の時ACSR(ACO)が変化する度に、立ち上がりで発生させるには3を、立ち下りでは2を設定します。
上記が揃うとフラグACSR(ACI)をセットし割り込みます。また割り込み許可後に電源のACSR(ACD)を変化させるとACSR(ACO)も変化し条件が合うと思わぬところで割り込みが発生します。

■割り込み
割り込みは外部割込、タイマー/カウンター割込、コンパレータ割込の3種類があります。どの割り込みも条件が揃うとフラグを立て割り込みます。割り込むとそれに応じたアドレスに飛びルーチンを実行します。そのアドレスとして000〜003番地が当てられています。000はリセットとウォッチドッグ・タイムオーバで使われます。また条件として外部だけでなく内部の幾種かの許可が必要です。

  割込のソース 許可ビット(1:許可) フラグビット 制御レジスター ルーチンのアドレス
@外部割込 INT0/PD2ピン GIMSK(INT0) 無い MCUCR &H001
Aタイマー 割込 内部クロック TIMSK(TOIE0) TIFR(TOV0) TCCR0 &H002
 カウンター割込 T0/PD4ピン   〃   〃   〃   〃
Bコンパレータ割込 ACPI/PB0(+)
ACNI/PB1(-)
ACSR(ACIE) ACSR(ACI) ACSR &H003

■外部割込みピン GIMSK、MCUCR
PD2-INT0は外部からの割り込み入力となっています。GIMSK(INT0),SREG(I)がセットされると割り込み許可となります。また割り込みの条件としてMCUCR(ISC00,ISC01)が2でPD2-INT0の立ち下り、3で立ち上がり時に発生します。