PR
キーワードサーチ
カレンダー
コメント新着
フリーページ


#include <stdio.h>
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON
& BOREN_ON & MCLRE_ON & IESO_OFF
& FCMEN_OFF & CP_OFF) ;
#define _XTAL_FREQ 8000000
int dly;
void dl()
{
int i;
i = dly;
while(i--);
}
void interrupt isr(void)
{
if(GPIF) {
if(GP0) {
//dl();
GPIO = 0x10 | (GPIO & 0x0f);
GP2 = 1;
} else {
//dl();
GPIO = 0x20 | (GPIO & 0x0f);
GP2 = 0;
}
GPIF = 0;
}
}
void main(void)
{
OSCCON = 0b01111110; // 内臓クロック8MHzに設定
ANSEL = 0b00000010; // AN1
TRISIO = 0b00001011;
// GPIO
CMCON0 = 0b00000111; //
IOCbits.IOC0 = 1;
INTCONbits.GPIE = 1;
INTCONbits.GPIF = 0;
// Grobal interrupt
INTCONbits.GIE = 1; // Grobal interruptを有効にする
INTCONbits.PEIE = 1; // 外部割込みを有効にする
/*ADC初期設定*/
ADCON0 = 0b10000101; //右詰め|基準電圧は電源Vdd)|空白|空白|AN1(GP1)|ADC終了|ADC有効
GPIO = 0x10 | (GPIO & 0x0f);
__delay_ms(20);
GPIO = 0x20 | (GPIO & 0x0f);
while(1) {
__delay_us(25);
GO = 1; //ADC変換開始
while(GO); //ADC変換終了までループ待機
dly = ADRESL + (ADRESH << 8);
dly /= 4;
if(dly < 3) dly = 1;
}
for(;;);
}