-
哪位前辈能告诉我,Pic16f883测电压不准是怎么回事?
我手头有两只pic16f883,不想报废,于是参考别人代码编写了2路A/D转换程序,采用Proteus仿真误差很大,明明是5V参考电压,结果显示8V多,不知哪里出问题了?时钟从1MHZ~20MHZ都是一样的结果,不知是Proteus仿真软件的bug还是代码有问题,请大侠帮忙//名称:数码管显示两路A/D转换结果//-----------------------------------------------------------------//说明:调节RV1和RV2时,两路模拟电压将显示在集成式数码管上.////-----------------------------------------------------------------#include__CONFIG(0x2004);//??????//配置字要在头文件后PROTEUS仿真也要有改为__CONFIG(0x2002);也不行//bit13=1禁止在线调试bit12=0关系RB3数字口bit11=0禁止故障保护时钟监视器bit10=0禁止内外时钟切换//bit9/8=00禁止欠压复位bit7=0使能RAM保护bit6=0使能ROMbit5=0内部复位RB3为数字引脚//bit4=0使能上电延时定时器bit3=0禁止看门狗bit2:0=100INTOSCO振荡,RA6/7为I/O口手册14.1配置位#defineINT8Uunsignedchar#defineINT16Uunsignedint#define_XTAL_FREQ4000000UL//共阳数码管0~9的数字段码,最后一位为黑屏constINT8USEG_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};//两路模拟转换结果显示缓冲,显示格式为:X.XXX.XX,第4位和第8位不显示volatileINT8UDisplay_Buffer[]={0,0,0,10,0,0,0,10};//1.108ms@1MHZvoiddelay_xms(INT16Ums){INT8Ui;while(ms--)for(i=0;i<20;i++);}//-----------------------------------------------------------------//对通道Channel进行模数转换,转换结果分解存入显示缓冲//-----------------------------------------------------------------voidADC_Convert(INT8UChannel){//设置ADCON0寄存器的通道选择位CHS[3..0]=Channel(0~13)//选择通道后等待CHS3=Channel>>3;CHS2=Channel>>2;CHS1=Channel>>1;CHS0=Channel>>0;//__delay_us(1);//选择通道后等待delay_xms(10);//开始
2025-03-17 6