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を認識して、書き込みができのではないかと思いました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます