閲覧総計:10772  (本日:3  昨日:3)

スイッチ入力(16F1827 XC8)

今回はスイッチ動作の確認を行った。
スイッチ(RB4)を押している間だけLED(RA1)が点灯するプログラム。

【ポイント】
・スイッチ(RB4)のプルアップは、16F1827のPORTBは内部ウィークプルアップ機能
を持っているので、これを利用した。
OPTION_REGbits.nWPUEN = 0; // 0:PORTB内部プルアップ利用に設定
WPUBbits.WPUB4 = 1; // RB4をウィークプルアップ
2014/1/1

TS3V0004.JPG1827switchのプログラム画面.jpg
/*スイッチを押してる間だけLEDが点灯する
 * PIC16F1827
 * XC8 v1.20
 * LED:RA1,RA2
 * スイッチ:RB4
 */
#include <xc.h>
 
#pragma config FOSC = INTOSC, WDTE = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#pragma config PLLEN = OFF, STVREN = OFF, LVP = OFF
 
int main(void) {
     //PICの初期設定
    PORTA = 0b00000000; //PORTAの中身をきれいにする
    PORTB = 0b00000000; //PORTBの中身をきれいにする
    TRISA = 0b00000000; //PORTA全てを0:出力に設定
    TRISB = 0b00010000; //PORTBはRB4を1:入力に他を全て0:出力に設定
    OSCCON = 0b01110000; //PLL:OFF, 内部クロック8MHzで駆動
    OPTION_REGbits.nWPUEN = 0; // 0:PORTB内部プルアップ利用に設定
    WPUBbits.WPUB4 = 1; // RB4をウィークプルアップ
    ANSELA = 0b00000000; //RA4(AN4)-RA0(AN0)は全て0:デジタルI/Oとする
    ANSELB = 0b00000000; //RB7(AN6)-RB1(AN11)は全て0:デジタルI/Oとする
 
    //メイン処理
    LATAbits.LATA2 = 1; //RA2:パワーオンを示すLED点灯
    while(1) {
         if(PORTBbits.RB4 == 0) { //RB4のswitch 0:downの時
            LATAbits.LATA1 = 1; //RA1 LED ON
         } else { //RB4のswitch 1:upの時
            LATAbits.LATA1 = 0; //RA1 LED OFF
         }
    }
}

★この情報は役に立ちましたか?

選択肢 投票
はい 48  
普通 37  
いいえ 38  

添付ファイル: fileTS3V0004.JPG 1517件 [詳細] file1827switchのプログラム画面.jpg 1396件 [詳細]