pic12f_2のプロフィール

@pic12f_2 pic12f_2
ありがとう数0
質問数0
回答数1
ベストアンサー数
0
ベストアンサー率
0%
お礼率
0%

  • 登録日2008/08/31
  • PIC12F675 ウォッチドッグタイマーの使い方

    最近趣味でPICアセンブラを初めた者です。 WDTの実験をするため以下のプログラムでリセットのかかるまでの時間を比べてみました。 私の考え違いかもしれませんが、WDTポストスケーラの値によってリセットするまでの時間は違うと思ったからです。 675のGP0~GP3の入力をOPTION_REG のbit0~bit3に割り当てました。 GP3はHに固定してあるのでOPTION_REG bit3(PSA)は常にHです。 プログラムは一秒間のLED点灯後消灯し、WDTリセットのかかるまでループします。 WDTリセットからのリスタートはLEDを点滅後、同じことを繰り返します。 このときGP0~GP2の端子を切り替えることにより、OPTION_REGのWDT分周比を変え、 LED消灯後、リスタートし、点滅するまでの時間が変わると思ったのですが、変化しません。 正確な時間はわかりませんが、GP0~GP2を変えても、リスタートまでの時間は三秒程度一定です。 OPTION_REGのbit0~bit2がすべて立ってるのではと思われるのですが、 私のWDTの設定に対する考え方が間違ってるのか、テスト用のプログラムにミスがあるのかわかりません。 お暇な時で結構ですので、お教えくださるよう、どうぞよろしくお願いいたします。 title WDT list p=12f675 #include <p12f675.inc> errorlevel -302 __CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT org 20h work RES 1 ; ワーク counter RES 1 ; 回数カウンター cnt10m RES 1 ; 10ms時間稼ぎ用ワーク cnt500u RES 1 org 0 goto start start bsf STATUS, RP0 ; レジスタバンク1を選択 call h'3ff' movwf OSCCAL ; 書き込む movlw b'00001111' ; GP0~GP3を入力設定 movwf TRISIO clrf ANSEL ; すべてデジタルI/O bcf OPTION_REG, NOT_GPPU ; プルアップ使用する bcf STATUS,RP0 ; バンクゼロ btfsc STATUS,NOT_TO goto start2 movlw d'5' ; LED 点滅回数を5回にして call led_on_off start2 bsf GPIO,GP5 ; 一秒間LEDを点灯し call tm1000 movf GPIO,w ; 入出力ピンを読んで b3は一番ピンに直結し常時 H andlw b'00001111' ; 下位4ビットだけ選び bsf STATUS,RP0 ; バンク 1 選択 iorwf OPTION_REG,f ; ウォッチドッグの分周比とする bcf STATUS,RP0 ; バンク 0 loop bcf GPIO,GP5 ; LED消灯し goto loop ; リセットがかかるまでループ ; LED を0.1秒ごとにWレジスタの回数点滅 led_on_off movwf work led_loop decfsz work goto led_loop2 return led_loop2 bsf GPIO,GP5 call tm100 bcf GPIO,GP5 call tm100 goto led_loop ;-------------- 1000ms,100ms 遅延ルーチン tm1000 movlw D'100' goto lp200 tm500 movlw D'50' goto lp200 tm100 movlw D'10' ;10ms遅延を10回で100ms lp200 movwf counter ;カウンターをセットし lp201 decfsz counter,f ;カウンターはゼロ ? goto lp202 ;いいや return lp202 call t10m goto lp201 ; 10msec 遅延ルーチン for 4Mz t10m movlw d'8' movwf cnt10m tm10lp1 movlw d'249' movwf cnt500u tm10lp2 clrwdt ; ウォッチドッグタイマーをクリア nop decfsz cnt500u,f goto tm10lp2 decfsz cnt10m,f goto tm10lp1 return END