16F18326で「スイッチONするとLED点灯」
18F18326でスイッチONするとLEDを点灯させてみます。




スイッチON/OFFの判定方法
基本プルアップして使用するので RC3 に電圧をかけて RC3の電圧が0になったらスイッチがONになったことを判断します

RC3をプルアップします
 WPUA = 0b00000000;
 WPUC = 0b00001000 ; // RC3をプルアップ

スイッチONを検知してLEDを点灯するプログラム
if を使用してスイッチがONになっているか判定します

 while(1){ // SW1がONになった時(RC3が接地された時)
 if(RC3 == 0){ // SW1がONになった時 0
 RC2 = 1; //* RC2 LED点灯 */
 }else{
 RC2 = 0; //* RC2 LED消灯 */
 }
 }



プログラム

/*
* 16F18326 LED点灯
*
* スイッチを押している間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 ; // デジタル(0)
ANSELC = 0b00000000 ; // デジタル(0)
TRISA = 0b00111111 ; // RA0 RA1 RA2 RA3 RA4 RA5 全て入力(1)
TRISC = 0b00111011; // RC0 RC1 RC3 RC4 RC5 入力(1) RC2 出力(0)
WPUA = 0b00000000;
WPUC = 0b00001000 ; // RC3をプルアップ
PORTA = 0b00000000 ; /* PORTAクリア */
PORTC = 0b00000000 ; /* PORTCクリア */

while(1){ // SW1がONになった時(RC3が接地された時)
if(RC3 == 0){ // SW1がONになった時 0
RC2 = 1; //* RC2 LED点灯 */
}else{
RC2 = 0; //* RC2 LED消灯 */
}
}

}


テストプログラム

 test_003.c