;■■■■■■■■■■■■■■■■■■■■■■■ ; ; ; AT90S2313 10MHz ; クリップモータのレブカウンタ ; Tabは半角8文字にすると見やすいです。 ; ;■■■■■■■■■■■■■■■■■■■■■■■ .INCLUDE "2313DEF.INC" .def A=r16 .def B=r17 .def C=r18 .def D=r19 .def d1=r20 .def d10=r21 .def dd1=r22 .def dd10=r23 .def stock=r24 rjmp RESET ;RESET reti ;INT0 reti ;INT1 reti ;CAPT1 rjmp COMP1 ;COMP1 reti ;OVF1 reti ;OVF0 reti ;UART RX reti ;UART UDRE reti ;UART TX reti ;ACON RESET: ;▼スタックポインタ ldi A,low(RAMEND) out SPL,A ;▼入出力設定 ldi A,0b00001111 out DDRB,A ;PBを設定 ldi A,0b11100000 out PORTB,A ;初期値 ldi A,0b1111111 out DDRD,A ;PDを設定 out PORTD,A ;初期値 ;▼外部割込み設定 ; sbi GIMSK,6 ;外部割込み許可 ; ldi A,0b00000010 ; out MCUCR,A ;立下りで割り込み発生 ;▼タイマカウンタ ldi A,0b00000000 out TCCR1A,A ldi A,0b00001100 out TCCR1B,A ldi A,0x98 out OCR1AH,A ldi A,0x96 out OCR1AL,A ldi A,0b01000000 out TIMSK,A ;コンペアマッチ割り込み許可 sei ;割り込み許可 ldi d1,0 ldi d10,0 ldi stock,0 MAIN: ;▼ROM読み ldi A,0 ldi B,low(data*2) ldi C,high(data*2) add B,d1 adc C,A mov ZL,B mov ZH,C lpm mov A,r0 ;▼壱の位表示 andi A,0b01111111 out PORTD,A sbi PORTB,1 rcall wait cbi PORTB,1 ldi A,0b01111111 out PORTD,A ;▼ROM読み ldi A,0 ldi ZL,low(data*2) ldi ZH,high(data*2) add ZL,d10 adc ZH,A lpm mov A,r0 ;▼拾の位表示 andi A,0b01111111 out PORTD,A sbi PORTB,0 rcall wait cbi PORTB,0 ldi A,0b11111111 out PORTD,A in A,PINB cpi stock,1 brpl M1 bst A,6 brtc M1 inc dd1 cpi dd1,10 brne M1 inc dd10 ldi dd1,0 M1: bst A,6 bld stock,0 M2: end: rjmp MAIN data: .db 0b01000000,0b01110011,0b00100100,0b00100001,0b00010011,0b00001001,0b00001000,0b01000011,0b00000000,0b00000001,0b00000010,0b00011000,0b00111100,0b01110000,0b00001100,0b00001110 wait: ;破壊レジスタ:AB ldi B,256 p2: ldi A,1 p1: dec A brmi p1 dec B brmi p2 ret ;▼Wait26us=105step ;1step=250ns wait26us: ret ;▼タイマカウンタ壱コンペアマッチ COMP1: mov d1,dd1 mov d10,dd10 ldi dd1,0 ldi dd10,0 reti