PIC18F14K50は16ビットアーキテクチャを
持った次世代PICである。
メモリが大きいので C言語に向いている

LEDを点滅させてみよう
回路は下記である

さて LEDを点滅させて、KEY入力で オレンジと緑を切り替えている、簡単なプログラムである
LED7を点滅させておいて
KEY RB5が入力されると、フラグを立てる
フラグが立っているあいだは LED6が点滅している

PIC18F14KのLED点灯

次に重要なのは、I/O設定である
LEDの点滅(出力)はできたが、KEY入力ができなかった。
PIC16と違って、I/Oを デジタルI/Oに設定しないと、KEYのON,OFFが検出できないのである

ANSEL = 0b00000000 ; //デジタルI/Oに割当
ANSELH = 0b00000000 ;

ラッチレジスタをもっているので、PORTではなくLATをしようしている

#include <xc.h> // PIC のハードウエア定義

#define _XTAL_FREQ 16000000

#pragma config FOSC = IRC, PLLEN = ON, FCMEN = OFF
#pragma config IESO = OFF, USBDIV = OFF, CPUDIV = NOCLKDIV
#pragma config PWRTEN = OFF, BOREN = OFF, WDTEN = OFF
#pragma config HFOFST = OFF, MCLRE = ON
#pragma config STVREN = ON, BBSIZ = OFF, LVP = OFF
#pragma config XINST = OFF
#pragma config CP0 = OFF, CP1 = OFF, CPB = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF
#pragma config LVP = OFF

int flg ;

void delay(int num)
           {
           while(--num > 0) __delay_us(1000);
           }



void main(void){

OSCCON = 0b01110010; // 内部クロック
ANSEL = 0b00000000 ; //デジタルI/Oに割当
ANSELH = 0b00000000 ;


TRISB = 0b00111111; // LEDの接続されている6,7ポートを出力に設定
TRISC = 0B10000000; //PC7 入力
flg=0;
while(1){
     LATB =0b10000000;
     delay(500);
     LATB7 = 0; //oreLED
     delay(500);
     if(PORTBbits.RB5 == 0) {flg=1;}

     while(flg == 1){
              LATB6 = 1;
              delay(500);
              LATB6 =0;
              delay(500);
              if(RB4 == 0){flg=0;break;}
             } //flg
      }

}

動作の基本
PIC18F14Kは内部クロックをもっているので、内部クロックを働かせよう

OSCCON = 0b01110010; // 内部クロック 16M

これで内部クロックが働く

工事中ーー