So-net無料ブログ作成

16bit タイマー1 のオーバーフロー割り込み [AVR]

16bit タイマーでは256秒までカウントできるそうな。
これも動いたのがうれしいのでアップ。

なお、クロックは1MHzです。
.include "m168def.inc"

.def	STACK	= r16
.def	R_TEMP1	= r17
.def	R_TEMP2	= r18

.equ    P_LED   =   portb
.equ    B_LED   =   0

.org 	0x0000		jmp	reset 		;各種リセット
.org	0x001A		jmp tim1_ovf	;タイマ/カウンタ1オーバーフロー


tim1_ovf:	; evaculate status register
			in	STACK, sreg

			; stop timer
			ldi	R_TEMP1, 0x00		; stop timer
			sts	tccr1b, R_TEMP1

			; toggle led
        	in  R_TEMP1, P_LED
        	ldi R_TEMP2, 0x00
        	sbr R_TEMP2, (1<<B_LED)
        	eor R_TEMP1, R_TEMP2	; take 1 xor x toggle the bit of x
        	out P_LED, R_TEMP1

			rcall strtcnt

			; restore status register
			out	sreg, STACK

			reti

reset:		cli

			ldi R_TEMP1, low(ramend)
			out spl,R_TEMP1
			ldi R_TEMP1, high(ramend)
			out sph,R_TEMP1

        	ldi R_TEMP1, 0xff
        	ldi R_TEMP2, (1<<B_LED)
        	out ddrb, R_TEMP1
        	out P_LED, R_TEMP2

			rcall strtcnt

			lds	R_TEMP1, timsk1
			sbr R_TEMP1, (1<<toie1)
			sts timsk1, R_TEMP1

			sei

main:		
			rjmp main

strtcnt:
			; set counter
			ldi	R_TEMP1, 0x1b
			ldi	R_TEMP2, 0x17
			sts	tcnt1h, R_TEMP1
			sts tcnt1l, R_TEMP2

			; start counter
			ldi	R_TEMP1, 0x01
			sts	tccr1b, R_TEMP1

			ret


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。