;****************************************************************
; AT90S1200(A)用 RCEN書き換えボード制御プログラム Ver0.1
; 制御CPU:AT90S1200
;
; Copyright (C) 2000 aPony
;
;****************************************************************
.INCLUDE "1200def.inc"
;**** 汎用レジスタの指定 ****
.DEF TEMP = R16
.DEF STACK = R17
.DEF COUNT1 = R18
.DEF COUNT2 = R19
;****リセットベクトルと割り込みベクトルの指定 ****
RJMP RESET ; Reset handle
RJMP INT_HANDLE ; INT0 handle
RJMP RESET ; Reset handle
; RJMP RESET ; Reset handle
RESET:
;**** PORTのイニシャライズ ****
; ポートBのビット6以外を出力に設定
LDI TEMP, 0xBF
OUT DDRB, TEMP
; RESETを1(0Vに)、入力ビットはプルアップなし
LDI TEMP, 0x80
OUT PORTB, TEMP
; ポートDのビット2・5以外を出力に設定
LDI TEMP, 0xDB
OUT DDRD, TEMP
; 出力ビットはすべて0、入力ビットはプルアップ有り
LDI TEMP, 0x24
OUT PORTD, TEMP
;**** 割り込みのイニシャライズ ****
; 外部割り込み、立ち下がりで発生
LDI TEMP, (1<<ISC01)
OUT MCUCR, TEMP
; 外部割り込み端子を有効に
LDI TEMP, (1<<INT0)
OUT GIMSK, TEMP
;**** レジスタのイニシャライズ ****
LDI COUNT1, 0xFF
LDI COUNT2, 0xFF
;**** 外部割り込みがかかるまでループ ****
SEI
WAIT1:
RJMP WAIT1
;**** 外部割り込み処理プログラム ****
INT_HANDLE:
IN STACK, SREG ; SREGレジスタを待避する
CBI PORTB, 7 ; RESET端子に12V印加
NOP ; 100nS以上待つ
SBI PORTB, 3 ; WRを1に
SBI PORTB, 4 ; OEを1に
; XA0=0、XA1=1 (Load Command)
SBI PORTB, 0
CBI PORTB, 1
SBI PORTD, 0 ; PB6=1に(FUSEビット書き込みコマンド)
; XTAL1に正パルス印加(67nS以上)
SBI PORTB, 5
NOP
CBI PORTB, 5
; XA0=1、XA1=0 (Load Data)
CBI PORTB, 0
SBI PORTB, 1
; MODEスイッチが1ならPB0=1に(内部発振無効)
SBIC PIND, 5
SBI PORTD, 1
; XTAL1に正パルス印加(67nS以上)
SBI PORTB, 5
NOP
CBI PORTB, 5
; WRに負パルスを印加(1mS以上)
CBI PORTB, 3
WAIT_WR:
DEC COUNT2
BRNE WAIT_WR
LDI COUNT2, 0xFF
DEC COUNT1
BRNE WAIT_WR
SBI PORTB, 3 ; WRを1に戻す
WAIT_RDY:
SBIS PINB, 6 ; RDY/BSYが0ならば、1になるまで待つ
RJMP WAIT_RDY
; 後処理
LDI TEMP, 0x80
OUT PORTB, TEMP
LDI TEMP, 0x24
OUT PORTD, TEMP
; 外部割り込み端子を無効に
LDI TEMP, (0<<INT0)
OUT GIMSK, TEMP
OUT SREG, STACK ; SREGレジスタを復帰する
RETI
|