16F18326で「LED点滅」
18F18326でLEDを点滅させてみます。

動作は電源を入れるとLEDが点滅します



8pin RC2を出力に設定してLEDを点滅します
1秒点灯
1秒消灯

点滅させる為のプログラム


 while(1){
 PORTC = 0b00000100;  // RC2 点灯
 __delay_ms(1000);     // 一秒待つ  待時間 __delay  時間設定 _ms(1000) 単位が ms (0.001秒)なので1秒は 1000となります
 PORTC = 0b00000000; // RC2 消灯
 __delay_ms(1000);     // 一秒待つ  待時間 __delay  時間設定 _ms(1000) 単位が ms (0.001秒)なので1秒は 1000となります
 }


入出力ピンは

2pin RA5
3pin RA4
4pin RA3
5pin RC5
6pin RC4
7pin RC3
8pin RC2
9pin RC1
10pin RC2
11pin RA2
12pin RA1
13pin RA0


入出力ピンをアナログまたはデジタルで入出力するかを設定  アナログ(1) デジタル(0)

ANSELA = 0b00000000
入出力 ----- ----- RA5 RA4 RA3 RA2 RA1 RA0
 pin番号 ----- ----- 2pin 3pin 4pin 11pin 12pin 13pin
ANSELA 0 0 0 0 0


ANSELC = 0b00000000
入出力 ----- ----- RC5 RC4 RC3 RC2 RC1 RC0
 pin番号 ----- ----- 13pin 12pin 11pin 4pin 3pin 2pin
ANSELC 0 0 0 0 0




入出力ピンを入力または出力で使用するか設定 入力(1) 出力(0)

TRISA = 0b00111111  全て入力
入出力 ----- ----- RA5 RA4 RA3 RA2 RA1 RA0
 pin番号 ----- ----- 2pin 3pin 4pin 11pin 12pin 13pin
TRISA 0 0 0 0 0



TRISC = 0b00111011  入力 RC0 RC1 RC3 RC4 RC5 出力 RC2
入出力 ----- ----- RC5 RC4 RC3 RC2 RC1 RC0
 pin番号 ----- ----- 13pin 12pin 11pin 4pin 3pin 2pin
TRISC 0 0 0 0 1 0




RC2から出力(電圧を出力)する
PORTC = 0b00000100 
出力 ----- ----- RC5 RC4 RC3 RC2 RC1 RC0
 pin番号 ----- ----- 13pin 12pin 11pin 4pin 3pin 2pin
PORTC 0 0 0 0 1 0




RC2から出力を停止する
PORTC = 0b00000000 
出力 ----- ----- RC5 RC4 RC3 RC2 RC1 RC0
 pin番号 ----- ----- 13pin 12pin 11pin 4pin 3pin 2pin
PORTC 0 0 0 0 0 0




プログラム

/*
* 16F18326 LED点滅
*
* クロックは内部クロック使用
* -------------------------------------------------------
* 16F18326接続
* 1pin VDD +5V
* 2pin RA5
* 3pin RA4
* 4pin RA3
* 5pin RC5
* 6pin RC4
* 7pin RC3
* 8pin RC2 LED
* 9pin RC1
* 10pin RC2
* 11pin RA2
* 12pin RA1
* 13pin RA0
* 14pin GND
* -------------------------------------------------------
*/

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// CONFIG1
#pragma config FEXTOSC = OFF //*** FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT32 //*** Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF //クロック出力を無効とし、RA4ピンとして使用する // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2)
#pragma config CSWEN = ON //*** Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = OFF //外部クロックを監視しない // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config MCLRE = OFF //MCLRピンをRA3として使用する // Master Clear Enable bit (MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit.)
#pragma config PWRTE = ON //パワーアップタイマーを有効にする // Power-up Timer Enable bit (PWRT enabled)
#pragma config WDTE = OFF //ウォッチドックタイマー無効 // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF //LPBOR = OFF //低消費電力ブラウンアウトリセット無効 // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = ON //ブラウンアウトリセットを有効にする // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored)
#pragma config BORV = HIGH //ブラウンアウトリセット電圧を高(?V)に設定 // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = OFF //ロック解除シーケンスで何度でもPPSLOCKをセット/クリアできる // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON //スタックオーバーフローリセットを行う // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset)
#pragma config DEBUG = OFF //*** Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF //フラッシュメモリを保護しない // User NVM self-write protection bits (Write protection off)
#pragma config LVP = OFF //低電圧プログラミングを行わない // Low Voltage Programming Enable bit (High Voltage on MCLR/VPP must be used for programming.)

// CONFIG4
#pragma config CP = OFF //プログラムメモリを保護しない // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF //1840と同じ設定 // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

#define _XTAL_FREQ 32000000 //クロック32MHz


void main() {
OSCCON1 = 0b01110000 ; // 内部クロック8MHz ×4=32MHz
ANSELA = 0b00000000 ; // ANA0(RA0) ANA1(RA1) ANA2(RA2) ANA4(RA4) ANA5(RA5) デジタル(0)アナログ(1) 3bit目は(0)
ANSELC = 0b00000000 ; // ANC0(RC0) ANC1(RC1) ANC2(RC2) ANC3(RA3) ANC4(RA4) ANC5(RA5) デジタル(0)アナログ(1)
TRISA = 0b00011111 ; // PORTA RA0 RA1 RA2 RA3 RA4 RA5 全て入力(1)
TRISC = 0b00011011; // ROTRC RC0 RC1 RC2 RC3 RC4 RC5 入力(1) RC2 出力(0)

PORTA = 0b00000000 ; // PORTAクリア
PORTC = 0b00000000 ; // PORTCクリア


while(1){
PORTC = 0b00000100; // RC2 点灯
__delay_ms(1000); // 一秒待つ
PORTC = 0b00000000; // RC2 消灯
__delay_ms(1000); // 一秒待つ

}
}


テストプログラム

 test_002.c