; timer0-1.asm
.include "m328pdef.inc"
.def STACK = R16
.def R_TEMP1 = R17
.def R_TEMP2 = R18
.EQU P_LED = PORTB ; LED
.EQU B_LED = 0 ; LED
.CSEG
RJMP MAIN
.ORG 0x0020 ; 0010 for mega48series
RJMP IOVF0
IOVF0:
IN STACK,SREG
LDI R_TEMP1,0x00
OUT TCCR0B,R_TEMP1
SBI PINB, B_LED
LDI R_TEMP1,0x9E ; 100mS
OUT TCNT0,R_TEMP1
LDI R_TEMP1,0x05
OUT TCCR0B,R_TEMP1
OUT SREG,STACK
RETI
MAIN:
CLI
LDI R16,0b10000000 ; 以下4行で8mhzが1mhzになる
STS CLKPR,R16
LDI R16,0b00000011
STS CLKPR,R16
LDI R_TEMP1,0b11111111
LDI R_TEMP2,0b00000000
OUT DDRB,R_TEMP1
OUT PORTB,R_TEMP2
LDI R_TEMP1,0b11111111
LDI R_TEMP2,0b00000000
OUT DDRC,R_TEMP1
OUT PORTC,R_TEMP2
LDI R_TEMP1,0b11111111
LDI R_TEMP2,0b00000000
OUT DDRD,R_TEMP1
OUT PORTD,R_TEMP2
LDI R_TEMP1,0x05 ; prescale 1024
OUT TCCR0B,R_TEMP1
LDI R_TEMP1,0x9E ; 100mS
OUT TCNT0,R_TEMP1
LDS R_TEMP1,TIMSK0
SBR R_TEMP1,(1<<TOIE0)
STS TIMSK0,R_TEMP1
SEI
MAIN01:
RJMP MAIN01
注:こんばんは。
> Subject: atmega8にはclkprがないようで
ヒューズ下位バイトの 3:0 を0001とすると内部1MHzになります。
> 添付のファイルですが、attiny88用のtimer0-1.
> //の部分がうごきません よって8分周できんので8mhzでも12ms程度となりLチカで
CLKPRレジスタがないのでヒューズを変更してください。
> //の部分がうごきません
CLR R16 ; 1
SBR R16,(1<<CLKPCE) ; 2
STS CLKPR,R16 ; 3
* ; 4
SBR R16,(1<<CLKPS1)+(1<<CLKPS0)) ; 5
STS CLKPR,R16 ; 6
このコードはATmega88、328Pでも正常に動きません。
1でR16は0です。3でR16は0b10000000です。
* ; 4 のところに CLR R16 を入れると4でR16は0b00000000になり、
LDI R16, 0b10000000
STS CLKPR, R16 ; P338 設定変更手順 ①
LDI R16, 0b00000011
STS CLKPR, R16 ; P338 設定変更手順 ②
とすれば簡単です。
Cなら、
CLKPR=0b10000000; // P338 設定変更手順 ①
CLKPR=0b00000011; // P338 設定変更手順 ②
でOKです。なお①と②
よろしくお願いします。
0 件のコメント:
コメントを投稿