MCU是PIC12F675
#include<pic.h>
#include <xc.h>
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#define ad GP2
#define led1 GP4//??
#define led2 GP5//??
#define uchar unsigned char
#define uint unsigned int
uchar adnum1;
uchar adnum2;
uchar i;
uint get_ad();
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++);
}
void display(uchar adnum1,uchar adnum2)
{
for(i=0;i<adnum1;i++)
{
led1=0;led2=0;delay();//開燈GP4低電平有效,GP5高電平有效
led1=1;led2=0; delay();//關燈
}
delay();
for(i=0;i<adnum2;i++)
{
led1=1;led2=1;delay();
led1=1;led2=0; delay();
}
}
uint get_ad()
{
uint adval;//=0;
adval=0b1000101100;
return(adval);
}
void advalue()
{
uint adnum;
uint advin;
float vin;
while(1)
{
//advin=get_ad;//用這得不到正確的get_ad返回值
advin=0b1000101100;//用這驗證是OK的
vin=(4.6*advin)/1023;
adnum=vin*1000;
adnum1=adnum/1000;
adnum2=adnum%1000/100;
display(adnum1,adnum2);
delay();
}
}
void init()
{
OSCCAL=0b00000000;//????
TRISIO=0b00001111;//????
OPTION_REG=0b10000000;//??????
ADCON0=0b00001011;//
ANSEL=0b00110100;//
ADFM=0;
delay();
}
void main()
{
init();
while(1)
{
advalue();
}
}
|