MPLAB X IDE ADC代码无法正常工作

时间:2014-08-23 06:52:30

标签: pic microchip lcd mplab adc

我是微控制器的初学者,我刚进入ADC,但每当我尝试进行转换时它都无法工作,我试图在液晶显示器上显示结果,但问题不在于液晶显示器,因为我单独尝试了它的代码它起作用所以问题肯定是ADC的寄存器,这里是完整的代码::

的main.c:

#include "config.h"

int result;

void main(){
    TRISAbits.TRISA0 = 1;   //Set Port A for input
    ADCON0 = 0b01000000;    //Configuring ADCON0 register
    ADCON1 = 0b10000000;    //Configuring ADCON1 register

    ADCON0bits.ADON = 1;    //Turn on ADON bit in ADCON0 register to turn on ADC module
    __delay_us(50);         //Delay for the capacitor to be charged


    ADCON0bits.GO_DONE = 1;

    while(ADCON0bits.GO_DONE == 1);

    result = ADRESH && ADRESL;

    initLCD();
    write_character(result);

    while(1);
}

的config.h:

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000


void send_command(int command);
void write_character(int character);
void enable_blink(void);
void moveto(char b6, char b5, char b4, char b3, char b2, char b1, char b0);
void initLCD(void);

void send_command(int command){
    PORTCbits.RC0 = 0;
    PORTB = command;
    enable_blink();

}

void write_character(int character){
    PORTCbits.RC0 = 1;
    PORTB = character;
    enable_blink();

}

void enable_blink(){
    PORTCbits.RC1 = 1;
    __delay_ms(10);
    PORTCbits.RC1 = 0;
    __delay_ms(10);

}

void moveto(char b6, char b5, char b4, char b3, char b2, char b1, char b0){
    PORTCbits.RC0 = 0;
    PORTBbits.RB7 = 1;

    PORTBbits.RB6 = b6;
    PORTBbits.RB5 = b5;
    PORTBbits.RB4 = b4;
    PORTBbits.RB3 = b3;
    PORTBbits.RB2 = b2;
    PORTBbits.RB1 = b1;
    PORTBbits.RB0 = b0;

    enable_blink();

}

void initLCD(){

    TRISB = 0;
    TRISC = 0;
    send_command(0x38);
    __delay_us(40);
    send_command(0x01);
    __delay_ms(1.75);
    send_command(0x0C);
    __delay_us(40);

}

1 个答案:

答案 0 :(得分:0)

您的结果行可能有问题。请尝试以下方法:

result = ( ( ADRESH << 8 ) | ( ADRESL ) )

双&amp; operator(&amp;&amp;)是逻辑AND。只要ADRESH和ADRESL都大于1,AND将返回true(1)。您希望按位OR(|)运算符将两个字节组合成一个int,其中ADRESH为最高有效字节,ADRESL为最不重要的字节。

希望这有效!