| 
 
查看: 1619|回复: 9
 
 | 
adc 读不到资料。
[复制链接]
 | 
 
 
 | 
 | 
 
各位大大!我之前是使用汇编语言编程的,对于这颗晶也有一定程度的认识。曾经用过内置的 A/D converter,也相当顺利。 
 
可是最近使用了 HI-TECH 的 PICC 编译器,在 ADC 方面出现了一个问题。我读不到 AN0 与 AN1的输入的 analog 电压。 
我用 ICD-2 debugger,当我改变 analog 的输入电压时,ADRESH 与 ADRESL 的值完全没改变。 
我认为问题是发生在我的 register configuration 处。我的configuration 如下:请看有什么问题吗? 
 
void hardware_initialize(void) 
{ 
    /* Bank 0 */ 
    STATUS  = 0x00; 
    CMCON0  = 0x07; 
    PORTA   = 0x00; 
    PORTC   = 0x00; 
    INTCON  = 0x00; /* Interrupt Control Bit*/ 
    PIR1    = 0x00; /* Interrupt Flag */ 
    PCON    = 0x03; 
    ADCON0  = 0x00; /* A/D Result Format Left justified */ 
    ADCON1  = 0x40; /* Fosc/4 */ 
    
    /* Bank 1 */ 
    OSCCON  = 0x01; /* Internal oscillator is used for system clock */ 
    IRCF0   = 0;    /*                     (bit 4)*/ 
    IRCF1   = 1;    /* System clock 250kHz (bit-5)*/ 
    IRCF2   = 0;    /*                     (bit-6)*/ 
    PIE1    = 0x00; /* Interrupt Enable Bit */ 
    OPTION  = 0x80; /* Disable PORTA Pull-up */ 
    WPUA    = 0x00; /* Pull-up disable */ 
    TRISA   = 0x3F; 
    TRISC   = 0x10; 
    ANSEL   = 0x03; /* Analog input Select ANS1:ANS0 */ 
} 
 
 
 
[ 本帖最后由 rothmans 于 18-10-2007 10:42 PM 编辑 ] |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 19-10-2007 09:45 AM
|
显示全部楼层
 
 
 
回复 #1 rothmans 的帖子
你还是用回你熟悉的ASM吧。   
 
你用Hitech-C, 还要control register。。。 
你应该用它build in的ADC function, 这是用C的目的。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
 楼主 |
发表于 19-10-2007 09:55 AM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 19-10-2007 10:37 AM
|
显示全部楼层
 
 
 
原帖由 rothmans 于 19-10-2007 09:55 AM 发表   
哦!版主,也许你误会了我的意思吧。我是说设置我的 SPECIAL FUNCTION REGISTERS. 就比如说我要 PORT-A 成为输入的话,必须设置 TRISA = 0xFF 类似的意思。Hitech-C 有build in的ADC function吗?不好意思, ...   
HiTech-C 我没有用过, 如你用CCS C 我可以告诉你。 
 
就比如说我要 PORT-B 成为输入的话 
set_tris_B(0b11111111); 
 
 
更简单的是不用管TRIS的Setting, 直接用  
int x; 
x=input_B();  // port B 变input 
PortB 的value就去x var了。 
 
output_B(0xFF);// port B 又变output, 输出8个1. 
 
注: 我很少用Input. / Output build in function) 
 
当然,control I/O 还有其他方法。。。。 
 
除非要Full control, 不然很少control SFR。 |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
 楼主 |
发表于 19-10-2007 12:20 PM
|
显示全部楼层
 
 
 
原帖由 pic 于 19-10-2007 10:37 AM 发表   
 
HiTech-C 我没有用过, 如你用CCS C 我可以告诉你。 
 
就比如说我要 PORT-B 成为输入的话 
set_tris_B(0b11111111); 
 
 
更简单的是不用管TRIS的Setting, 直接用  
int x; 
x=input_B();  // port B 变inp ...   
 
 
多谢版主的指导,虽然没有得到答案,我还是会尽力的摸索,希望能与大家分享。我暂时是不会更换编译器的了。 
 
[ 本帖最后由 rothmans 于 19-10-2007 12:22 PM 编辑 ] |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 19-10-2007 02:12 PM
|
显示全部楼层
 
 
 
原帖由 rothmans 于 19-10-2007 12:20 PM 发表   
 
 
 
多谢版主的指导,虽然没有得到答案,我还是会尽力的摸索,希望能与大家分享。我暂时是不会更换编译器的了。   
 
你用什么ic? 
如果是16f877a。 
大概是adcon0 的bit 0, ADON没有set. 
ADCON0 = 0x01; 
 
[ 本帖最后由 fritlizt 于 19-10-2007 02:16 PM 编辑 ] |   
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
		
 | 
 | 
 
 
 楼主 |
发表于 19-10-2007 02:47 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
 楼主 |
发表于 19-10-2007 04:25 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
发表于 19-10-2007 04:36 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 | 
 | 
 
 
 楼主 |
发表于 19-10-2007 05:41 PM
|
显示全部楼层
 
 
 
 |  
| 
 | 
 
 
 | 
 | 
 
| 
 | 
 | 
 
 
 
 
 |   | 
            本周最热论坛帖子
 
 
 
 |