初版作成 2012
最終更新 2024.04.01
http://www.microchip.com/mplab/mplab-x-ide で MPLAB-X IDE をダウンロードしてインストールする。 インストールが終わると、Web ブラウザが自動的に 立ち上がり、コンパイラのサイトが開く。 XC8 コンパイラ (2012.3 公開 元々は HI-TECH C Compiler) を http://www.microchip.com/mplab/compilers からダウンロードしてインストールする。 MPLAB X IDE において [tools] --> [options] --> [embedded] --> [build tools: add] C:\Program Files\Microchip\xc8\v1.xx\bin で XC8 コンパイラが使えるようになる。
このサイト が詳しい。
File --- New Project Categories: Microchip Embedded Projects: Standalone Project Family と Device を選ぶ。 PIC16F685 は Middle Range 8-bit MCUs にある。 Hardware Tools = PICkit2 Compiler Toolchains = mpasm --- mpasm (v5.70) 空のプロジェクトができる。 File --- New File Categories: Assmbler File Types: AssemblyFile.asm コンパイルに成功すると hex ファイルは以下のフォルダに生成される。 Project-Name.X\dist\default\production
File --- New Project Categories: Samples -- Microship Embedded Projects: PIC16 C Template を選ぶ File --- Project Properties Device: PIC の型番 を選ぶ Compiler Toolchain: XC8 コンパイラを選ぶ Categories: Conf: 上にスクロールして [General] を選び、直後に 一番下の Encoding: のリストボックスで Shift_JIS を選ぶ。 雛形ファイルとその中に含まれる関数は以下の通り main.c main() system.c ConbfigureOscillator() user.c InitApp() configuration_bits.c interrupts.c isr() main() から ConfigureOscillator() と InitApp() を呼ぶ。 コンフィギュレーションの設定方法は後で説明する。
Window --- PIC Memory Views --- Configuration Bits Generate Code を押し、生成されたコードを configuration_bits.c にコピーする。 なぜ configuration_bits.c が有効になるのか謎。 どこからもインクルードされていないように見える。 PIC16F88 で内部クロック(8 MHz)を使う場合は、以下のようにする。 1. FOSC: INTOSCIO WDTE: OFF Watchdog Timer PWRTE: ON Power-up Timer MCLRE: OFF reset switch BODRN: ON Brown-out Reset LVP: OFF Low-voltage Programming CPD: OFF WRT: OFF CCPMX: RB0 CP: OFF FOCS 以外は用途に合ったものを選ぶ。 configuration_bits.c の末尾にコピペする 2. main.c に以下の行を付加する #include "system.h" の手前 #include <pic16f88.h> main() 関数の手前 #define _XTAL_FREQ 8000000 // __delay_us(x) __delay_ms(x) に関係する main() 関数の中 OSCCON = 0x70; // クロック周波数の指定 ConfigureOscillator() は system.c の中にある 空である InitApp() は user.c の中にある 空である
16進 0x7f 2進 0b00011010 (注意!) 2 進数のつもりで 0x00000110 としないように。(0b のつもりが 0x) コンパイルエラーは出ない。
PORTA = 0b11111111; のように書く。PORTA は pic16f88.h の中で以下のように定義されている。 extern volatile unsigned char PORTA @ 0x005;
main() の手前で以下のマクロを定義する #define bitset(var,bitno) ((var) |= 1UL << (bitno)) #define bitclr(var,bitno) ((var) &= ~(1UL << (bitno))) #define bitread(var,bitno) ( ( (var) & 1UL << (bitno) ) >> (bitno) ) bitset bitclr のマクロは help で検索すると見つかる。 bitread は私が書いた。一応動作チェックはしたが、自己責任で使うこと。 マクロを使わず素直に書く場合は PORTAbits.RA0 = 1; のように書く。PORTAbits まで入力すると、後はエディタが補完してくれる。 pic16f88.h の中で以下のように定義されている。 typedef union { struct { unsigned RA0 :1; unsigned RA1 :1; unsigned RA2 :1; unsigned RA3 :1; unsigned RA4 :1; unsigned RA5 :1; unsigned RA6 :1; unsigned RA7 :1; }; } PORTAbits_t; extern volatile PORTAbits_t PORTAbits @ 0x005;
project_name.X -- dist -- HT_PIC16F54 or default -- production
配色 Tools --- Options --- Fonts & Colors City Lights を選び、それを修正するか、そのまま用いるとよい。 tab Tools --- Options --- Editor -- Formatting expand tabs to spaces のチェックを外す tab size : 4 しかし、上記のように設定しても tab キーを押すとスペースが 4 個入る。
書き込みツールに PICpro を使う。 COM ポートは 1 桁台しか設定できない。 私のメインマシンの場合、COM1 はハードが存在するポートに 強制的に割り当てられるので、COM2 以降に設定する。
16F88 は設定項目が多いので 16F819 よりややこしい。 以下の条件で使用する。 内部クロック 8MHz PORTA 全てアナログ入力 PORTB 全てデジタル出力 ---------- configuration_bits.c ---------- // 'C' source line config statements #include <xc.h> // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG1 #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off) #pragma config CCPMX = RB0 // CCP1 Pin Selection bit (CCP1 function on RB0) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) // CONFIG2 #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled) #pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode enabled) -------- main.c -------- #define _XTAL_FREQ 8000000 void main(void) { ConfigureOscillator(); InitApp(); OSCCON = 0x70; INTCON = 0; // 割り込み禁止 TRISA = 0b11111111; // 1:input 0:output TRISB = 0b00000000; ANSEL = 0b11111111; // porta input = 1:analog 0:digital ADCON1 = 0b01000000; // bit7 = 1:右寄せ 0:左寄せ // bit6 = 1:ADクロックは2で割る // bit54 = 00: 基準は Vdd-Vss ADCON0 = 0b01000001; // bit76 = 01: adcon1.6=1 のとき Focs/16 // 8MHz のとき 2us (1.6us以上必要) // bit5-3 = ch // bit2=1:start 0:completed // bit0=1:enabled 0:disabled メインループ内 bitset(ADCON0,3); // ch = 1 __delay_us(20); bitset(ADCON0,2); while(1){ if ( bitread(ADCON0,2) == 0 ) break; } ch1 = ADRESH; bitclr(ADCON0,3); // ch = 0 __delay_us(20); bitset(ADCON0,2); while(1){ if ( bitread(ADCON0,2) == 0 ) break; } ch0 = ADRESH;
Tools --- Options --- Embedded --- Default Charset を Shift_JIS に変えておく。 File --- Import でプロジェクトの mcp ファイルを指定する。 プロジェクトフォルダの中に、MPLAB X が作成したプロジェクト フォルダが生成される。プロジェクト名が abc なら、フォルダ名は abc.X となる。 HEX ファイルは以下にできる。 abc.X --- dist --- default --- production
> アドウィンの PIC Programmer A を使う方法 書き込み用ソフト PICpro をインストールする。 買ったときに付属している CD に入っているが、 アドウィンのホームページにもあるようだ。 > Microchip の PICkit2 を使う方法 MPLAB-X をインストールすると、PICkit2 用の書き込みソフト PICkit 2 Programmer も自動的にインストールされるようだ。 16F685 に書き込む方法 1. ハードウェアのティップスイッチ 20 pin である。ディップスイッチは 8p, 14p, 18p を選ぶ。 2. PICkit2 Programmer の設定 Device Family --- Mid Range --- Standard Programmer --- Verify on Write Clear Memory Buffer on Write の 2 箇所にチェックを入れる Manual Device Select はチェックしない。 自動的に 16F685 が認識される Tools --- Fast Programmin のみチェックする 3. 書き込み File ---- Import hex file で hex ファイルを読み込む。 「Write」を押す