PIC18F14K50は16ビットアーキテクチャを
持った次世代PICである。
メモリが大きいので C言語に向いている
LEDを点滅させてみよう
回路は下記である
さて LEDを点滅させて、KEY入力で オレンジと緑を切り替えている、簡単なプログラムである
LED7を点滅させておいて
KEY RB5が入力されると、フラグを立てる
フラグが立っているあいだは LED6が点滅している
次に重要なのは、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
これで内部クロックが働く
工事中ーー