/***************************** * 間欠タイマー * 16F627A * XC8 V1.35 * * RA6←MACHからの入力想定 * RA2←制御機器へ *****************************/ #include #define _XTAL_FREQ 4000000 //delay用宣言 // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define KanketuTime 2 #define DousaTime 1 #define On 0 #define Off 1 int Start; //関数宣言 void Second(int sec); void interrupt InterSyori( void ){//TMR0の割り込み処理 if(TMR0IF==1){//割り込みがあったら if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする if(Start==0){ Start=1; } } if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして if(Start==1){ Start=0; RA2=Off;//機器の動作を強制的に止める。 } } TMR0=0; TMR0IF=0; } } // メイン関数 void main (void){ OSCF=1;//内蔵発振器 4MHz使用に設定 CMCON = 0x07;// 1,2,17,18端子を入出力端子に設定 PORTA = 0x00;// 電圧レベルの初期設定 PORTB = 0xFF; // 入出力設定 TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力 TRISB = 0b11111111;//RB0は入力 //初期設定 RA2=Off;//MACH RA6=Off; Start=0; //割り込み設定 OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない TMR0=0; //TMR0カウンターを0に TMR0IF=0; //TMR0フラグクリアー TMR0IE=1;//TMR0割り込み許可 GIE=1;//全体割り込み許可 // 永久ループ while(1){ if(Start==1){//スタートフラグが1なら動作開始 RA2=On; Second(DousaTime); RA2=Off; Second(KanketuTime); } } } // 待ち時間関数} void Second(int sec){ while(sec >0){ sec--; __delay_ms(1000); } }