Transcript
  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    1/71

    Introduccin

    Lenguaje C desarrollado por Bell Labs(Lucent Technologies) en 1979 por D. Ritchie

    Lenguaje estructurado Portatil De alto nivel A pesar de ser un lenguaje de alto nivel se

    puede acceder a el hardware de bajo nivel

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    2/71

    Definicin - Programa

    Est constituido por un conjunto deinstrucciones que se ejecutan generalmentede modo secuencial.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    3/71

    Caracteristicas de uso de

    lenguajes de alto nivel Los lenguajes de alto nivelson ms o

    menos comprensibles para el usuario,pero no para el procesador.

    Los programas de alto nivel deben sertraducidos para que el procesador lospueda entender se usa un compilador.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    4/71

    Niveles de Programacin

    Lenguaje CAlto nivelLenguaje CAlto nivel

    Lenguaje

    EnsambladorBajo nivel

    CdigoObjetoBinario

    Compilador

    Ensamblador

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    5/71

    Estructura de los Programas en

    lenguaje C Directivas al preprocesador.

    Declaracin de variables, funciones, tipos,Globales.

    Definicin de Variables Globales. Funciones.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    6/71

    Directivas al preprocesador.

    Son comandos especificos al compilador Por ejemplo: #include cargar los prototipos de la

    funciones standard de entrada salida. #device pic16f877a definir el

    microcontrolador a usar.

    #include cargar las definicionesparticulares del micro 17F877a

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    7/71

    Tipos de varibles o datos

    int1 Define numeros de 1 bit int8 Define numeros de 8 bits int16 Define numeros de 16 bits int32 Define numeros de 32 bits char Define caracter de 8 bits float Define numeros de 32 bits punto

    flotante short Por defecto igual a int1 Int Por defecto igual a int8 long Por defecto igual a int16

    void ningn tipo especifico.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    8/71

    Tipos de varibles o datos

    Int1 0 -- 1 Int8 0 -- 255 Int16 0 --65536 Int32 0 -- 4294967296 char 0 -- 255 float -3.4x10-38 3.4x1038

    Signed long -32768 -- 32767

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    9/71

    Nombre de las variables

    (Identificadores) Una variablese forma con una secuencia deletras (minsculas de la a a la z;

    maysculas de laA a la Z; y dgitos del 0al

    9). El carcterunderscore (_) (piso) se

    considera como una letra ms.

    Un identificador no puede contener espaciosen blanco, ni otros caracteres como (*,;.:-+,etc.).

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    10/71

    Nombre de las variables

    (Identificadores) El primer carcter de un identificador debe

    ser siempre una letra o un (_), es decir, no puede ser un dgito. Se hace distincin entre letras maysculas y

    minsculas. As, Masa es considerado como un identificador distinto de masa y de

    MASA. ANSI C permite definir identificadores de

    hasta 31 caracteres de longitud.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    11/71

    Nombre de las variables(Identificadores)

    Ejemplos de identificadores vlidos son los

    siguientes:tiempo,distancia1,caso_A,PIvelocidad_de_la_luz

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    12/71

    Declaracion de nombres,variables, funciones.

    Variables globales son declaradas fuera delas funciones.

    Variables locales son declaradas dentro de

    las funciones.

    Ejemplo: Int valor_puerto_a;

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    13/71

    Declaracion de nombres,variables, funciones.

    Generalmente al momento de declarar unavariable esta puede ser definida al mismotiempo.

    Int valor_puerto_a=8;

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    14/71

    Valores numricos

    Sistema decimal: 57

    Sistema binario : 0b111001

    Sistema hexadecimal: 0x39

    Caracter: '9'(Cdigo ASCII)

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    15/71

    Cdigo ASCII

    American Standard Code for InformationInterexchange

    Cdigo de caracteres basado en alfabeto

    latino. Creado en 1963 por Bell Labs Incluye caracteres no imprimibles (cdigos

    de control)

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    16/71

    Cdigo ASCII

    Dec Char Dec Char Dec Char Dec Char Dec Char Dec Char

    33 ! 49 1 65 A 81 Q 97 a 113 q

    34 " 50 2 66 B 82 R 98 b 114 r

    35 # 51 3 67 C 83 S 99 c 115 s

    36 $ 52 4 68 D 84 T 100 d 116 t

    37 % 53 5 69 E 85 U 101 e 117 u38 & 54 6 70 F 86 V 102 f 118 v

    39 55 7 71 G 87 W 103 g 119 w

    40 ( 56 8 72 H 88 X 104 h 120 x

    41 ) 57 9 73 I 89 Y 105 i 121 y

    42 * 58 : 74 J 90 Z 106 j 122 z

    43 + 59 ; 75 K 91 [ 107 k 123 {

    44 , 60 < 76 L 92 \ 108 l 124 |45 - 61 = 77 M 93 ] 109 m 125 }

    46 . 62 > 78 N 94 ^ 110 n 126 ~

    47 / 63 ? 79 O 95 _ 111 o 127 _

    48 0 64 @ 80 P 96 ` 112 p

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    17/71

    Funciones

    Una funcin del lenguaje C es una porcinde cdigo o programa que realiza unadeterminada tarea.

    En otros leguajes es llamada subrutina,subprograma, procedimiento, etc.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    18/71

    Ventajas del uso de funciones

    Permite la modularizacin del programa.

    Ahorra memoria y tiempo de desarrollo.

    (memoria de programa y memoria de datos)

    Independencia de datos y oculta informacinno necesaria par otras funciones.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    19/71

    Partes de una Funcin

    Nombre

    Valor de retorno

    Argumentos de la funcin.

    Valor_de_retorno

    NOMBRE(argumento1, argumento 2,etc){

    }

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    20/71

    Funcin Main

    Todo programa en lenguaje C sin importar sutamao de tener una funcin principal ofunci Main.

    void main(void)

    {

    sentencia_1

    sentencia_2

    ...

    }

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    21/71

    Ejemplo de programa

    // directiva al preprocesador/* incluir prototipo de entradasalida standard */

    #include

    #define PI 3.142

    // variable globalfloat area;/* declaracin de funcin /*int cuadrado(int r);

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    22/71

    Ejemplo de programa

    // funcion mainmain(){

    // variable localint radio_cuadrado;int radio = 3;radio_cuadrado=cuadrado(radio);/* pasar valor a la funcin */

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    23/71

    Ejemplo de programa

    area = PI * radio_cuadrado;/* sentencia de asignacin */

    printf(El area is %6.4f alcuadrado\n,area);

    } /* fin de la funcin main*/

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    24/71

    Ejemplo de programa

    int cuadrado(int r) /* funcin */{

    int r_cuadrado;

    // variable localr_cuadrado = r * r;return(r_cuadrado);/* retornar valor /*

    }

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    25/71

    Palabras claves

    auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    26/71

    Operadores Aritmticos

    Suma: + Resta: - Multiplicacin: * Divisin: / Resto: %

    Ejemplo:

    23%4 = 323/4 = 5.7523%4 = 23 4x5 = 3

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    27/71

    Operadores de incremento ydecremento

    Incremeto ++a=a+1 a++

    Decremento

    a=a-1 a- -

    Variacionesa++ opera y luego incrementa

    ++a incrementa y luego opera

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    28/71

    Operadores de incremento ydecremento

    Ejemplos:si k=2

    a=++k*4 = 12 (3*4)k=3

    b=4*k++ = 12 (4*3)

    k=4

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    29/71

    Operadores de asignacin

    Suma y asigna +=a=a+b a+=b

    Resta y asigna -=

    a=a-b a-=b Multiplica y asigna *=

    a=a*b a*=b Divide y asigna /=

    a=a/b a/=b

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    30/71

    Operadores relacionales

    Igual que: == Menor que: < Mayor que: > Menor o igual que: = Distinto que: !=

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    31/71

    Operadores lgicos

    Son usados en combinacin con losoperadores relacionales

    Operador logico Y &&if (a==b) && (b>=0)

    Operador lgico O ||if (c27)

    Operador lgico NO !if(!a) if(a) si a es diferente de cero

    if(!a) si a es igual a cero

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    32/71

    Operadores lgicos bitwise

    Operaciones sobre cada bit Y & (alt 038) O | (alt 124) Or exclusiva ^ (alt 094) Complemento a 1 ~ (alt 126) Despalzar a la derecha >> Despazar a la izquierda

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    33/71

    Operadores lgicos bitwise

    a = 0100 1101b = 1001 1011a | b = 1101 1111

    a=b>>3Si b = 0100 1100 b>>3 = 0000 1001a= 0x09

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    34/71

    Sentencia if

    if (expresion)sentencia_1;

    elsesentencia_2;

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    35/71

    Sentencia if

    if (expresion){sentencia_1;

    sentencia_2;}else{sentencia_3;

    sentencia_4;}

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    36/71

    Sentencia if

    if (expresion){

    sentencia_1;sentencia_2;

    }else

    {sentencia_3;sentencia_4;

    }

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    37/71

    Sentencia switch

    switch (expresion){case expresion_cte_1:

    sentencia_1;case expresion_cte_2:

    sentencia_2;....

    case expresion_cte_n:sentencia_n;

    default:sentencia;

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    38/71

    Sentencia switch*

    switch (expresion){

    case expresion_cte_1:sentencia_1;

    break;case expresion_cte_2:

    sentencia_2;break;

    ....case expresion_cte_n:

    sentencia_n;break;

    default:

    sentencia;

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    39/71

    Sentencia for

    for (inicializacion;expresion_de_control;

    actualizacion)sentencia;

    for(x=1;x

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    40/71

    Sentencia for

    for(x=1;x

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    41/71

    Sentencia while

    while(expresion){

    sentencia_1;

    sentencia_2;}

    Se verifica y luego se ejecuta

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    42/71

    Sentencia Do while

    do{

    sentencia_1;

    sentencia_2;}while(expresion)

    Se ejecuta y luego se verifica

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    43/71

    Funcin printf

    Imprime sobre un dispositivo estandard En PC dispositivo estandar es el monitor En PIC el dispositivo estandard es un puerto

    serial

    printf("cadena_de_control", tipo

    arg1, tipo arg2, ...)

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    44/71

    Funcin printf

    e 3.93E+002

    E 3.93E+002

    f Decimal floating point 392.65

    g Use the shorter of %e or %f 392.65

    G Use the shorter of %E or %f 392.65

    o Signed octal 610

    s String of characters sample

    u Unsigned decimal integer 7235

    x Unsigned hexadecimal integer 7fa

    X Unsigned hexadecimal integer (capital letters) 7FA

    p Pointer address B800:0000

    n

    %

    Scientific notation (mantise/exponent) using e character

    Scientific notation (mantise/exponent) using E character

    Nothing printed. The argument must be a pointer to a signed

    int, where the number of characters written so far is stored.

    A % followed by another % character will write % tostdout.

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    45/71

    Funcin printf

    printf ("Characters: %c %c \n", 'a', 65);Characters: a A

    printf ("Decimals: %d %ld\n", 1977, 650000);Decimals: 1977 650000

    printf ("Preceding with blanks: %10d \n", 1977);

    Preceding with blanks: 1977

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    46/71

    Funcin printf

    printf ("Preceding with zeros: %010d \n",1977);

    Preceding with zeros: 0000001977

    printf ("Some different radixes: %d %x %o %#x%#o \n", 100, 100, 100, 100, 100);

    Some different radixes: 100 64 144 0x64 0144

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    47/71

    Funcin printf

    printf ("floats: %4.2f %+.0e %E \n", 3.1416,3.1416, 3.1416);

    floats: 3.14 +3e+000 3.141600E+000

    printf ("%s \n", "A string");A string

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    48/71

    Bibliografia

    Gracia de Jaln de la Fuente, Javier.Aprenda lenguaje Ansi C como si estuvieraen primero, San Sebastian, 1998

    Gardner,Nigel. PICmicro MCU C,Anintroduction to programming, The MicrochipPIC in CCS C, Bluebird Electronics 2002.

    C Compiler Reference Manual, CustomComputer Services CCS, 2006

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    49/71

    Puertos digitales del PIC

    P7

    P6

    P5

    P4

    P3

    P2

    P1

    P0

    T7

    T6

    T5

    T4

    T3

    T2

    T1

    T0

    Puerto I/O Registro Tris

    0 Bit Programado como salida

    1 Bit Programado como entrada

    Instrucciones del CCS para Pics

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    50/71

    Instrucciones del CCS para Pics

    set_tris_a-k(valor 1 byte)Programa el registro Tris del puerto a-k

    port_b_pullups(valor 1 bit) (TRUE, FALSE)Habilita o deshabilita las resistencias pullup delpuerto B

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    51/71

    Instrucciones para el manejo debits (CCS)

    input(pin)Lee el bit indicado por pin

    Ejemplo:A = input(PIN_B4) ; (TRUE, FALSE)

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    52/71

    Instrucciones para el manejo debits (CCS)

    bit_test(variable,bit)Lee el bit indicado por bit de la variable o registroel resultado es TRUE, FALSE

    Ejemplo:A = bit_test(dato,5) ; (TRUE, FALSE)

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    53/71

    Instrucciones para el manejo debits (CCS)

    output_bit(pin,valor) valor 0,1Escribe bit indicado por pin

    Ejemplo:output_bit(PIN_B5,1) ;

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    54/71

    Instrucciones para el manejo debits (CCS)

    output_float(pin)Convierte el pin en entrada (Tris

    pin=1)

    Ejemplo:output_float(PIN_B5) ;

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    55/71

    Instrucciones para el manejo debits (CCS)

    output_high(pin)Escribe en el pin un alto

    Ejemplo:output_high(PIN_B7) ;

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    56/71

    Instrucciones para el manejo debits (CCS)

    output_low(pin)Escribe en el pin un bajo

    Ejemplo:output_low(PIN_B7) ;

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    57/71

    Instrucciones para el manejo debits (CCS)

    output_toggle(pin)Escribe en el pin el valor negado al valor anterior

    Ejemplo:output_toggle(PIN_B4) ;

    Las definiciones se encuentran en el archivo\..\picc\Devices\16f877a.h

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    58/71

    st ucc o es pa a e a ejo debits (CCS)

    bit_set(variable,bit)Escribe un alto en el bit de la variable o registro

    Ejemplo:bit_set(salida,5) ;

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    59/71

    p jbits (CCS)

    bit_clear(variable,bit)Escribe un bajo en el bit de la variable o registro

    Ejemplo:bit_clear(salida,5) ;

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    60/71

    p jbytes (CCS)

    input_a-k()lee el dato correspondiente al puerto a-k

    Ejemplo:a=input_b() ;

    luego de esta instruccin el Tris correspondientese cambia a 0xff (todos como entrada)

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    61/71

    p jbytes (CCS)

    output_a-k(valor)Escribe el valor correspondiente al puerto a-k

    Ejemplo:output_c(0x24) ;

    luego de esta instruccin el Tris correspondientese cambia a 0x00 (todos como salida)

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    62/71

    p jreatardos (CCS)

    delay_us(x)ejecuta un retardo de softwarede x microsegundos

    Ejemplo:delay_us(10) ;

    Instrucciones para el manejo de

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    63/71

    p jreatardos (CCS)

    delay_ms(x)ejecuta un retardo de softwarede x milisegundos

    Ejemplo:delay_ms(500) ;

    Configuracin del hardware

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    64/71

    ejemplo Convertidor ADC

    Convertidor de 10 bits de aproximacionessucesivas

    8 canales analgicos de entrada

    Configuracin del las refrencias de tensin(FSR)

    Tensin ADC = 1024*RFS/Dato ADC RFS Rango de full escala (Vref [+] - Vref[-])

    PIC16F87X

    FIGURE 11-1: A/D BLOCK DIAGRAM

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    65/71

    (Input voltage)

    VAIN

    VREF+

    (Referencevoltage)

    VDD

    PCFG3:PCFG0

    CHS2:CHS0

    RE2/AN7(1)

    RE1/AN6(1)

    RE0/AN5(1)

    RA5/AN4

    RA3/AN3/VREF+

    RA2/AN2/VREF-

    RA1/AN1

    RA0/AN0

    111

    110

    101

    100

    011

    010

    001

    000

    A/DConverter

    VREF-

    (Referencevoltage)

    VSS

    PCFG3:PCFG0

    PIC16F87X

    REGISTER 11-2: ADCON1 REGISTER (ADDRESS 9Fh)

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    66/71

    U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

    ADFM PCFG3 PCFG2 PCFG1 PCFG0 R = Readable bit

    W = Writable bitU = Unimplemented bit,

    read as 0

    - n = Value at POR reset

    bit7 bit0

    bit 7: ADFM: A/D Result format select

    1 = Right Justified. 6 most significant bits of ADRESH are read as 0.

    0 = Left Justified. 6 least significant bits of ADRESL are read as 0.

    bit 6-4: Unimplemented: Read as 0

    bit 3-0: PCFG3:PCFG0: A/D Port Configuration Control bits

    PCFG3:

    PCFG0

    AN7(1)

    RE2

    AN6(1)

    RE1

    AN5(1)

    RE0

    AN4

    RA5

    AN3

    RA3

    AN2

    RA2

    AN1

    RA1

    AN0

    RA0VREF+ VREF-

    CHAN /

    Refs(2)

    0000 A A A A A A A A VDD VSS 8/0

    0001 A A A A VREF+ A A A RA3 VSS 7/1

    0010 D D D A A A A A VDD VSS 5/0

    0011 D D D A VREF+ A A A RA3 VSS 4/1

    0100 D D D D A D A A VDD VSS 3/0

    0101 D D D D VREF+ D A A RA3 VSS 2/1

    011x D D D D D D D D VDD VSS 0/0

    1000 A A A A VREF+ VREF- A A RA3 RA2 6/2

    1001 D D A A A A A A VDD VSS 6/0

    1010 D D A A VREF+ A A A RA3 VSS 5/1

    1011 D D A A VREF+ VREF- A A RA3 RA2 4/2

    1100 D D D A VREF+ VREF- A A RA3 RA2 3/2

    1101 D D D D VREF+ VREF- A A RA3 RA2 2/2

    1110 D D D D D D D A VDD VSS 1/01111 D D D D VREF+ VREF D A RA3 RA2 1/2

    PIC16F87X

    11.0 ANALOG-TO-DIGITAL The A/D module has four registers. These registersare:

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    67/71

    CONVERTER (A/D) MODULE

    The Analog-to-Digital (A/D) Converter module has five

    inputs for the 28-pin devices and eight for the other

    devices.

    The analog input charges a sample and hold capacitor.

    The output of the sample and hold capacitor is the

    input into the converter. The converter then generates

    a digital result of this analog level via successive

    approximation. The A/D conversion of the analog input

    signal results in a corresponding 10-bit digital number.

    The A/D module has high and low voltage reference

    input that is software selectable to some combination

    of VDD, VSS, RA2 or RA3.

    The A/D converter has a unique feature of being able to

    operate while the device is in SLEEP mode. To operate

    in sleep, the A/D clock must be derived from the A/Ds

    internal RC oscillator.

    are:

    A/D Result High Register (ADRESH)

    A/D Result Low Register (ADRESL)

    A/D Control Register0 (ADCON0)

    A/D Control Register1 (ADCON1)

    The ADCON0 register, shown in Register 11-1, con-

    trols the operation of the A/D module. The ADCON1

    register, shown in Register 11-2, configures the func-

    tions of the port pins. The port pins can be configured

    as analog inputs (RA3 can also be the voltage refer-

    ence) or as digital I/O.

    Additional information on using the A/D module can be

    found in the PICmicro Mid-Range MCU Family Ref-

    erence Manual (DS33023).

    REGISTER 11-1: ADCON0 REGISTER (ADDRESS: 1Fh)

    R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0

    ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE ADON R = Readable bitW = Writable bit

    U = Unimplemented bit,

    read as 0

    - n = Value at POR reset

    bit7 bit0

    bit 7-6: ADCS1:ADCS0: A/D Conversion Clock Select bits

    00 = FOSC/2

    01 = FOSC/8

    10 = FOSC/32

    11 = FRC (clock derived from an RC oscillation)

    bit 5-3: CHS2:CHS0: Analog Channel Select bits000 = channel 0, (RA0/AN0)

    Instrucciones para laconfiguracin del convertidor

    http://-/?-http://-/?-http://-/?-http://-/?-
  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    68/71

    gADC (CCS)

    setup_adc(valor);(configuracin de parte del registro ADCON0)

    Las definiciones se encuentran en el archivo

    \..\Picc\Devices\16f877a.h

    Instrucciones para laconfiguracin del convertidor

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    69/71

    gADC (CCS)

    setup_adc(valor);(configuracin del registro ADCON0)

    // Constants used for SETUP_ADC() are:

    #define ADC_OFF 0 // ADC Off#define ADC_CLOCK_DIV_2 0x10000#define ADC_CLOCK_DIV_4 0x4000#define ADC_CLOCK_DIV_8 0x0040

    #define ADC_CLOCK_DIV_16 0x4040#define ADC_CLOCK_DIV_32 0x0080#define ADC_CLOCK_DIV_64 0x4080#define ADC_CLOCK_INTERNAL 0x00c0

    Instrucciones para laconfiguracin del convertidor

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    70/71

    gADC (CCS)

    ADCON0[7:6] #define ADC_OFF 0 // ADC Off

    Bit ADON = 0 (bit0)

    #define ADC_CLOCK_DIV_2 0x100000000 0000 #define ADC_CLOCK_DIV_8 0x0040

    0100 0000

    #define ADC_CLOCK_DIV_32 0x00801000 0000

    #define ADC_CLOCK_INTERNAL 0x00c01100 0000

    Instrucciones para laconfiguracin del convertidor

  • 7/22/2019 _07 Clase Micro Programacin uc empleando C

    71/71

    gADC (CCS)

    Es recomendable utilizar la informacin dadapor el manual del 16F877a

    #byte ADCON0 =0x1fADCON0=0x33;bit_set(ADCON0,2);

    #bit ADON =0x1f.0 #bit ON_DONE = 0x1f.2 while(ON_DONE){ }


Top Related