各位前輩,如下是我整的pic 16f676的ad轉換程序,不知咋的仿真就是看不到有採集到數據,麻煩各位前輩順道就幫我看看,謝謝了 另還有一个问题,这个16f676数据手册上没有看到有pwm的功能,不知有木有用过的前辈帮我确认下是否真的没有这个功能,如果要输出可调脉冲占空比的,是否用定时器来做? thanks
#include<pic.h>
__CONFIG (INTOSCIO & UNPROTECT & PWRTEN & BOREN & WDTDIS & MCLRDIS);
#define uchar unsigned char
#define uint unsigned int
void adinit(void);
uint ADSTAT(uchar adnum); //ad轉換函數
void delay(char t);
int get_ad(void);
int adnum,adc_result;
void main()
{
TRISA=0X03;//RA0,RA2wei shu ru
TRISC=0X00;//RC WEI SHU RU
PORTA=0x00;
PORTC=0x00;
ADCON0=0B10000001;//右對齊,RA0通道,開啟AD模塊
ADCON1=0B00010000;//FOSC/8
ANSEL=0X01;//RA0WEI MONI SHU RU TONG DAO;
delay(5);
//PEIE=1; //SHI NENG WAI SHE ZHONG DUAN
//ADIE=1; //SHI NENG AD ZHONG DUAN
//GIE=1; //KAI ZONG ZHONG DUAN
while(1)
{
adnum=get_ad();
if(adnum>1200) RC0=1;
else if(adnum<=120) RC0=0;
}
}
int get_ad()
{
uint ad_result;
uchar i=0;
ADCON0=0B10000001|0B00000010;//QI DONG AD
//while(ADIF);
ad_result=ADRESH;
ad_result=ad_result<<8|ADRESL;
for(i=0;i<=3;i++)
{
ad_result+=ad_result;
delay(3);
}
ad_result=ad_result/3;
return (ad_result);
}
void delay(char t)
{
int x,y;
for(x=t;x<0;x--)
for(y=120;y<0;y--);
} |