查看: 1539|回复: 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
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|