Programació en C del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Exemple VP - Mostrem la lectura del potenciòmetre a la pantalla sèrie

En aquest cas tindrem un potenciòmetre connectat a una entrada analògica i escriurem el valor llegit a la pantalla.

En el nostre cas tindrem un resultat de 10 bits (valors de 000h a 3FFh; o sigui de 0 a 1023) que guardarem en una variable entera. El que farem doncs serà triar l'alineació a la dreta (ADFM valdrà 1). Un cop tinguem el valor, en separarem els dígits, els convertirem a caràcters ASCII i els enviarem a la pantalla.

El programa que emprarem serà:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF
#pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include <xc.h>  // Carrega el fitxer de funcions necessari per al compilador XC8
#define _XTAL_FREQ  4000000  // La freqüència del rellotge és 4 MHz
unsigned int Lectura;  // Valor llegit
char Digits[5];  // Variable amb el número dígit a dígit
  // Digits[0] són les unitats
// Definició de les funcions que farem servir 
void EnviaL(char Caracter);  // Envia un caràcter
void Esborra(void);  // Esborra la pantalla i posa el cursor a l'inici
void main (void){
  TRISC = 0b00000000;  // Posa el port C com a sortida
  TRISB = 0b00000000;  // Posa el port B com a sortida
  TRISA = 0xFF;  // Posa el port B com a entrada
  ANSEL = 0;  // Desactiva totes les entrades analògiques
  ANSELH = 0;  
  ANSELbits.ANS0 = 1;  // I ara activa la del potenciòmetre (AN0)
  ADCON1 = 0b00010000;  // Posa el conversor a 1/8 de la freqüència
  ADCON0 = 0b10000001;  // Activa el conversor connectat a AN0
  // amb el resultat justificat per la dreta
  __delay_ms(2000);  // Esperem que arrenqui la pantalla
  TXSTAbits.BRGH = 1;  // Configuració de velocitat
  BAUDCTLbits.BRG16 = 0;  // Paràmetre de velocitat de 8 bits
  SPBRG = 25;  // Velocitat de 9600 baud
  TXSTAbits.SYNC = 0;  // Comunicació asíncrona
  TXSTAbits.TX9 = 0;  // Comunicació de 8 bits
  RCSTAbits.SPEN = 1;  // Activa comunicació sèrie
  TXSTAbits.TXEN = 1;  // Activa comunicació
  while (1){  // Bucle infinit
    Esborra();  // Esborra la pantalla i posa el cursor a l'inici
    ADCON0bits.GO = 1;  // Posa en marxa el conversor
    while (ADCON0bits.GO == 1)  // Mentre no acabi
      ;  // ens esperem
    Lectura = ADRESH;
    Lectura = Lectura << 8;
    Lectura = Lectura | ADRESL;  // Valor llegit
    for (signed char j = 0; j < 5; j++){  // 5 dígits
      Digits[j] = (Lectura % 10) + '0';  // Li sumem el codi ASCII de 0
      Lectura = Lectura / 10;
    }
    for (signed char j = 4; j >= 0; j--){  // 5 dígits
      EnviaL(Digits[j]);
    }
    __delay_ms(1000);  // Retard per permetre la visualització
  }
}
void EnviaL(char Caracter) {
  TXREG = Caracter;  // Agafa el caràcter i l'envia
  __delay_ms(1);  // Donem temps
  while (PIR1bits.TXIF == 0)  // Esperem que s'acabi d'enviar
    ;  // No fem res
}
void Esborra(void) {
  EnviaL(254);  // Caràcter de control
  EnviaL(1);  // Esborra la pantalla i posa el cursor a l'inici
}

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.