JH7UBCブログ

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

MPL AB アセンブラ PIC16F1827 LED点滅

2024-11-12 20:30:18 | MPLAB アセンブラ
 PICの品種を8bitPICの定番的存在のPIC16F1827に変えて、アセンブラの勉強を進めていきます。
 環境は、MPLAB IDE v9.82, MPASM v5.51, PICKit3と同じです。

 PIC16F1シリーズは、PIC16Fシリーズに比べ、機能が大幅に拡大され、強化されています。

 PIC16F1827のスペックは
 Program Memory       4K word
 SRAM       384 byte
 EEPROM     256byte
 I/O        16
 ADC(12bit)      12
 CapSense     12
 Comperator      2
 Timer(8/16bit)    4/1
 EUSART      1
 MSSP        2
 ECCP(Full Bridge)   1
 ECCP(Half Bridge)  1
 CCP         2
 となり、SRLatch機能が加わりました。
 クロックは、31KHzから32MHzと広範囲で動作します。

 まず、最初に恒例のLチカ(LED点滅)をやってみましょう。

 回路図です。ICSPでRB3に接続したLEDを点滅させてみます。

 

 プログラムです。クロックは、内蔵の4MHzとしました。
 PIC16F1827のCONFIGレジスタは、CONFIG1とCONFIG2があり、それぞれ設定します。
 SFRのバンクは拡大されていますので、BANKSELでで指定します。
 出力はoutput latchのLATxレジスタにセットします。

----------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PIC16F1827 LED BLINK
; 2024.11.12
; JH7UBC Keiji Hata
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

              LIST      P=PIC16F1827
              INCLUDE           P16F1827.INC
              
              __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
     __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF

              CBLOCK             020h
              CNT1ms
              CNT250ms
              ENDC

SETUP
              BANKSEL           OSCCON
              MOVLW              b'01101000'         ;PLLなし、4MHz,Fosc
              MOVWF              OSCCON
              BANKSEL           ANSELA
              CLRF     ANSELA                            ;AN0-AN4使用しない
              CLRF     ANSELB                            ;AN5-AN11使用しない
              BANKSEL           TRISA
              CLRF     TRISA   ;PORTAは全て出力(RA5は入力)
              CLRF     TRISB   ;PORTBは全て出力
              BANKSEL           LATA
              CLRF     LATA    ;PORTAクリア
              CLRF     LATB    ;PORTBクリア
              
MAIN
              BANKSEL           LATB
              BSF                      LATB,3
              CALL     LOOP250ms
              CALL     LOOP250ms
              BCF                     LATB,3
              CALL     LOOP250ms
              CALL     LOOP250ms
              GOTO   MAIN

LOOP250ms
              MOVLW              0FAh      ;0FAh=250
              MOVWF              CNT250ms
LOOP2
              CALL     LOOP1ms
              DECFSZ              CNT250ms
              GOTO   LOOP2
              RETURN             
              
LOOP1ms
              MOVLW              0F9h      ;0F9h=249
              MOVWF              CNT1ms
LOOP1
              NOP
              DECFSZ              CNT1ms,F
              GOTO   LOOP1
              RETURN
             
              END
----------------------------------------------------

 ブレッドボードです。


 アセンブルの後、PICKit3でプログラムをPICに書き込みましたが、なかなかPICの新種を確認しませんでした。USBを何度か抜き差ししてようやく認識しました。MPLABとPICKit3は、何とも相性が悪いです。

 参考までに、MPLAB X + XC8 + MCCでプログラミングするとMCCで各種設定をしますので、ソースリストが次のように、非常に簡単になります。
--------------------------------------------------------
#include "mcc_generated_files/system/system.h"

int main(void)
{
     SYSTEM_Initialize();

    while(1)
    {
         LATB3 = 1;
     __delay_ms(500);
         LATB3 = 0;
     __delay_ms(500);
     }    
}
--------------------------------------------------------

 各種設定が、ブラックボックスになってしまうのですが、プログラム開発はアセンブラとは比較にならないほど速くなりますね。

 ただ、アセンブラでのプログラミングは、クイズを解くような面白さがあります。マイコン遊びのじいさんには、良い頭の体操です。(笑)

11月13日追記
 推測なのですが、MPLAB IDEには、PIC16F1827用のファームウェアがなかったのかも知れません。MPLAB X IDEでは、すんなり書き込みができました。その時にファームウェアがダウンロードされ、その後、MPLABで書き込みをしたらPIC16F1827を認識して、書き込みができのではないかと思いました。

最新の画像もっと見る

コメントを投稿