#freeze
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)~
*発光ダイオード(LED)の点滅(16F1827 XC8) [#u587f631]

PIC16F1827で、XC8でLED(発光ダイオード)の点滅動作を確認した。

【ポイント】
1.出力には16F1XXXシリーズに装備されたLATレジスターを利用した。
↓なぜLATレジスターが必要か?を解りやすく解説したページ
http://homepage3.nifty.com/mitt/pic/pic1320_06.html
2.__delay_ms()は引数に変数が設定できないので、引数に変数が設定できる
arg_delay_ms()関数を定義した。    2014/1/2

|&attachref(1827led点灯画像.jpg,zoom,200x300,button){新しい写真添付};|&attachref(16F1827ピン配置.JPG,zoom,200x250,button){新しい写真添付};|

 /* LEDの点滅
  * PIC16F1827
  * XC8 v1.20
  * LED:RA1,RA2
  */
 #include <xc.h>
 
 #pragma config FOSC = INTOSC, WDTE = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
 #pragma config PLLEN = OFF, STVREN = OFF, LVP = OFF
 
 //__delay_us(), __delay_ms()へのクロック情報の設定
 #define _XTAL_FREQ 8000000 //PICのクロックをHzで設定(8MHz)
 
 //関数のプロトタイプ宣言
 void arg_delay_ms(unsigned int x);
 
 int main(void) {
     //使用変数の定義
    unsigned int wait = 500; //待ち時間の設定
 
    //PICの初期設定
    PORTA = 0b00000000; //PORTAの中身をきれいにする
    TRISA = 0b00000000; //PORTA全てを0:出力に設定
    OSCCON = 0b01110000; //PLL:OFF, 内部クロック8MHzで駆動
    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) {
         LATAbits.LATA1 = 1; //RA1 LED ON
         arg_delay_ms(wait); //所定時間待つ
        LATAbits.LATA1 = 0; //RA1 LED OFF
         arg_delay_ms(wait); //所定時間待つ
    }
 }
 
 //待ち時間が変数設定できるarg_delay_ms()関数を定義
 //(__delay_ms()は引数に変数設定が出来ない為)
 void arg_delay_ms(unsigned int x) {
     while(x) {
         __delay_ms(1);
         x--;
     }
 }

★この情報は役に立ちましたか?
#vote(はい[3],普通[0],いいえ[2])

#comment_nospam