私は、標準的なブートローダ(avra + avrdude)を備えたArduino UNOボード上で、AVRファミリのアセンブリプログラミングのレジスタを手にしています。arduino uno、timer0設定のAVRアセンブリ?
私はTimer0に問題があります。 I短いプログラムWICHに問題が
- になっている低下しました(B5 =ピン13上)に赤色LEDを置く
- ノーマルモードのタイマ0を設定し、プレスケール1024
- カウンタを設定しました0
- ループを入力し、カウンタが200以上200未満の場合はエスケープします。
- 次に、緑色のLEDをオンにします(B4)。
症状:緑色のLEDが一度も点灯しません。他の値が200より大きい場合は、ランダムな時間(秒)後にオンになります。ここで
はコードです:
.include "./m328Pdef.inc"
.EQU ROUGE = 0b0100000 ; red
.EQU VERT = 0b0010000 ; green
main:
ldi r16,ROUGE+VERT ; pins activated
out DDRB,r16
ldi r16,ROUGE ; red on
out portB,r16
;; configure timer
lds r16,TCCR0B
andi r16,0b11111000
ori r16,0b00000101 ; prescale 1024
sts TCCR0B,r16
ldi r16,0 ; count is 0
sts TCNT0,r16
loop:
lds r16,TCNT0
cpi r16,100
brlo loop
ldi r16,VERT ; green on
out PortB,r16
z:
nop
rjmp z
同じプログラムタイマー1とそれに関連するレジスタで正しく動作するようです。
どういうところが間違っていますか?いくつかのブートローダーへの干渉?
EDIT HEXファイル:avra bug0.asm
アップロード::
:020000020000FC
:1000000000E304B900E205B900912500087F05600E
:100010000093250000E0009326000091260004369E
:0A002000E0F300E105B90000FECF97
:00000001FF
はでコンパイルDDRB
、PORTB
、TCCR0B
、TCNT0
など評価:
avrdude -q -V -D -p atmega328p -C /etc/avrdude.conf \
-c arduino -b 115200 -P /dev/ttyACM0 \
-U flash:w:bug0.hex:i
コードはOKと思われます。あなたはボードをフラッシュするためにあなたが何を使用するか/ hex/hexを含めることができますか? –
Arduino UNOの標準ブートローダーのソースは、https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/bootloaders/optiboot/optiboot.cをご覧ください。ブートローダーはtimer1を使用しますが、timer0はそのままです。 –
編集:質問に追加された16進数およびコンパイル/アップロードコマンド –