P. 1
PIC16F877 Con MikroC

PIC16F877 Con MikroC

|Views: 809|Likes:
Published by Sal Arr

More info:

Published by: Sal Arr on Nov 14, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/11/2013

pdf

text

original

Sections

  • 1.- ENCENDIDO DE LED
  • 2.- LUCES SECUENCIALES
  • 3.- LUCES CON ARREGLO (ALGORITMO)
  • 4.- LUCES CON DESPLAZAMIENTO (ALGORITMO)
  • 5.- SECUENCIAS CONDICIONADAS ( PROBLEMA )
  • 6.- DISPLAY DE 7 SEGMENTOS
  • 7.- LCD 8 BITS
  • 8.- LCD 4 BITS
  • 9.- CONTADOR 0-9 (PROBLEMA)
  • 10.- TECLADO MATRICIAL (PROBLEMA)

CURSO-TALLER PROGRAMACIÓN EN LENGUAJE C PARA MICROCONTROLADORES PIC

PIC16F877

CARACTERÍSTICAS
• • • • Velocidad de operación: hasta 20 MHz de reloj 8K x 14 bits por palabra de memoria de programa FLASH 368 x 8 bytes de memoria de datos (RAM) 256 x 8 bytes de memoria de datos EEPROM

CARACTERÍSTICAS (2)

14 fuentes de interrupciones
Memoria de pila (stack) de 8 niveles de profundidad

Protecciones: • Power-on Reset (POR) • Power-up Timer (PWRT) • Oscillator Start-up Timer (OST)
• Watchdog Timer (WDT) independiente del cristal.

RB1. RA2. RD0 ) RE2. RC6. RD4. RB6. RD3. RC1. RA1. RB4. RA4. RB2. RD2. RC3. RA0 ) RB7. RB5. RB0 ) RC7. RC2. RD5. RD6. RC4.PUERTOS DE ENTRADA Y SALIDA • • • PORTA ( PORTB ( PORTC ( PORTD ( PORTE ( RA5. RA3. RE1. RE0 ) . RC5. RB3. RD1. RC0 ) • • RD7.

resolución es 200 ns • PWM max.CARACTERÍSTICAS ( PERIFÉRICOS ) • Timer 0: timer/counter de 8 bits con un pre-escalador de 8 valores. PWM • Capture es de 16-bit.5 ns • Compare es de 16-bit. Compare. pre-escalador y post-escalador • Dos módulos de Capture. resolución de 10-bit . max. • Timer 1: 16-bit timer/counter con pre-escalador • Timer 2: 8-bit timer/counter con registro de estado de 8-bit. resolución es 12. max.

con terminales de control WR y CS RD. . (modo (maestro/esclavo ) maestro) e I2C • • Transmisor-Receptor síncrono-asíncrono universal (USART/SCI) con 9-bit Puerto paralelo esclavo (PSP) con 8-bits de ancho.CARACTERÍSTICAS (PERIFÉRICOS 2) • • Convertidor analógico a digital de 10-bit multi-canal Puerto serial síncrono (SSP) con SPI.

Memoria de programa : 14 bits. Recursos mapeados en memoria de datos. Buses separados (datos e instrucciones).ARQUITECTURA INTERNA • • • • • Arquitectura HARVARD. . Memoria de datos: 8 bits.

ARQUITECTURA INTERNA .

TERMINALES FISICAS .

PUERTOS Puerto PORTA # funciones 3 Funciones Entradas digital Salidas digital Entradas analógicas Entradas digital Salidas digital Entradas digital Salidas digital Medios de comunicación Entradas digital Salidas digital Puerto paralelo esclavo Entradas digital Salidas digital Entradas analógicas Control del puerto paralelo esclavo PORTB 2 PORTC 3 PORTD 3 PORTE 4 .

Digital Sal.FUNCIONES PORTA Terminal RA0 RA1 RA2 RA3 RA4 RA5 Funciones Ent. Digital Sal. Analógica VREF VREF + . Analógica Ent. Digital Sal. Digital Sal. Analógica Ent. Digital Ent. Digital Sal. Analógica Ent. Digital Ent. contador 1 Ent. Digital Ent. Analógica Ent. Digital Ent. Digital Sal. Digital Ent. Digital Ent.

Digital Sal. Digital Sal. Digital Sal. Digital Ent. Digital Ent. Digital Sal.FUNCIONES PORTB Terminal RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 Funciones Ent. Digital PGM ( función LVP ) Ent. Digital PGC ( función LVP ) Ent. Digital Sal. Digital PGD ( función LVP ) . Digital Sal. Digital Ent. Digital Sal. Digital Ent. Interrupción 0 Ent. Digital Sal. Digital Ent.

Digital Datos entrada SPI Ent. Digital Sal. Digital Sal. Osc timer 1 Ent. Digital Reloj sincrono SPI Ent. Digital Sal. Digital Ent. Digital Sal. Digital Transmisión USART Ent. Digital Sal. Digital Sal. Digital Datos salida SPI Ent. Digital Ent. Contador 1 Captura/Comp/PWM 1 Captura/Comp/PWM 2 Reloj síncrono I2C Datos I2C RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 . Osc Timer 1 Ent.FUNCION PORTC Terminal Funciones Ent. Digital Sal. Digital Sal. Digital Sal. Digital Recepción USART Ent.

Digital Sal. Digital Ent. Digital Ent. Digital Sal. Digital Sal. Digital Ent. Digital Ent. Digital Sal. Digital Sal.FUNCIONES PORTD Terminal RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 Funciones Ent. Digital Sal. Digital Ent. Digital Bit 0 puerto paralelo esclavo Bit 1 puerto paralelo esclavo Bit 2 puerto paralelo esclavo Bit 3 puerto paralelo esclavo Bit 4 puerto paralelo esclavo Bit 5 puerto paralelo esclavo Bit 6 puerto paralelo esclavo Bit 7 puerto paralelo esclavo . Digital Ent. Digital Sal. Digital Sal. Digital Ent.

Digital Ent. Digital Sal. Analógica Lectura PSP Ent.FUNCIONES PORTE Terminal RE0 RE1 RE2 Funciones Ent. Digital Sal. Digital Ent. Digital Ent. Analógica Escritura PSP Ent. Digital Sal. Analógica Habilitación PSP .

32767 0 . 255 -32768 . 4294967295 bytes Rango 0 . 127 .. 127 ...TIPOS DE DATOS Tipo (unsigned) char signed char (signed) short (int) unsigned short (int) (signed) int unsigned (int) (signed) long (int) unsigned long (int) 2 4 4 1 1 2 1 1 0 ...128 .128 . 65535 -2147483648 . 255 .... 2147483647 0 .

.17549435082 x 10-38 .17549435082 x 10-38 . ±6.80564774407 x 1038 long double 4 ±1.80564774407 x 1038 ..TIPOS DE DATOS 2 Tipo float double bytes 4 4 Rango ±1.80564774407 x 1038 ±1.17549435082 x 10-38 . ±6. ±6..

ASIGNACIÓN DE DATOS • Decimal • int i = 10. /* decimal 0 */ • Hexadecimal • short x = 0x37. • int j = -10. • int z = 0x125. /* decimal 10 */ /* decimal -10 */ • int p = 0. • short y = 0x7F. /* decimal 55 */ /* decimal 127 */ /* decimal 293 */ .

. /* 19 */ /* 14 */ • Binario • char dato = 0b00001111. • short dat = 0b10101010. • unsigned char sig = 0b11001100. • short n = 016. • char m = „5‟.ASIGNACIÓN DE DATOS • Octal • int m = 023. • ASCII • char dat = „a‟.

REGISTROS ASOCIADOS Entrada/salida • • • • • Configuración TRISA TRISB TRISC TRISD TRISE PORTA PORTB PORTC PORTD PORTE .

0 .ENTRADA O SALIDA • • • SALIDA DE DATOS : ENTRADA DE DATOS: 1 La asignación es individual correspondiente a cada terminal del puerto.

NOTA: Entre dos accesos a bits se debe tener un retardo mínimo de 2 microsegundos. Simplemente usando el selector (. Siendo F7 el bit mas significativo.F0 = 1.ACCESO INDIVIDUAL DE BITS 1 • mikroC te permite acceso individual en variables de 8 bits (char and unsigned short). Los identificadores F0–F7 no se reconocen en minúsculas.F7 = 1. PORTD.F5 = 0. F7. • Ejemplo: PORTC. PORTB.) seguido de uno de los identificadores F0. F1. . … .

• Si deseamos configurar el puerto C con la siguiente asignación: RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 • ENTRADA O SALIDA entrada entrada entrada entrada salida salida salida salida Posibles instrucciones a utilizar TRISC = 0b‟00001111‟. TRISC = 0x0F. TRISC = 15. o o .

• Si deseamos configurar el puerto D con la siguiente asignación: RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 • ENTRADA O SALIDA entrada salida entrada salida entrada salida entrada salida Debemos utilizar cualquiera de las siguientes instrucciones TRISD = 0b‟01010101‟. TRISD = 0x55. TRISD = 85. o o .

• Si deseamos configurar el puerto A con la siguiente asignación: RA0 RA1 RA2 RA3 RA4 RA5 RA6 • salida salida salida salida entrada entrada entrada ENTRADA O SALIDA Posibles instrucciones a utilizar ADCON1 = 6. \\ instrucción indispensable para usar el puerto A y el puerto E como entrada o de datos digitales TRISA = 0b‟01110000‟. salida . o TRISA = 0x70. o TRISA = 112.

ADCON1 ADCON1 = 0 0 0 0 0 1 1 0 ADCON1 = 6 . .

El rango de constantes aplicables a la función depende de la frecuencia del oscilador.DELAY_MS ( RETARDO POR SOFTWARE ) • Descripción: Crea un retardo por software dado el tiempo en milisegundos (constante). así que la llamada de esta función no cuenta dentro del limite de llamadas anidadas. El código es generado en el lugar donde se hace la llamada. Es una función interna. /* Pausa de un segundo */ . • void Delay_ms(const time_in_ms) • Ejemplo: Generar un retardo de 1 segundo Delay_ms(1000).

ESTRUCTURA DE UN PROGRAMA EN C ( CICLO WHILE ) // Definición de variables globales // Definición de funciones void main(void) { // Definición de variables locales // Configuración de registros (recursos y puertos) // ciclo infinito while ( 1 ) { // Programa de usuario } } .

) { // Programa de usuario } } . .ESTRUCTURA DE UN PROGRAMA EN C ( CICLO FOR ) // Definición de variables globales // Definición de funciones void main(void) { // Definición de variables locales // Configuración de registros (recursos y puertos) // ciclo infinito for ( .

WHILE ) // Definición de variables globales // Definición de funciones void main(void) { // Definición de variables locales // Configuración de registros (recursos y puertos) // ciclo infinito do { // Programa de usuario } while ( 1 ) .ESTRUCTURA DE UN PROGRAMA EN C ( CICLO DO . } .

.1. El tiempo de encendido es de 1000 milisegundo y el de apagado de 300 milisegundos. ubicado en la terminal RD7 del puerto D.ENCENDIDO DE LED • Crear un programa que encienda y apague un led..

ENCENDIDO DE LED ( ALGORITMO) 1. 6. 3. Apagado del led Retardo por software de 300 milisegundos Repetir el paso 2 . 5. 4. Configurar el bit 7 del puerto D como salida de datos Encendido del led Retardo por software de 1000 milisegundos. 2.

ENCENDIDO DE LED ( DIAGRAMA DE FLUJO) Led Configura bit del puerto como salida Apaga bit Enciende bit Retardo de 300 ms Retardo de 1000ms .

ENCENDIDO DE LED ( ESQUEMÁTICO) .

300 ). = 0.F7 Delay_ms( PORTD.ENCENDIDO DE LED ( PROGRAMA) void main ( void ) { TRISD. . while( 1 ) { PORTD. 1000 ).F7 Delay_ms( } } = 1.F7 = 0.

Delay_ms( 300 ).ENCENDIDO DE LED ( PROGRAMA 2 ) void main ( void ) { TRISD = 0. while( 1 ) { PORTD = 0x80. Delay_ms( 1000 ). } } . PORTD = 0.

respectivamente. 2.EJERCICIOS PROPUESTOS 1 1. Usando asignación directa a bits. El alumno encenderá y apagara en forma alternada dos led‟s ubicados en los bit‟s 2 y 3 del puerto B. Usando asignación de byte. Los retardos serán de 100 milisegundos y 2 segundos. Los retardos serán de 500 milisegundos (ambos). . El alumno encenderá y apagara un led ubicado en el bit 5 del puerto C.

.LUCES SECUENCIALES • Programa que envíe la siguiente secuencia de datos al puerto de salida D. Secuencia : • • • • • • • • 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 .2.

4. 9. Configuración de puerto como salida de datos. Envío de ultimo dato al puerto de salida 10. Envío de primer dato al puerto de salida Envío de segundo dato al puerto de salida Envío de tercer dato al puerto de salida . 2. 3. .LUCES SECUENCIALES ( ALGORITMO) 1. Regresar a 2 . .

LUCES SECUENCIALES ( DIAGRAMA DE FLUJO) Luces Configura puerto como salida Envía 00000100 Envía 00100000 Envía 00000001 Envía 00001000 Envía 01000000 Envía 00000010 Envía 00010000 Envía 10000000 .

LUCES SECUENCIALES ( ESQUEMÁTICO) .

} } . // CONFIGURACIO N COMO PUERTO DE SALIDA // CICLO INFINITO // ENVIA PRIMER DATO Delay_ms(500). PORTD = 0b01000000. PORTD = 0b00010000. // ENVIA TERCER DATO // ENVIA SEGUNDO DATO PORTD = 0b00001000. Delay_ms(500). Delay_ms(500). Delay_ms(500).LUCES SECUENCIALES ( PROGRAMA) void main(void) { TRISD = 0. PORTD = 0b10000000. Delay_ms(500). PORTD = 0b00000010. Delay_ms(500). Delay_ms(500). PORTD = 0b00100000. PORTD = 0b00000100. while ( 1 ) { PORTD = 0b00000001. Delay_ms(500).

El alumno enviara una secuencia de datos distinta por el puerto B. utilizando retardos por software con duración de 800 milisegundos. con incrementos de 100 milisegundos entre si. 100001 010010 001100 010010 100001 .1. utilizando retardos por software de distintas duraciones. El alumno enviara la secuencia de datos por el puerto A. EJERCICIOS PROPUESTOS 2 2.

dato[8].ARREGLOS (DEFINICIONES) #define int float float char short long MAX 50 vector_one[10]. vector_two[MAX]. temperatura[15]. . unsigned short d[3]. /* arreglo de 10 enteros */ /* arreglo 50 flotantes */ /* arreglo 30 flotantes */ unsigned peso[7]. numero[5]. vector_three[MAX .20].

28.31. 's'. /* La declaraciones es identica a la anterior */ int *days = {31.31.30.31.30.30.31.ARREGLOS (INICIALIZANDO) /* Arreglo el cúal contiene el número de días de cada mes */ int days[12] = {31.31}. '\0'}.31. /* Las dos declaraciones son identicas */ const char msg1[ ] = {'T'.31.31. .30. 'e'.30. 't'.30.31}.31.31.30.31.30.28. const char msg2[ ] = "Test".

CONDICIONANTE IF if (expresión) conjunto 1 [else conjunto 2] • Cuando la expresión evaluada es verdadera. La expresión debe ser evaluada a un valor entero. Los paréntesis que encierra la expresión son obligatorios. . Las instrucciones del conjunto 1 son ejecutadas. las instrucciones del conjunto 2 es ejecutada. • La palabra especial “else conjunto 2” es opcional. Si la expresión es falso.

SÍMBOLOS DE CONDICIÓN Operador == != > < >= <= Operación igual no igual mayor que menor que mayor que o igual a menor que o igual a .

Incrementa apuntador. 4. Inicializa apuntador. 3.. Si apuntador es mayor que o igual a 8 inicia el apuntador. Regresa a 3. 6. 2. . Envío de dato apuntado.LUCES CON ARREGLO ( ALGORITMO) 1. Configuración de puerto como salida.3. 5.

LUCES CON ARREGLO ( DIAGRAMA DE FLUJO) Luces Configura puerto como salida Incrementa apuntador Limpia apuntador apuntador ≥ 8 Envía dato apuntado si Limpia apuntador no .

if ( apunta > = 8 ) apunta = 0. 2. 4. 8. 16.LUCES CON ARREGLO ( PROGRAMA) short dato [ 8 ] = {1. void main(void) { TRISB = 0. while(1) { PORTB = dato [ apunta ]. Delay_ms(1000). apunta ++. apunta = 0. 128}. short apunta. 64. 32. } } // Configura puerto // Limpia apuntador // Ciclo infinito // Envía dato // Incrementa apuntador // Si apuntador ≥ 8 // Limpia apuntador .

EJERCICIOS PROPUESTOS 3 1. 00000011 00000110 00001100 00011000 00110000 01100000 11000000 . El alumno enviara una secuencia por el puerto B usando los valores almacenado en un arreglo.

invierte cada bit Corrimiento hacia la izquierda. mueve los bits hacia la derecha. descartando el bit mas a la izquierda y asignando ceros al bit a la derecha. compara pares de bits y regresa 1 si uno o ambos son 1’s. Complemento (unitario). >> Corrimiento hacia la derecha. de otra manera regresa 0.OPERADORES A NIVEL DE BITS Operador operacion & | ^ ~ << AND. descartando el bit mas a la derecha y asignando ceros al bit a la izquierda. OR (inclusive). mueve los bits hacia la izquierda. compara pares de bits y regresa 1 si ambos son 1’s. compara pares de bits y regresa 1 si los bits son complementarios. OR (exclusiva). de otra manera regresa 0. . de otra manera regresa 0.

/* Igual 0x567C */ /* Igual 0x444C */ /* Igual 0xEDCB */ . 0x1234 : 0x5678: &: /* Igual 0x1230 */ 0001 0010 0011 0100 0101 0110 0111 1000 ----------------------------------0001 0010 0011 0000 esto es. ~ 0x1234.. 0x1234 ^ 0x5678. 0x1230 /* De forma similar: */ 0x1234 | 0x5678..EJEMPLOS OPERADORES LÓGICOS 0x1234 & 0x5678 porque.

/* Igual 000040 */ /* Igual 0x8010. 0xFF56 >> 4. 0x02F6 >> 4. . sobreflujo! */ /* Igual 0x002F */ /* Igual 0x0FF5 */ Corrimiento a la derecha division entre 2n. 0x3801 << 4.EJEMPLOS A NIVEL DE BITS 000001 << 5. Corrimiento a la izquierda producto por 2n.

3. Regresa a 3. 5. 6. Inicializa variable. Inicializa la variable.LUCES CON DESPLAZAMIENTO (ALGORITMO) 1.. . Configuración de puerto como salida. 2. Envía valor de la variable al puerto. Modifica la variable.4. Si variable es cero. 4.

LUCES CON DESPLAZAMIENTO (DIAGRAMA DE FLUJO) Luces Configura puerto como salida Modifica variable Inicializa variable variable = 0 Envía variable al puerto si Inicializa variable no .

LUCES CON DESPLAZAMIENTO (PROGRAMA 1) void main ( void ) { unsigned short dato. if ( dato == 0 ) dato = 0x01. dato = dato << 1. Delay_ms ( 300 ). while ( 1 ) { PORTD = dato. TRISD = 0. dato = 0b00000001. } } .

regresa el residuo de la división entera (no puede ser usado con variables flotantes Como prefijo Incrementa en uno el valor de la variable antes de evaluar la expresión. -- Como prefijo decrementa en uno el valor de la variable antes de evaluar la expresión.OPERACIONES ARITMÉTICAS Operador + * / % ++ Operación Suma Resta Multiplicación División Resto. . Como Postfijo resta en uno la variable después de ser evaluado la expresión. Como Postfijo suma en uno la variable después de ser evaluado la expresión.

if ( dato == 0 ) dato = 0x01. } } . dato = 1. dato = dato * 2. while ( 1 ) { PORTD = dato. TRISD = 0. Delay_ms (250).LUCES CON DESPLAZAMIENTO (PROGRAMA 2) void main ( void ) { unsigned short dato.

21. 5. 25.EJERCICIOS PROPUESTOS 4 1. 172. 37. 3. 12. 18. 1. 29. 15. 9. 33. 9. 13. 12. las instrucciones de desplazamiento y/o aritméticas. 21. 6. 24. 1. 41. 17. 92. 45 2. El alumno realizara un programa que envíe al puerto C los siguientes valores utilizando para generarlas. 24 . 48. 6. Lo mismo que el ejercicio anterior con la siguiente secuencia: 3.

F1. colocar en uno la terminal RC0: if ( PORTB. siendo F7 el bit mas significativo. • Ejemplo: // Si RB0 es uno. Los Identificadores F0–F7 no se reconocen en minúsculas. F7. … .F0 ) PORTC. Simplemente usando el selector (.F0 = 1. .ACCESO A BITS INDIVIDUAL • mikroC te permite acceso individual en variables de 8 bits (char and unsigned short).) seguido de uno de los identificadores F0.

..SECUENCIAS CONDICIONADAS ( PROBLEMA ) • Realizar un programa que envíe secuencias distintas al puerto D. dependiendo del valor de la terminal RA0. mientras que si RA0 es igual a 1 entonces se envía la serie de tres bits desplazados hacia la derecha.5. Si RA0 es igual a cero se envía la serie de dos bits desplazados hacia la izquierda.

SECUENCIAS CONDICIONADAS (ALGORITMO) 1. Regresa a 3 . Incrementa contador 6. Si contador es igual a 8 entonces contador igual a 0 7. Si RA0 es igual a 0 entonces envía secuencia_izquierda 4. Inicia contador 3. Configuración de puertos 2. De lo contrario envía secuencia_derecha 5.

RA entrada Envía secuencia_izquierda Incrementa contador Limpia contador si si RA0 = 0 Envía Secuencia_derecha no Contador = 10 Limpia contador no .SECUENCIAS CONDICIONADAS (DIAGRAMA DE FLUJO) Luces Configura puertos RD salida.

7. 14. short derecha[10] = { 128. 48.F0 = = 0 ) PORTD = izquierda [ contador]. 1. 56. 3. 96. 12. else PORTD = derecha [ contador]. for ( . Contador = 0. 192. ) { Delay_ms ( 500 ). TRISA = 0x7F. void main ( void ) { TRISD = 0. 102. 6. 1 }. } } . 3. ADCON1 = 6. . contador + + . 24. 128 }. 192.SECUENCIAS CONDICIONADAS (PROGRAMA) short izquierda[10] = { 0. 28. 226. if ( PORTA. If ( contador = = 10 ) contador = 0.

la numeración debe ser incremental.EJERCICIOS PROPUESTOS 5 1. es igual a 0. . El alumno desarrollara un programa que envíe una secuencia de números BCD a un display de 7 segmentos ubicados en el puerto D. Si la terminal RA1 ubicada en el puerto A. en caso contrario debe decrementarse.

EJERCICIOS PROPUESTOS 5 (ESQUEMÁTICO) .

D) y una terminal común a todas ellas. . C.MOTOR A PASOS 1 • Unipolar. B.Tiene 4 bobinas independientes (A..

MOTOR A PASOS 2 • Unipolar..Tiene 4 bobinas independientes (A. C. . D) y dos terminales comunes. B.

.Tiene 2 bobinas (A – C. B – D) .MOTOR A PASOS 2 • Bipolar.

SECUENCIAS DE ACTIVACIÓN 1 • Unipolar..Movimiento de 1 paso por pulso (mayor torque). Paso A B C D 1 2 3 1 0 0 1 1 0 0 1 1 0 0 1 4 1 0 0 1 .

. Paso A B C D 1 2 3 1 0 0 0 1 0 0 0 1 0 0 0 4 0 0 0 1 .Movimiento de 1 paso por pulso (mayor velocidad).SECUENCIAS DE ACTIVACIÓN 2 • Unipolar.

Movimiento de 1/2 paso por pulso.SECUENCIAS DE ACTIVACIÓN 3 • Unipolar.5 1 1.5 2 1 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 2.. Paso A B C D 0.5 4 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 .5 3 3.

SECUENCIAS DE ACTIVACIÓN 4 • Bipolar.Movimiento de un paso Paso A C B D 1 2 3 4 1 1 0 0 0 0 1 1 1 0 0 1 0 1 1 0 ..

5 3 3.SECUENCIA DE ACTIVACIÓN 5 •Bipolar..5 2 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 2.Movimiento de medio paso Paso A C B D 0.5 1 1.5 4 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 .

CIRCUITO DE POTENCIA 1 (MOTOR UNIPOLAR )

CIRCUITO DE POTENCIA 2 (MOTOR UNIPOLAR )

CIRCUITO DE POTENCIA 3 (MOTOR BIPOLAR )
Este mismo diagrama se repetiría para manejar la segunda bobina

CIRCUITO DE POTENCIA X (MOTOR A PASOS ) Circuito integrado UCN 5804 Circuito integrado SAA1042 .

CIRCUITO DE POTENCIA X1 (MOTOR UNIPOLAR ) .

CIRCUITO DE POTENCIA X2 (MOTOR BIPOLAR ) .

el motor debe girar a la derecha.EJERCICIOS PROPUESTOS 5 2. sea igual a 0. RA6. en caso contrario debe girar a la izquierda. Si la terminal ubicada en el puerto A..El alumno desarrollara un programa que envíe la secuencia de activación de un motor a pasos ubicado en el puerto D. .

EJERCICIOS PROPUESTOS 5 (ESQUEMÁTICO) .

utilizando el puerto B como bus de datos y las terminales RC0 y RC1 como terminales de habilitación de display. El programa debe realizar la visualización utilizando el multiplexaje de los datos. ..DISPLAY DE 7 SEGMENTOS • Realizar un programa en donde se implemente un contador de 00-99 desplegando en un par de display‟s de 7 segmentos.6.

9. 12. 14. 10. 4. 3. 6. Configurar los puertos. 2. 8. inicialización de variables (unidades = „0‟ decenas = „0‟) Envío de decenas Habilitación de decenas Envío de unidades Habilitación de unidades Incremento de unidades Si unidades mayor de „9‟ entonces 9 Sigue 2 Unidades = „0‟ Incrementa decenas Si decenas mayor de „9‟ entonces 12 Sigue 2 Decenas=„0‟ Sigue 2 . 11.DISPLAY DE 7 SEGMENTOS ( ALGORITMO ) 1. 7. 13. 5.

DISPLAY DE 7 SEGMENTOS (DIAGRAMA DE FLUJO) Display Configura puertos Inicia variables Envía decena Envía unidad Incrementa unidad si Unidades>’9’ no Limpia unidades Incrementa decenas Decenas>’9’ no si Limpia decenas .

// Habilita el display de decenas PORTB = numero [ unidades ].DISPLAY DE 7 SEGMENTOS ( PROGRAMA) short numero[ ] = { 0x3F. 0x07. decenas++. void main ( void ) { TRISB = 0. 0x67 }. } // Reinicie decenas } } } . PORTC. 0x66. if ( decenas > ‟9‟ ) // Reinicia unidades // Incrementa decenas { decenas = „0‟. delay-ms( 10 ). unidades = decenas = „0‟. 0x06. PORTC. 0x4F. PORTC. 0x7F.F1 = 1. 0x5E. if ( unidades > ‟9‟ ) { // Incrementa unidades unidades = „0‟.F0 = 1.F1 = 0. delay-ms( 10 ). // Programa de usuario // Envía decenas PORTC. // Configuración de puertos // Programa principal TRISC = 0.F0 = 0. 0x6D. // Inicialización de variables while ( 1 ) { PORTB = numero [ decenas ]. // Envía unidades // Habilita el display de decenas unidades++. 0x1B.

DISPLAY DE 7 SEGMENTOS ( ESQUEMÁTICO ) .

. en caso contrario. Si el interruptor esta apagado el conteo será incremental. el conteo será decremental.EJERCICIO PROPUESTO 6 ( D7SEG) • El alumno modificara el programa elaborado de tal forma que se cambie el incremento por decremento. El interruptor estará ubicado en la terminal RE0 del puerto E. al usar un interruptor.

EJERCICIO PROPUESTO 6 ( ESQUEMÁTICO ) .

DISPLAY DE CRISTAL LIQUIDO .

LCD (FUNCIONES BUS 8 BITS ) • • • • • • • Lcd8_Config Lcd8_Init Lcd8_Out Lcd8_Out_Cp Lcd8_Chr Lcd8_Chr_Cp Lcd8_Cmd .

unsigned short D3. unsigned short D6. . unsigned short D5. Los puertos de Control (ctrlport) y Datos (dataport) usan la asignación de terminales especificada. unsigned short EN. unsigned short *dataport. unsigned short D1.LCD8_CONFIG • • Descripción: Inicializa el LCD usando un bus de datos de 8 bits. unsigned short D7. unsigned short WR. void Lcd8_Config( unsigned short *ctrlport. unsigned short RS. unsigned short D2. unsigned short D0 ). unsigned short D4.

0.0.3.6.1.2.1.LCD8_CONFIG 2 Ejemplo: Lcd8_Config(&PORTC.2. .7).5.4.&PORTD.

0 LCD8_INIT • void Lcd8_Init(unsigned short *ctrlport. unsigned short *dataport ).4 D3 → dataport.0 D7 → dataport.2 D1 → dataport.3 D2 → dataport.5 D4 → dataport.7 D6 → dataport.6 D5 → dataport.1 D0 → dataport.3 RS → ctrlport. Los puertos de Control (ctrlport) y Datos (dataport) usan la siguiente asignación de terminales.E → ctrlport.• Descripción: Inicializa el LCD usando un bus de 8 bits.2 R/W → ctrlport. .

LCD8_INIT 2
Ejemplo: Lcd8_Init(&PORTB, &PORTC);

LCD8_OUT
• Descripción: Imprime mensaje en el LCD en la fila y columna especificada (row y col).
• void Lcd8_Out(
unsigned short row, unsigned short col, char *text

);

• Ejemplo:
-Imprime “Hello!” en el LCD en la linea 1, columna 3

Lcd8_Out(1, 3, "Hello!");

LCD8_OUT_CP
• Descripción: Imprime mensaje en el LCD en la posición actual del cursor.

• •

void Lcd8_Out_Cp(char

*text);

Ejemplo: Imprime “Here!” en la posición actual del cursor Lcd8_Out_Cp("Here!" );

Ejemplo: Imprime la letra “i” en el LCD en la línea 2. 'i'). char character ).LCD8_CHR • Descripción: Imprime un caracter en el LCD en la fila y columna especificada (row y col). • void Lcd8_Chr( unsigned short row. unsigned short col.y columna 3 Lcd8_Out(2. . 3.

. • • void Lcd8_Chr_Cp(char character). Ejemplo: Imprime la letra “e” en la posición actual del cursor Lcd8_Chr_Cp('e' ).LCD8_CHR_CP • Descripción: Imprime un caracter en el LCD en la posición actual del cursor.

• • void Lcd8_Cmd(unsigned Ejemplo: Limpia el LCD short command). . Se puede pasar a la función una de las constantes predefinidas.LCD8_CMD • Descripción: Envía un comando al LCD. Lcd8_Cmd(LCD_CLEAR ).

COMANDOS PREDEFINIDOS Comando LCD_FIRST_ROW LCD_SECOND_ROW Función Mueve el cursor a la 1a. Limpia el display. fila. fila.1. Mueve el cursor hacia la izquierda sin cambiar la RAM Mueve el cursor hacia la derecha sin cambiar el contenido de la RAM Enciende el display Apaga el display Mueve el display hacia la izquierda sin cambiar el contenido de la RAM Mueve el display hacia la derecha sin cambiar el contenido de la RAM . Apaga el cursor. LCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR Mueve el cursor a la 3a. Los datos de la RAM no son afectados. Parpadeo del cursor. Coloca el caracter subrayado. fila. Mueve el cursor a la 4a. fila. LCD_RETURN_HOME LCD_CURSOR_OFF LCD_UNDERLINE_ON LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT LCD_SHIFT_RIGHT Regresa el cursor a la posición 1. Mueve el cursor a la 2a.

usando un bus de datos de 8 bits.. . El mensaje debe desplazarse hacia la izquierda en forma continua. y a continuación mande un mensaje de bienvenida.LCD 8 BITS • Diseñar el programa que inicialice un LCD.7.

3. Inicialice los puertos de datos y control. 4. Envía comando de desplazamiento hacia la izquierda. .LCD 8 BITS ( ALGORITMO) 1. 2. Repite el paso 3. Envía mensaje a desplegar.

.LCD 8 BITS ( DIAGRAMA DE FLUJO) LCD 8 bits Inicializa puertos de datos y control Envía mensaje Envía comando de Corrimiento a la izq.

LCD 8 BITS ( ESQUEMÁTICO) .

7.5.&PORTB. } } .2.1.1.3. Lcd8_Out(1. TRISC = 0. while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT).2.0).0. Delay_ms(100). Lcd8_Config(&PORTC.”Hola mundo cruel”).4.1.LCD 8 BITS ( PROGRAMA 1 ) Void main(void) { TRISB = 0.6.

LCD 8 BITS ( PROGRAMA 2 )
char mensaje[ ] = “Programa numero 2”; void main(void) { TRISB = 0; TRISC = 0; Lcd8_Config(&PORTC,&PORTB,0,2,1,7,6,5,4,3,2,1,0); Lcd8_Out(1,1,mensaje); while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT); Delay_ms(500); } }

LCD 8 BITS ( ESQUEMÁTICO)

LCD 8 BITS ( PROGRAMA 3 )
char *mensaje3 = “mensaje tres”; void main(void) { TRISB = 0;
TRISC = 0;

Lcd8_Init(&PORTC,&PORTB); Lcd8_Out(1,1,mensaje3); Lcd8_Out(2,1,”segunda fila”); while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT); Delay_ms(50); }

EJERCICIOS PROPUESTOS 7 1. Enseguida debe aparecer la O. . configurado para utilizar un bus de 8 bits. El programa debe ser ciclico. moviendose desde la derecha a la primer columna a la izquierda. Programa que forme la palabra „HOLA‟ en un LCD. tambien saliendo de la derecha y terminando a la derecha de la letra H. Primero debe aparecer la H. Las letras deben desplazarse de derecha a izquierda. Lo mismo debe suceder para las letras L y A.

. .EJERCICIO PROPUESTO 8 H H O HO L H H O . H O LA H H O .

LCD (FUNCIONES BUS 4 BITS ) • • • • • • • Lcd_Config Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd .

unsigned short D5.LCD_CONFIG • Descripción: Inicializa LCD usando un bus de datos de 4 bits. unsigned short D7. unsigned short *ctrl_data_port. unsigned short EN. unsigned short WR. unsigned short RS. El puerto de Control (ctrlport) y Datos (dataport) tiene las asignaciones de terminales especificadas. unsigned short D4 • void Lcd_Config( ). . unsigned short D6.

7). .5.2.1.4.LCD_CONFIG 2 Ejemplo: Lcd_Config(&PORTC.0.6.

E → ctrl_data_port. El puerto de Control (ctrlport) y Datos (dataport) tiene la siguiente asignación de terminales.5 D4 → ctrl_data_port.• Descripción: Inicializa el LCD usando un bus de 4 bits.2 D7 → ctrl_data_port.3 RS → ctrl_data_port.6 D5 → ctrl_data_port. LCD_INIT .4 • void Lcd_Init(unsigned short *ctrl_data_port ).7 D6 → ctrl_data_port.

LCD_INIT 2 Ejemplo: Lcd_Init(&PORTB). .

"Hello!"). unsigned short col. columna 3 Lcd_Out(1.LCD_OUT • Descripción: Imprime mensaje en el LCD en la fila y columna especificada (row y col). char *text ). • Ejemplo: -Imprime “Hello!” en el LCD en la línea 1. 3. . • void Lcd_Out( unsigned short row.

. • void Lcd_Out_Cp(char • Ejemplo: . Lcd_Out_Cp("Here!").Imprime “Here!” en la posición actual del cursor *text).LCD_OUT_CP • Descripción: Imprime mensaje en el LCD en la posición actual del cursor.

'i'). Ejemplo: . • void Lcd_Chr( unsigned short row.LCD_CHR • Descripción: Imprime un caracter en el LCD en la fila y columna especificada (row y col). unsigned short col. 3.Imprime la letra „i‟ en el LCD en la línea 2. char character ).y columna 3 Lcd_Out(2. .

• void Lcd_Chr_Cp(char • Ejemplo: . .LCD_CHR_CP • Descripción: Imprime un caracter en el LCD en la posición actual del cursor. Lcd_Chr_Cp('e').Imprime la letra „e‟ en la posición actual del cursor character).

LCD_CMD • Descripción: Envía un comando al LCD.Apaga el cursor. no aparece en el LCD Lcd_Cmd(LCD_CURSOR_OFF ). . Los comandos son los mismos para ambos modos de manejo del LCD (bus 8 o 4 bits). Se puede pasar a la función una de las constantes predefinidas. short command). • void Lcd_Cmd(unsigned • Ejemplo: .

El mensaje debe desplazarse hacia la derecha en forma continua. y a continuación mande un mensaje cualquiera de bienvenida. usando un bus de datos de 4 bits.LCD 4 BITS • Diseñar el programa que inicialice un LCD.8. ..

Envía mensaje a desplegar. 2. . 3. Inicialice los puertos de datos y control. Repite el paso 3.LCD 4 BITS ( ALGORITMO) 1. Envía comando de desplazamiento hacia la derecha. 4.

LCD 4 BITS ( DIAGRAMA DE FLUJO) LCD 8 bits Inicializa puertos de datos y control Envía mensaje Envía comando de Corrimiento a la der. .

LCD 4 BITS ( ESQUEMÁTICO CONFIG) .

4). Lcd_Out(2. } } . while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT).0.6.1. Lcd_Config(&PORTD.7.”Envio de datos”).2. Lcd_Out(1.1.5.LCD 4 BITS ( PROGRAMA 1 ) void main(void) { TRISD = 0. Delay_ms(200).1.”Usando bus de 4 bits”).

while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT).2.6. 6. mensaje). Lcd_Out(1.4). Delay_ms(200). void main(void) { TRISD = 0.1.0. „b‟.7. „s‟. „\0‟}. } } . „s‟. „4‟. „i‟. „u‟. „t‟.5. Lcd_Config(&PORTD. „ ‟.LCD 4 BITS ( PROGRAMA 2 ) char mensaje[11]={„B‟. „ ‟.

LCD 4 BITS ( ESQUEMÁTICO INIT) .

.”fila=2 while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT). Lcd8_Out(2. Lcd8_Out(1. Delay_ms(50).LCD 4 BITS ( PROGRAMA 3 ) char *mensaje3 = “programa 3 usando bus 4 bits”. TRISC = 0.16. Lcd8_Init(&PORTC. } columna=5”).&PORTB). void main(void) { TRISB = 0.1.mensaje3).

CONVERSIÓN DE TIPO DE DATOS Tipo de dato a cadena • • • • • • ByteToStr ShortToStr WordToStr IntToStr LongToStr FloatToStr .

char *txt=“ “. void ByteToStr(unsigned short number. txt). //se inicializa un apuntador a 4 espacios ByteToStr(t. Ejemplo: unsigned short t = 24. char *output). // txt es " 24" (un espacio en blanco) . La cadena esta ajustada a un ancho de 3 caracteres.BYTETOSTR Descripcion: Crea una cadena de salida de un pequeño numero sin signo (valor numérico menos a 0x100). Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.

SHORTTOSTR
Descripción: Crea una cadena de salida de un numero pequeño con signo (valor numérico menor a 0x100). La cadena esta ajustada a un ancho de 4 caracteres; Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.

void ShortToStr(short number, char *output);
Ejemplo: short t = -4; char *txt=“ “;

// Se inicializa un apuntador de 5 espacios

ShortToStr(t, txt); // txt es " -4" (dos espacio en blanco)

WORDTOSTR
Descripción: Crea una cadena de salida de un numero sin signo (Valor numérico de una variable unsigned). La cadena esta ajustada a un ancho de 5 caracteres; Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.
void WordToStr(unsigned number, char *output);
Ejemplo: unsigned t = 437; char *txt=“ “; // Inicializa un apuntador con 6 espacios WordToStr(t, txt); // txt es “ 437" (dos espacios vacios)

INTTOSTR
Descripción: Crea una cadena de salida de un numero con signo (Valor numérico de una variable int). La cadena esta ajustada a un ancho de 6 caracteres; Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.

void IntToStr(int number, char *output);
Ejemplo:

int j = -4220; char *txt=“ “; // Inicializa un apuntador con 6 espacios IntToStr(j, txt); // txt es " -4220" (un espacio en blanco)

Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. Ejemplo: long jj = -3700000. txt). La cadena esta ajustada a un ancho de 11 caracteres. char *output). // Inicializa un apuntador con 12 espacios LongToStr(jj. // txt es “ -3700000" (3 espacios en blanco) . void LongToStr(long number. char *txt=“ “.LONGTOSTR Descripción: Crea una cadena de salida de un numero largo con signo (Valor numérico de una variable long).

FLOATTOSTR Descripción: Crea una cadena de salida de un numero de punto flotante. Hay siempre 5 dígitos a continuación del punto decimal. char *txt=“ “. La mantisa esta ajustada a un formato de 6 dígitos. void FloatToStr(float number. // txt es "-0.37420e3" .2. // Inicializa un apuntador con 14 espacios FloatToStr(ff.ddddd. txt). La cadena contiene un formato normalizado de un numero (mantisa entre 0 y 1) con signo en la primera posición. Ejemplo: float ff = -374. char *output). 0.

CONTADOR 0-9 (PROBLEMA ) • Se quiere un programa que visualice un conteo de 0 a 9 en un LCD. ..9.

Configura el LCD Inicializa el contador Convierte a ASCII el valor del contador Envía valor en ASCII al LCD Incrementa el contador Regresa a 3 . 5. 2. 4. 3.CONTADOR 0-9 (ALGORITMO) 1. 6.

CONTADOR 0-9 (DIAGRAMA DE FLUJO) teclado Inicializa puertos (LCD) Convierte contador a ASCII Inicializa contador Envía a LCD ASCII Incrementa contador .

4). . char cadena[ 5 ] = “ “.5.0. cadena ). Delay_ms(500).”Contador 0-9”).1. Lcd_Out ( 2 . 8 .CONTADOR 0-9 (PROGRAMA ) void main(void) { unsigned short contador.7. TRISD = 0.2. cadena ). contador ++. contador = 0. Lcd_Out(1.1.6. while(1) { ShortToStr ( contador . Lcd_Config(&PORTD.

CONTADOR 0-9 (ESQUEMÁTICO) .

. . Contador 0-9 : 9 .CONTADOR 0-9 (FUNCIONAMIENTO) Contador 0-9 : 0 Contador 0-9 : 1 Contador 0-9 : 2 Contador 0-9 : 3 Contador 0-9 : 4 Contador 0-9 : 5 Contador 0-9 : 6 .

configurado para usar un bus de 8 bits. Programa que utilice un LCD.EJERCICIO PROPUESTO 8 1. uno mas al centro y otro a la derecha. presentando hasta 3 numeros consecutivos. El desplegado debe hacerse de la forma mostrada en las siguientes figuras. En el LCD deben aparecer en forma secuencial.32768. un numero a la izquierda. . Se utiliza la segunda fila. Los numero deben ser generados por operaciones aritméticas. los números de la secuencia 1 – 2 – 4 – 8 – 16 – 32 – 64 – 128 – 256 – 512 – 1024 – 2048 – 4096 – 8192 – 16384 .

.EJERCICIO PROPUESTO 8 Serie de numeros Serie de numeros 1 Serie de numeros 1 2 Serie de numeros 1 2 4 Serie de numeros 8 Serie de numeros 8 16 Serie de numeros 8 16 32 . . Serie de numeros 8192 16384 32768 .

El alumno diseñara un programa en donde se muestre en un LCD los números desde 00 hasta el 99. . Con un intervalo de tiempo entre cambio igual a 500 milisegundos.EJERCICIO PROPUESTO 9 1.

.EJERCICIO PROPUESTO 9 Contador 00-99 cada 500 mseg 00 Contador 00-99 cada 500 mseg 01 Contador 00-99 cada 500 mseg 02 Contador 00-99 cada 500 mseg 03 Contador 00-99 cada 500 mseg 04 Contador 00-99 cada 500 mseg 05 Contador 00-99 cada 500 mseg 06 . Contador 00-99 cada 500 mseg 99 . .

TECLADO MATRICIAL ( ESQUEMÁTICO) .

TECLADO MATRICIAL ( FUNCIONES ) • • • Keypad_Init Keypad_Read Keypad_Released .

F6 port.F1 port.F4 port.KEYPAD_INIT • Descripción: Inicializa el puerto para trabajar con el teclado.F3 columna 1 columna 2 columna 3 columna 4 port.F5 port.F0 port. . Las terminales del teclado deben estar conectadas de la siguiente forma: port.F7 fila 1 fila 2 fila 3 fila 4 • void Keypad_Init(unsigned *port).F2 port.

.KEYPAD_INIT 2 Ejemplo: Keypad_Init(&PORTB).

La función regresa 1 a 12. 1 2 … 9 * 0 # 1 2 … 9 10 11 12 • unsigned short Keypad_Read(void). dependiendo la tecla presionada. • Ejemplo: kp = Keypad_Read(). o 0 si no existe tecla presionada.KEYPAD_READ • Descripción: Verifica si alguna tecla fue presionada. .

la función regresa de 1 a 12. • Ejemplo: Keypad_Released(). . dependiendo de la tecla presionada. Cuando se libera. • unsigned short Keypad_Released(void).KEYPAD_RELEASED • Descripción: La llamada a la función Keypad_Released es una función blocking call: La función espera hasta que cualquier tecla sea presionada y liberada.

.TECLADO MATRICIAL ( PROBLEMA) • Se desea un programa con el cual se muestre en un LCD (bus 8 bits en puerto B y puerto C como control) la tecla presionada en un teclado matricial (puerto D).10..

Lectura de teclado Conversión a ASCII Envío al LCD Regresar a 2 .TECLADO MATRICIAL ( ALGORITMO) 1. 5. Configuración de puertos (teclado y lcd). 4. 3. 2.

TECLADO MATRICIAL ( DIAGRAMAS DE FLUJO ) teclado Inicializa puertos (LCD y teclado) Lee teclado Convierte a ASCII Envía a LCD .

TECLADO MATRICIAL ( ESQUEMÁTICO) .

10. "Key :"). Lcd8_Cmd(LCD_CLEAR). char txt[5]. 3. break. 2. 1. 6. kp = 48. kp). // Prepara valor para salida // Espera a que se presione una tecla pressed switch (kp) { case 10: case 11: kp = 42. if (cnt == 255) { cnt = 0. Lcd8_Out(2. } WordToStr(cnt. do kp = Keypad_Read(). void main() { cnt = 0. txt). 1. Lcd8_Init(&PO RTC. 0. 4. break. txt). // Inicializa LCD en puerto B y puerto C // Limpia display // Cursor apagado Lcd8_Out(1. "Times:"). Lcd8_Out(2. } // Imprime en LCD . // '#' Lcd9_Chr(1. Lcd8_Out(2. break. 10. do { kp = 0. 7. 0). Keypad_Ini t(&PORTD). " "). 5. 1. &PORTB. 1. kp += 48. while (!kp). 2. Lcd8_Cmd(LCD_CURSO R_OFF). kp = 35.TECLADO MATRICIAL ( PROGRAMA ) unsigned short kp. cnt. } while (1). // '0' // '*' case 12: default: } cnt++. 10.

los convierta a un numero que se guarde en una variable tipo entera. Visualizando los resultados en un LCD. los guarde en un arreglo. El alumno realizara un programa que tome 3 números desde un teclado matricial. Con este numero el alumno deberá proporcionar el producto por 2 y división entre 2 resultantes. .EJERCICIO PROPUESTO 9 1.

EJERCICIO PROPUESTO 9 Cual es el numero de 3 cifras: Cual es el numero de 3 cifras: 025 Cual es el numero de 3 cifras: 025 El producto por 2 es: 050 Cual es el numero de 3 cifras: 025 El producto por 2 es: 050 La división entre 2 es: 012 .

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->