JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

MPLAB アセンブラ PIC16F648A LED点滅

2024-10-16 17:27:04 | MPLAB アセンブラ
 先日、私のホームページ(JH7UBCホームページ)を見た方(アマチュア無線家)から質問のメールをいただきました。ホームページに掲載しているPIC16F628A+PIC16F883周波数カウンタの周波数測定部を使いたいと思いMPLAB IDEでアセンブル(Make)しようと思ったが、エラーが出てうまくいかない、原因を教えてほしいというものでした。

 そこで、当ブログに掲載している「今更、アセンブラ」シリーズの記事を参考にしてプロジェクトの作成から行っていただいたところ、うまくMakeできたとのことでした。

 続いて、PICにプログラムを書き込む段階でまたトラブルを生じたとのこと。PICKit3がPIC(PIC16F628A)を認識しないとのことでした。このトラブルは私もしばしば経験します。PICへの電源供給とUSBケーブルを何度か抜き差しすることにより解決できました。その後、書き込みができたとの報告メールをいただきました。

 そういえば、MPLAB IDEとアセンブラを使うのは、ほんとうに久しぶりです。この周波数カウンタを製作したのが2017年でした。MPLABもアセンブラもだいぶ忘れてきました。10年前のノートを見て思い出すことにしました。


 手元にあるPIC16F648Aを使って、MPLAB IDE v8.92 MPASM v5.51の環境で、基本的なプログラミングの復習をすることにしました。

 PIC16F648Aですが、すでにレガシーPICと言われる古いタイプのPICですですが、内蔵クロックを持っており、一応基本的な機能を持っていますので、PICの勉強には適していると思います。

 やはり、最初はLチカ(LED点滅)をやってみましょう。テスト用の回路図です。ライタはPICKit3で、電源はPICKit3から供給し、ICSPでPICをセットしたままプログラミングします。



 クロックは、内蔵クロック(デフォルトの4MHz)を使い、RB0に接続したLEDを0.5秒ごとに点滅します。0.5秒タイマーはプログラムで作ります。
 アセンブルリストです。
----------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PIC16F648A LED Blink
; 2024 10 16
; JH7UBC Keiji Hata
; 内部クロック4MHz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

              LIST P=PIC16F648A
              INCLUDE P16F648A.INC
              
              __CONFIG _INTOSC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _WDTE_OFF & _PWRTE_ON & _BOREN_OFF & _LVP_OFF & _MCLRE_OFF

;レジスタ
              CBLOCK             020h
              CNT_1ms
              CNT_250ms
              ENDC

;入出力設定           
              BSF        STATUS,RP0      ;BANK1
              CLRF     TRISA                 ;PORTAはすべて出力、ただし、RA5は入力
              CLRF     TRISB                 ;PORTBはすべて出力
              BCF        STATUS,RP0      ;BANK0
              MOVLW              b'00000111'
              MOVWF              CMCON                            ;コンパレータOFF
              
              #DEFINE LED    PORTB,0
              
MAIN
              BSF       LED                     ;LED ON
              CALL     LOOP250mS       ;0.5s待つ
              CALL     LOOP250mS
              BCF       LED                      ;LED OFF
              CALL     LOOP250mS       ;0.5s待つ
              CALL     LOOP250mS
              GOTO   MAIN

;0.25s待つルーチン
LOOP250mS
              MOVLW              0FAh                    ;0FAh=250
              MOVWF              CNT_250ms
LOOP2
              CALL     LOOP1mS
              DECFSZ              CNT_250ms
              GOTO   LOOP2
              RETURN

;1ms待つルーチン
LOOP1mS
              MOVLW              0F9h                    ;0F9h=249
              MOVWF              CNT_1ms
LOOP1
              NOP
              DECFSZ              CNT_1ms,F
              GOTO   LOOP1
              RETURN
              
              END
              
----------------------------------------------------------
 タイマールーチンは、「PICで遊ぶ電子工作」というサイトのこちらのページを参考にさせていただきました。

 Programmerは、PICKit3を選択し、PICに供給する電源は、MPLABで、Programmer→Srttingでダイヤログを開き、Powerタグをクリックして、下のように設定します。


 PICをPICKit3にセットして、パソコンのUSBに接続するとIDEはPICKit3の接続を認識し、PICのID Noも表示されます。PICを認識しなかったり、品種が違う場合はエラーがでます。PICの品種をうまく認識しない場合は、USBを何度か抜き差しすると認識します。それにしても、MPLABとPICKit3の相性は良くありません。どうしてもうまく書き込みができない場合は、PICerFTの利用をお勧めします。

 ブレッドボードとICSP接続の様子です。左上の電源監視用の黄色いLEDが点灯し、左下の青いLEDが0.5秒ごとに点滅しました。



最新の画像もっと見る

コメントを投稿