Вы находитесь на странице: 1из 161

CursoTallerprogramacin en CursoTaller programacin en lenguaje C para Cpara microcontroladores PIC

PIC16F877

Caractersticas C t ti
Velocidaddeoperacin:hasta20MHzdereloj 8Kx14bitsporpalabradememoriade programaFLASH programa FLASH 368x8bytesdememoriadedatos(RAM) 256x8bytesdememoriadedatosEEPROM

Caractersticas(2) C t ti (2)
14fuentesdeinterrupciones M Memoriadepila(stack) d 8 i l d i d il ( )de8nivelesde profundidad Protecciones:
Power on Reset (POR) PoweronReset( PowerupTimer(PWRT) OscillatorStartupTimer(OST) Watchdog Timer (WDT) independiente del cristal WatchdogTimer( )independientedelcristal.

Puertosdeentradaysalida P t d t d lid
PORTA(RA5,RA4,RA3,RA2,RA1,RA0) PORTB(RB7,RB6,RB5,RB4,RB3,RB2,RB1,RB0) PORTC(RC7,RC6,RC5,RC4,RC3,RC2,RC1,RC0) PORTD(RD7,RD6,RD5,RD4,RD3,RD2,RD1,RD0) PORTE(RE2,RE1,RE0)

Caractersticas(perifricos) C t ti (
Timer0:timer/counterde8bitsconunpre escaladorde8valores. escalador de 8 valores Timer1:16bittimer/counterconpreescalador Timer2:8bittimer/counterconregistrodeestado de8 bit,pre escaladorypost escalador de 8bit preescalador y postescalador DosmdulosdeCapture,Compare,PWM
Captureesde16bit,max.resolucines12.5ns Compareesde16bit,max.resolucines200ns PWMmax.resolucinde10bit

Caractersticas(perifricos2) C t ti ( if i 2)
Convertidoranalgicoadigitalde10bitmulti canal Puertoserialsncrono(SSP)conSPI.(modo maestro)eI2C(maestro/esclavo) Transmisor Receptor sncrono asncrono TransmisorReceptorsncronoasncrono universal(USART/SCI)con9bit Puertoparaleloesclavo(PSP)con8bitsde ancho,conterminalesdecontrolRD,WR ancho, con terminales de control RD, WR y CS

Arquitecturainterna A it t i t
ArquitecturaHARVARD. Busesseparados(datoseinstrucciones). Memoriadeprograma:14bits. Memoriadedatos:8bits. Recursosmapeadosenmemoriadedatos.

Arquitecturainterna A it t i t

Terminalesfisicas T i l fi i

PUERTOS U OS
Puerto
PORTA

# funciones
3

Funciones
Entradas digital Salidas digital Entradas analgicas Entradas digital Salidas digital Entradas digital Salidas digital Medios de comunicacin Entradas digital Salidas digital Puerto paralelo esclavo Entradas digital Salidas digital Entradas analgicas Control del puerto paralelo esclavo

PORTB

PORTC

PORTD

PORTE

FUNCIONESPORTA FUNCIONES PORTA


Terminal
RA0 RA1 RA2 RA3 RA4 RA5

Funciones
Ent. Ent Digital Sal Digital Ent Analgica Sal. Ent. Ent. Digital Sal. Digital Ent. Analgica g g g Ent. Digital Sal. Digital Ent. Analgica Ent. Digital Sal. Digital Ent. Analgica Ent. Digital Sal. Digital Ent. contador 1 Ent. Digital Sal. Digital Ent. Analgica VREF VREF +

FUNCIONESPORTB FUNCIONES PORTB


Terminal RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 Funciones
Ent. Ent Digital Sal Digital Ent Interrupcin 0 Sal. Ent. Ent. Digital Sal. Digital Ent. Digital Sal. Digital Ent. Di it l Sal. Digital E t Digital S l Di it l PGM ( funcin LVP ) f i Ent. Digital Sal. Digital Ent. Digital Sal. Digital Ent. Digital Sal. Digital PGC ( funcin LVP ) Ent. Digital Sal. Digital PGD ( funcin LVP ) g g

FUNCIONPORTC FUNCION PORTC


Terminal Funciones
Ent. Ent Digital Sal Digital Sal Osc timer 1 Sal. Sal. Ent. Digital Sal. Digital Ent. Osc Timer 1 Ent. Digital Sal. Digital Ent. Ent Digital Sal Digital Reloj sincrono SPI Sal. Ent. Digital Sal. Digital Datos entrada SPI Ent. Digital Sal. Digital Datos salida SPI Ent. Ent Digital Sal Digital Transmisin USART Sal. Ent. Digital Sal. Digital Recepcin USART Ent. Ent Contador 1 Captura/Comp/PWM 1 Captura/Comp/PWM 2 Reloj sncrono I2C Datos I2C

RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7

FUNCIONESPORTD FUNCIONES PORTD


Terminal T i l 0 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 Funciones F i
Ent. Digital Sal. Digital Ent. Digital Sal. Digital Ent. Di it l Sal. Digital E t Digital S l Di it l Ent. Digital Sal. Digital Ent. Digital Sal. Digital Ent. Digital Sal. Digital Ent. Digital Sal. Digital g g Ent. Digital Sal. Digital Bit 0 puerto paralelo esclavo Bit 1 puerto paralelo esclavo Bit 2 puerto paralelo esclavo t l l l Bit 3 puerto paralelo esclavo Bit 4 puerto paralelo esclavo Bit 5 puerto paralelo esclavo Bit 6 puerto p p paralelo esclavo Bit 7 puerto paralelo esclavo

FUNCIONESPORTE FUNCIONES PORTE


Terminal
RE0 RE1 RE2

Funciones
Ent. Digital Sal. Digital Ent. Analgica Lectura PSP Ent. Ent Digital Sal Digital Ent Analgica Escritura PSP Sal. Ent. Ent. Digital Sal. Digital Ent. Analgica Habilitacin PSP

Tiposdedatos Ti d d t
Tipo bytes
1 1 2 4 4

Rango
0..255 0 255 128..127 128..127 0..255 32768..32767 0..65535 0 65535 2147483648..2147483647 0..4294967295 0 4294967295

(unsigned) h i d)char 1 signed char (signed)short (int) unsigned short (int)1 (signed)int unsigned (int) 2 (signed)long (int) unsigned l i d long (int)

Tiposdedatos2 Ti d d t 2
Tipo float double long double bytes 4 4 4 Rango 1.17549435082x1038 ..6.80564774407x1038 1.17549435082x1038 ..6.80564774407x1038 1.17549435082x1038 ..6.80564774407x1038

Asignacindedatos Ai i d d t
Decimal
int i=10; int j=10; int p=0; /*decimal10*/ /* */ /*decimal10*/ /*decimal0*/

Hexadecimal
shortx=0x37; shorty=0x7F; intz=0x125; /*decimal55*/ /*decimal127*/ /*decimal293*/

Asignacindedatos Ai i d d t
Octal
int m =023; intm 023; shortn=016; / 19 / /*19*/ /*14*/

Binario
chardato=0b00001111; ; shortdat=0b10101010; unsignedcharsig=0b11001100;

ASCII
chardat=a; charm=5;

Registrosasociados R it i d
Entrada/salida PORTA PORTB PORTC PORTD PORTE Configuracin TRISA TRISB TRISC TRISD TRISE

Entradaosalida E t d lid
SALIDADEDATOS: 0 ENTRADADEDATOS:1 L Laasignacinesindividualcorrespondientea i i i di id l di t cadaterminaldelpuerto.

Accesoindividualdebits1 A i di id l d bit 1
mikroCtepermiteaccesoindividualenvariablesde8bits (charandunsignedshort).Simplementeusandoelselector(.) seguidodeunodelosidentificadoresF0,F1,,F7.SiendoF7 id d d l id tifi d F0 F1 F7 Si d F7 elbitmassignificativo. Ejemplo: PORTC.F0 1; PORTC.F0 =1; PORTD.F5=0; PORTB.F7 1; PORTB.F7 =1;
LosidentificadoresF0F7nosereconocenenminsculas. NOTA:Entredosaccesosabitssedebetenerunretardomnimode2 microsegundos.

Entrada E t d osalida lid


Si deseamos configurar el puerto C con la SideseamosconfigurarelpuertoCconla siguienteasignacin:
RC0entrada RC0 entrada RC1entrada RC2entrada RC3entrada RC3 entrada RC4salida RC5salida RC6salida RC6 lid RC7salida Posiblesinstruccionesautilizar

TRISC=0b00001111; TRISC 0x0F; TRISC =0x0F; TRISC=15;

o o

Entradaosalida E t d lid
Si deseamos configurar el puerto D con la SideseamosconfigurarelpuertoDconla siguienteasignacin:
RD0entrada RD0 entrada RD1salida RD2entrada RD3salida RD3 salida RD4entrada RD5salida RD6entrada RD6 t d RD7salida Debemosutilizarcualquieradelassiguientesinstrucciones

TRISD=0b01010101; TRISD 0x55; TRISD =0x55; TRISD=85;

o o

Entradaosalida E t d lid
Si deseamos configurar el puerto A con la siguiente SideseamosconfigurarelpuertoAconlasiguiente asignacin:
RA0salida RA1salida 1 lid RA2salida RA3salida RA4entrada RA4 t d RA5entrada RA6entrada Posiblesinstruccionesautilizar

ADCON1=6; \\ instruccinindispensableparausarel puertoAyelpuertoEcomoentradao puerto A y el puerto E como entrada o salidadedatosdigitales TRISA=0b01110000; o TRISA=0x70; TRISA = 0x70; o TRISA=112;

ADCON1
ADCON1 = 0 0 0 0 0 1 1 0

ADCON1 = 6 ;

Delay_ms(retardoporsoftware) D l (
Descripcin:Creaunretardoporsoftwaredadoeltiempoen
milisegundos(constante).Elrangodeconstantesaplicablesalafuncin dependedelafrecuenciadeloscilador.Esunafuncininterna;Elcdigo depende de la frecuencia del oscilador Es una funcin interna; El cdigo esgeneradoenellugardondesehacelallamada,asquelallamadade estafuncinnocuentadentrodellimitedellamadasanidadas.

void Delay_ms(const time_in_ms) Ejemplo:


Generarunretardode1segundo g

Delay_ms(1000);

/*Pausadeunsegundo*/

EstructuradeunprogramaenC p g (ciclowhile )
//Definicindevariablesglobales // //Definicindefunciones voidmain(void) { //Definicindevariableslocales //Configuracinderegistros(recursosypuertos) //cicloinfinito while(1) { //Programadeusuario } }

EstructuradeunprogramaenC p g (ciclofor )
//Definicindevariablesglobales // //Definicindefunciones voidmain(void) { //Definicindevariableslocales //Configuracinderegistros(recursosypuertos) //cicloinfinito for(;;) { //Programadeusuario } }

EstructuradeunprogramaenC p g (ciclodo while )


//Definicindevariablesglobales // //Definicindefunciones voidmain(void) { //Definicindevariableslocales //Configuracinderegistros(recursosypuertos) //cicloinfinito do { //Programadeusuario }while(1); }

1. EncendidodeLED 1 E did d LED


Crearunprogramaqueenciendayapagueun led,ubicadoenlaterminalRD7delpuertoD. l d bi d l t i l RD7 d l t D p Eltiempodeencendidoesde1000 milisegundoyeldeapagadode300 milisegundos. milisegundos

EncendidodeLED(algoritmo) E did d LED (


1. Configurarelbit7delpuertoDcomosalidade datos 2. Encendidodelled 3. Retardoporsoftwarede1000milisegundos. 4. Apagadodelled 4 Apagado del led 5. Retardoporsoftwarede300milisegundos 6. Repetirelpaso2

EncendidodeLED(diagramadeflujo) E did d LED (


Led L d Configura bit del puerto como salida t lid Apaga bit

Enciende bit

Retardo de 300 ms

Retardo de 1000ms

EncendidodeLED(esquemtico) E did d LED (

EncendidodeLED(programa) E did d LED (


void main (void ) { TRISD.F7=0; while(1) while( 1 ) { PORTD.F7=1; PORTD F7 = 1; Delay_ms(1000); PORTD.F7=0; PORTD F7 0 Delay_ms(300); } }

EncendidodeLED(programa2) E did d LED (


void main (void ) { TRISD=0; while(1) while( 1 ) { PORTD=0x80; PORTD = 0x80; Delay_ms(1000); PORTD=0; PORTD 0 Delay_ms(300); } }

Ejerciciospropuestos1 Ej i i t 1
1. Elalumnoencenderyapagaraenformaalternada dosled subicadosenlosbit s2y3delpuertoB. dos leds ubicados en los bits 2 y 3 del puerto B. Losretardossernde500milisegundos(ambos). Usandoasignacindirectaabits. Usando asignacin directa a bits 2. Elalumnoencenderyapagaraunledubicadoen 2 El l d l d bi d elbit5delpuertoC.Losretardossernde100 milisegundosy2segundos,respectivamente. ili d 2 d i Usandoasignacindebyte.

2. Lucessecuenciales 2 L i l
Programaqueenvelasiguientesecuenciadedatos p alpuertodesalidaD. Secuencia:
00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

Lucessecuenciales(algoritmo) L i l (
1. 2. 2 3. 4. 4 Configuracindepuertocomosalidadedatos. Envodeprimerdatoalpuertodesalida Envo de primer dato al puerto de salida Envodesegundodatoalpuertodesalida Envodetercerdatoalpuertodesalida Envo de tercer dato al puerto de salida

. . .
9.Envodeultimodatoalpuertodesalida 9 E d lti d t l t d lid 10.Regresara2

Lucessecuenciales(diagramadeflujo) L i l (
Luces Configura puerto como salida Enva E 00000100 Enva E 00100000

Enva 00000001

Enva 00001000

Enva 01000000

Enva 00000010

Enva 00010000

Enva 10000000

Lucessecuenciales(esquemtico) L i l (

Lucessecuenciales(programa) L i l (
void main(void) { TRISD=0; //CONFIGURACIONCOMOPUERTODESALIDA while (1) //CICLOINFINITO { PORTD=0b00000001; //ENVIAPRIMERDATO Delay_ms(500); PORTD=0b00000010; //ENVIASEGUNDODATO Delay_ms(500); Delay ms(500); PORTD=0b00000100; //ENVIATERCERDATO Delay_ms(500); PORTD=0b00001000; Delay_ms(500); Delay ms(500); PORTD=0b00010000; Delay_ms(500); PORTD=0b00100000; Delay ms(500); y_ ( ); PORTD=0b01000000; Delay_ms(500); PORTD=0b10000000; Delay_ms(500); } }

Ejerciciospropuestos2 Ej i i t 2
1. Elalumnoenviaraunasecuenciadedatosdistintaporel 1 El alumno enviara una secuencia de datos distinta por el puertoB,utilizandoretardosporsoftwarededistintas duraciones,conincrementosde100milisegundosentresi. 2. ElalumnoenviaralasecuenciadedatosporelpuertoA, utilizandoretardosporsoftwareconduracinde800 utilizando retardos por software con duracin de 800 milisegundos.

100001 010010 001100 010010 100001

Arreglos(definiciones) A l (
#define MAX50 int float float fl char short long vector_one[10]; vector one[10]; / arreglo de 10 enteros / /*arreglode10enteros*/ vector_two[MAX];/*arreglo50flotantes*/ vector_three[MAX 20] h [MAX 20];/*arreglo30flotantes*/ /* l 30 fl */ numero[5]; dato[8]; temperatura[15];

unsigned peso[7]; unsigned shortd[3]; i d h d[3]

Arreglos(Inicializando) A l (
/*Arregloelcalcontieneelnmerodedasdecadames*/ int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; i t d [12] {31 28 31 30 31 30 31 31 30 31 30 31} /*Ladeclaracionesesidenticaalaanterior*/ int *days={31,28,31,30,31,30,31,31,30,31,30,31}; /*Lasdosdeclaracionessonidenticas*/ constchar msg1[]={ T e s t \0 }; const char msg1[ ] = {'T','e','s','t','\0'}; constchar msg2[]="Test";

Condicionanteif C di i t if
if (expresin)conjunto1 [else conjunto2] Cuandolaexpresin evaluadaesverdadera,Las instruccionesdelconjunto1 sonejecutadas.Sila i i d l j 1 j d Si l expresin esfalso,lasinstruccionesdelconjunto2 es ejecutada.Laexpresin d b j d L i debeserevaluadaaunvalor l d l entero.Losparntesisqueencierralaexpresin son obligatorios. bli i Lapalabraespecialelseconjunto2esopcional.

Smbolosdecondicin S b l d di i
Operador == != > < >= <= < Operacin igual noigual no igual mayorque y q menorque mayorqueoiguala menorqueoiguala i l

3. Lucesconarreglo(algoritmo) 3 L l (
1. 2. 3. 3 4. 5. Configuracindepuertocomosalida. Inicializaapuntador. Envodedatoapuntado. Envo de dato apuntado p Incrementaapuntador. Siapuntadoresmayorqueoiguala8inicia elapuntador. 6. Regresaa3. 6 Regresa a 3

Lucesconarreglo(diagramadeflujo) L l (
Luces Configura puerto como salida Incrementa apuntador

Limpia apuntador p p apuntador 8 Enva d t E dato apuntado no

si

Limpia Li i apuntador

Lucesconarreglo(programa) L l (
shortdato[8]={1,2,4,8,16,32,64,128}; shortapunta; void main(void) { TRISB=0; TRISB 0 apunta=0; while(1) { PORTB=dato[apunta]; y_ ( ); Delay ms(1000); apunta++; if (apunta>=8) apunta=0; apunta = 0; } }

//Configurapuerto // C fi //Limpiaapuntador //Cicloinfinito //Envadato //Incrementaapuntador //Siapuntador 8 //Limpiaapuntador // Limpia apuntador

Ejerciciospropuestos3 Ej i i t 3
1. Elalumnoenviaraunasecuenciaporel puertoBusandolosvaloresalmacenadoen puerto B usando los valores almacenado en unarreglo.
00000011 00000110 00001100 00011000 00110000 01100000 11000000

Operadoresaniveldebits Operadores a nivel de bits


Operador operacion p p

& | ^ ~
<< >>

AND; compara pares de bits y regresa 1 si ambos son 1s, de otra manera regresa 0. OR (inclusive); compara pares de bits y regresa 1 si uno o ambos son 1s, de otra manera regresa 0. OR (exclusiva); compara pares de bits y regresa 1 si los bits son complementarios, de otra manera regresa 0. Complemento (unitario); invierte cada bit Corrimiento h i l i C i i t hacia la izquierda; mueve los bits hacia la i d l bit h i l izquierda, descartando el bit mas a la izquierda y asignando ceros al bit a la derecha. Corrimiento hacia la derecha; mueve los bits hacia la derecha, descartando el bit mas a la derecha y asignando ceros al bit a la izquierda.

Ejemplosoperadoreslgicos Ej l d l i
0x1234&0x5678 porque... 0x1234: 0x5678: 0x5678: &: /*Igual0x1230*/ 0001001000110100 0101011001111000 0101 0110 0111 1000 0001001000110000

estoes,0x1230

/*Deformasimilar:*/ 0x1234|0x5678; 0x1234^0x5678; ~0x1234; 0 1234 /*Igual0x567C*/ /*Igual0x444C*/ /*Igual0xEDCB*/ /* I l 0 EDCB */

Ejemplosaniveldebits Ej l i l d bit
000001<<5;/*Igual000040*/ 0x3801<<4;/*Igual0x8010,sobreflujo!*/ 0 3801 4 /* I l 0 8010 b fl j ! */ 0x02F6>>4; /*Igual0x002F*/ 0xFF56>>4;/*Igual0x0FF5*/ 0 FF56 4 /* I l 0 0FF5 */ Corrimientoaladerechadivision entre2n. Corrimientoalaizquierdaproductopor2n. i i l i i d d

4. Lucescondesplazamiento(algoritmo) 4 L d l i t (
1. 2. 3. 3 4. 5. 6. Configuracindepuertocomosalida. Inicializavariable. Envavalordelavariablealpuerto. Enva valor de la variable al puerto Modificalavariable. Sivariableescero,Inicializalavariable. Regresaa3.

Lucescondesplazamiento(diagramadeflujo) L d l i t (
Luces Configura puerto como salida Modifica variable

Inicializa variable variable = 0 Enva E variable i bl al puerto no

si

Inicializa I i i li variable

Lucescondesplazamiento(programa1) L d l i t (
void main (void ) {unsigned shortdato; ; TRISD=0; dato=0b00000001; while (1) { PORTD=dato; PORTD = dato; Delay_ms (300); dato=dato<<1; if ( d f (dato==0) ) dato=0x01; } }

Operacionesaritmticas Operaciones aritmticas


Operador + * / % ++ Suma Resta Multiplicacin Divisin Resto, regresa el residuo de la divisin entera (no puede ser usado con variables flotantes Como prefijo Incrementa en uno el valor de la variable antes de C fij I t l l d l i bl t d evaluar la expresin. Como Postfijo suma en uno la variable despus de ser evaluado la expresin. Como prefijo decrementa en uno el valor de la variable antes de evaluar la expresin. Como Postfijo resta en uno la variable despus de ser evaluado la expresin. Operacin

--

Lucescondesplazamiento(programa2) L d l i t (
void main ( void ) (void {unsigned shortdato; TRISD=0; TRISD 0 dato=1; while (1) { PORTD=dato; Delay_ms (250); dato dato 2; dato =dato*2; if (dato==0) dato=0x01; } }

Ejerciciospropuestos4 Ej i i t 4
1. Elalumnorealizaraunprogramaqueenveal puertoClossiguientesvaloresutilizandopara puerto C los siguientes valores utilizando para generarlas,lasinstruccionesdedesplazamientoy/o aritmticas. aritmticas
1,5,9,13,17,21,25,29,33,37,41,45 1 5 9 13 17 21 25 29 33 37 41 45

2. Lomismoqueelejercicioanteriorconlasiguiente 2 L i l j i i t i l i i t secuencia:
3,6,12,24,48,92,172,1,3,6,9,12,15,18,21,24

Accesoabitsindividual A bit i di id l
mikroC tepermiteaccesoindividualenvariablesde8bits (char andunsigned short).Simplementeusandoelselector(.) seguidodeunodelosidentificadoresF0,F1,,F7,siendoF7 elbitmassignificativo. Ejemplo: //SiRB0esuno,colocarenunolaterminalRC0:
if (PORTB.F0) PORTC.F0=1; PORTC F0 1

LosIdentificadoresF0F7nosereconocenenminsculas. L Id tifi d F0 F7 i l

5. Secuenciascondicionadas(problema ) 5 S i di i d (
Realizarunprogramaqueenvesecuencias distintasalpuertoD,dependiendodelvalor di ti t l t D d di d d l l g delaterminalRA0.SiRA0esigualacerose envalaseriededosbitsdesplazadoshaciala izquierda,mientrasquesiRA0esiguala1 izquierda mientras que si RA0 es igual a 1 entoncesseenvalaseriedetresbits desplazadoshacialaderecha.

Secuenciascondicionadas(algoritmo) S i di i d (
1. Configuracindepuertos 2. Iniciacontador 2 I i i t d g 3. SiRA0esiguala0entoncesenva secuencia_izquierda 4. Delocontrarioenvasecuencia_derecha 4 De lo contrario enva secuencia derecha 5. Incrementacontador 6. Sicontadoresiguala8entoncescontadoriguala0 7. Regresaa3 7 Regresa a 3

Secuenciascondicionadas(diagramadeflujo) S i di i d (
Luces Configura puertos RD salida RA entrada salida, Enva _ q secuencia_izquierda Incrementa contador

Limpia contador

si RA0 = 0 si Contador = 10 no

Limpia contador

no

Enva Secuencia_derecha

Secuenciascondicionadas(programa) S i di i d (
shortizquierda[10]={0,1,3,6,12,24,48,96,192,128}; short izquierda[10] { 0 1 3 6 12 24 48 96 192 128 }; shortderecha[10]={128,192,226,102,56,28,14,7,3,1}; void main (void ) { TRISD=0; ADCON1=6; TRISA=0x7F; Contador=0; for (;;) { Delay_ms (500); if ( PORTA F0 (PORTA.F0==0) 0) PORTD=izquierda[contador]; else PORTD=derecha[contador]; contador++; If (contador==10) contador=0; } }

Ejerciciospropuestos5 Ej i i t 5
1. Elalumnodesarrollaraunprogramaque enveunasecuenciadenmerosBCDaun i d BCD p y g displayde7segmentosubicadosenel puertoD.SilaterminalRA1ubicadaenel puertoA,esiguala0,lanumeracindebe puerto A es igual a 0 la numeracin debe serincremental;encasocontrariodebe decrementarse.

Ejerciciospropuestos5(esquemtico) Ej i i t 5(

MOTORAPASOS1 MOTOR A PASOS 1


Unipolar. Tiene4bobinasindependientes(A,B,C,D)y unaterminalcomnatodasellas. una terminal comn a todas ellas

MOTORAPASOS2 MOTOR A PASOS 2


Unipolar. Tiene4bobinasindependientes(A,B,C,D) ydosterminalescomunes. y dos terminales comunes

MOTORAPASOS2 MOTOR A PASOS 2


Bipolar. Tiene2bobinas(A C,B D)

Secuenciasdeactivacin1 Secuencias de activacin 1


Unipolar. Movimientode1pasoporpulso(mayor torque). torque)
Paso P 1 2 3 4 A 1 0 0 1 B 1 1 0 0 C 0 1 1 0 D 0 0 1 1

Secuenciasdeactivacin2 Secuencias de activacin 2


Unipolar. Movimientode1pasoporpulso(mayor velocidad). velocidad)
Paso P 1 2 3 4 A 1 0 0 0 B 0 1 0 0 C 0 0 1 0 D 0 0 0 1

Secuenciasdeactivacin3 Secuencias de activacin 3


Unipolar. Movimientode1/2pasoporpulso.
Paso 0.5 05 1 1.5 15 2 2.5 25 3 3.5 35 4 A 1 1 0 0 0 0 0 1 B 0 1 1 1 0 0 0 0 C 0 0 0 1 1 1 0 0 D 0 0 0 0 0 1 1 1

Secuenciasdeactivacin4 Secuencias de activacin 4


Bipolar. Movimientodeunpaso
Paso 1 2 3 4 A 1 1 0 0 C 0 0 1 1 B 1 0 0 1 D 0 1 1 0

Secuenciadeactivacin5 Secuencia de activacin 5


Bipolar.- Movimiento de medio paso
Paso 0.5 05 1 1.5 15 2 2.5 25 3 3.5 35 4 A 1 1 1 0 0 0 0 0 C 0 0 0 0 1 1 1 0 B 1 0 0 0 0 0 1 1 D 0 0 1 1 1 0 0 0

Circuitodepotencia1(motorunipolar) Ci it d t i 1(

Circuitodepotencia2(motorunipolar) Ci it d t i 2(

Circuitodepotencia3(motorbipolar) Ci it d t i 3(
Este mismo diagrama se repetira para manejar la segunda bobina

Circuitodepotenciax(motorapasos) Ci it d t i (
Circuito integrado UCN 5804 Circuito integrado SAA1042

Circuitodepotenciax1(motorunipolar) Ci it d t i 1(

Circuitodepotenciax2(motorbipolar) Ci it d t i 2(

Ejerciciospropuestos5 Ej i i t 5
2. Elalumnodesarrollaraunprogramaque envelasecuenciadeactivacindeunmotor l i d ti i d t p p apasosubicadoenelpuertoD.Silaterminal ubicadaenelpuertoA,RA6,seaiguala0,el motordebegiraraladerecha,encaso motor debe girar a la derecha en caso contrariodebegiraralaizquierda.

Ejerciciospropuestos5(esquemtico) Ej i i t 5(

6. Displayde7segmentos 6 Di l d 7 t
Realizarunprogramaendondese implementeuncontadorde0099 i l t t d d 00 99 p g p p y desplegandoenunpardedisplaysde7 segmentos.Elprogramadeberealizarla visualizacinutilizandoelmultiplexajedelos visualizacin utilizando el multiplexaje de los datos,utilizandoelpuertoBcomobusde datosylasterminalesRC0yRC1como terminalesdehabilitacindedisplay. terminales de habilitacin de display

Displayde7segmentos(algoritmo) Di l d 7 t (
1. 2. 3. 4. 5. 5 6. 7. 8. 8 9. 10. 11. 12. 13. 14. Configurarlospuertos,inicializacindevariables(unidades=0 decenas=0) Envodedecenas Envo de decenas Habilitacindedecenas Envodeunidades Habilitacindeunidades Habilitacin de unidades Incrementodeunidades Siunidadesmayorde9entonces9 Sigue2 Si 2 Unidades=0 Incrementadecenas Sidecenasmayorde9entonces12 Sigue2 Decenas=0 Sigue2

Displayde7segmentos (diagramadeflujo) Di l d 7 t
Display p y
Limpia unidades Incrementa decenas

Configura puertos Inicia variables Enva decena Enva unidad Incrementa unidad si Unidades>9 no

Decenas>9 no

si

Limpia decenas

Displayde7segmentos(programa) Di l d 7 t (
shortnumero[]={0x3F,0x06,0x1B,0x4F,0x66,0x6D,0x5E,0x07,0x7F,0x67}; [] { , , , , , , , , , }; void main (void ) { TRISB=0; ; TRISC=0; unidades=decenas=0; while (1) { [ ]; PORTB=numero[decenas]; PORTC.F0=1; delayms(10); PORTC.F0=0; PORTB=numero[unidades]; ; PORTC.F1=1; delayms(10); PORTC.F1=0; unidades++; if (unidades>9) ( ) { unidades=0; decenas++; if (decenas>9) { decenas=0; } } } } //Programaprincipal //Configuracindepuertos //Inicializacindevariables //Programadeusuario // //Envadecenas //Habilitaeldisplay dedecenas

//Envaunidades // //Habilitaeldisplay dedecenas p y

//Incrementaunidades

//Reiniciaunidades //Incrementadecenas

//Reiniciedecenas

Displayde7segmentos(esquemtico) Di l d 7 t (

Ejerciciopropuesto6(d7seg) Ej i i t 6(
Elalumnomodificaraelprogramaelaborado detalformaquesecambieelincrementopor d t lf bi l i t , p decremento,alusaruninterruptor.Siel interruptorestaapagadoelconteoser incremental,encasocontrario,elconteoser incremental en caso contrario el conteo ser decremental.Elinterruptorestarubicadoen laterminalRE0delpuertoE.

Ejerciciopropuesto6(esquemtico) Ej i i t 6(

Displaydecristalliquido Di l d i t l li id

LCD( LCD (funcionesbus8bits)


Lcd8_Config Lcd8_Init Lcd8_Out Lcd8 Out Lcd8_Out_Cp p Lcd8_Chr Lcd8_Chr_Cp Lcd8_Cmd L d8 C d

Lcd8_Config L d8 C fi

Descripcin:InicializaelLCDusandounbusdedatosde8bits.Lospuertosde
void Lcd8_Config(unsignedshort *ctrlport,
unsignedshort *dataport, unsignedshort RS, unsigned short RS unsignedshort EN, unsignedshort WR, unsignedshort D7, unsigned short D7 unsignedshort D6, unsignedshort D5, unsignedshort unsigned short D4, unsignedshort D3, unsignedshort D2, g , unsignedshort D1, unsignedshort D0);

Control(ctrlport)yDatos(dataport)usanlaasignacindeterminalesespecificada.

Lcd8_Config2 L d8 C fi 2
Ejemplo: Lcd8_Config(&PORTC,&PORTD,0,1,2,0,1,2,3,4,5,6,7);

Lcd8_Init L d8 I it
Descripcin: Inicializa el LCD usando un bus de 8 bits Los Descripcin:InicializaelLCDusandounbusde8bits.Los puertosdeControl(ctrlport)yDatos(dataport)usanla siguienteasignacindeterminales.
Ectrlport.3 RSctrlport.2 R/Wctrlport.0 R/W ctrlport 0 D7dataport.7 D6dataport.6 D5dataport.5 D5 d t t5 D4dataport.4 D3dataport.3 D2dataport.2 D1dataport.1 D0dataport.0

void Lcd8_Init(unsignedshort *ctrlport,unsignedshort *dataport);

Lcd8_Init2 _
Ejemplo: Lcd8_Init(&PORTB, Lcd8 Init(&PORTB, &PORTC);

Lcd8_Out L d8 O t
Descripcin:ImprimemensajeenelLCDenlafilay columnaespecificada(rowycol). columna especificada (row y col). void L d8 O ( unsignedshort row, id Lcd8_Out(
unsignedshort col, char *text);

Ejemplo:
ImprimeHello!enelLCDenlalinea1,columna3 Imprime Hello! en el LCD en la linea 1 columna 3

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

Lcd8_Out_Cp L d8 O t C
Descripcin:ImprimemensajeenelLCDenla posicinactualdelcursor. i i t ld l void Lcd8_Out_Cp(char *text); Ejemplo:ImprimeHere!enlaposicin actualdelcursor actual del cursor Lcd8_Out_Cp("Here!");

Lcd8_Chr L d8 Ch
Descripcin:ImprimeuncaracterenelLCDenlafila ycolumnaespecificada(rowycol). y columna especificada (row y col). void L d8 Ch ( unsignedshort row, id Lcd8_Chr(
unsignedshort col, char character);

Ejemplo:ImprimelaletraienelLCDenlalnea2,y columna3 columna 3 Lcd8_Out(2,3,'i');

Lcd8_Chr_Cp L d8 Ch C
Descripcin:ImprimeuncaracterenelLCDen laposicinactualdelcursor. l i i t ld l void Lcd8_Chr_Cp(char character); Ejemplo:Imprimelaletraeenlaposicin actualdelcursor actual del cursor Lcd8_Chr_Cp('e');

Lcd8_Cmd L d8 C d
Descripcin:EnvauncomandoalLCD.Se puedepasaralafuncinunadelasconstantes d l f i d l t t p predefinidas. void Lcd8_Cmd(unsignedshort command); Ejemplo: Limpia el LCD Ejemplo:LimpiaelLCD Lcd8_Cmd(LCD_CLEAR);

Co a dos p ede dos Comandospredefinidos


Comando
LCD_FIRST_ROW LCD FIRST ROW LCD_SECOND_ROW LCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_HOME LCD_CURSOR_OFF LCD_UNDERLINE_ON LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD MOVE CURSOR LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT LCD_SHIFT_RIGHT LCD SHIFT RIGHT

Funcin
Mueve el cursor a la 1a. fila. M l l 1 fil Mueve el cursor a la 2a. fila. Mueve el cursor a la 3a. fila. Mueve el cursor a la 4a. fila. Limpia el display. Regresa el cursor a la posicin 1,1. Los datos de la RAM no son afectados. Apaga el cursor. Coloca el caracter subrayado. Parpadeo del cursor. 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

7. LCD8BITS 7 LCD 8 BITS


DisearelprogramaqueinicialiceunLCD, usandounbusdedatosde8bits,ya d b d d t d 8 bit j continuacinmandeunmensajede bienvenida.Elmensajedebedesplazarsehacia laizquierdaenformacontinua. la izquierda en forma continua

LCD8BITS( LCD 8 BITS (algoritmo)


1. Inicialicelospuertosdedatosycontrol. 2. Envamensajeadesplegar. 3. Envacomandodedesplazamientohaciala 3 Enva comando de desplazamiento hacia la izquierda. 4. Repiteelpaso3.

LCD8BITS( LCD 8 BITS (diagramadeflujo)


LCD 8 bits Inicializa puertos de datos y control

Enva mensaje

Enva comando de Corrimiento a la izq.

LCD8BITS( LCD 8 BITS (esquemtico)

LCD8BITS( LCD 8 BITS (programa1)


Void main(void) {TRISB=0; TRISC=0; TRISC 0 Lcd8_Config(&PORTC,&PORTB,0,2,1,7,6,5,4,3,2,1,0); Lcd8 Config(&PORTC,&PORTB,0,2,1,7,6,5,4,3,2,1,0); Lcd8_Out(1,1,Holamundocruel); while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT); Delay_ms(100); } }

LCD8BITS( LCD 8 BITS (programa2)


char mensaje[]=Programanumero2; 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); Delay ms(500); } }

LCD8BITS( LCD 8 BITS (esquemtico)

LCD8BITS( LCD 8 BITS (programa3)


char *mensaje3=mensajetres; ( ) void main(void) {TRISB=0; TRISC=0; Lcd8_Init(&PORTC,&PORTB); Lcd8_Out(1,1,mensaje3); Lcd8_Out(2,1,segundafila); while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT); Delay_ms(50); } }

Ejerciciospropuestos7 Ej i i t 7
1. ProgramaqueformelapalabraHOLAenunLCD, configuradoparautilizarunbusde8bits.Lasletras configurado para utilizar un bus de 8 bits Las letras debendesplazarsedederechaaizquierda.Primero debeaparecerlaH,moviendosedesdeladerechaa d b l H i d d d l d h laprimercolumnaalaizquierda.Enseguidadebe aparecerlaO,tambiensaliendodeladerechay terminandoaladerechadelaletraH.Lomismo debesucederparalasletrasLyA.Elprograma debeserciclico. debe ser ciclico

Ejerciciopropuesto8 Ejercicio propuesto 8


H H O HO L

. . .
H O LA

H O

LCD( LCD (funcionesbus4bits)


Lcd_Config Lcd_Init Lcd_Out Lcd Out Lcd_Out_Cp p Lcd_Chr Lcd_Chr_Cp Lcd_Cmd L d C d

Lcd_Config L d C fi
Descripcin:InicializaLCDusandounbusdedatosde4bits.
ElpuertodeControl(ctrlport)yDatos(dataport)tienelas asignacionesdeterminalesespecificadas.
unsignedshort *ctrl_data_port, unsignedshort RS, unsignedshort EN, unsigned short EN unsignedshort WR, unsignedshort D7, unsignedshort D6, unsignedshort D5, unsignedshort D4) );

void Lcd_Config( d f (

Lcd_Config2 Lcd Config 2


Ejemplo: Lcd_Config(&PORTC,0,1,2,4,5,6,7);

Lcd_Init L d I it
Descripcin: Inicializa el LCD usando un bus de 4 bits Descripcin:InicializaelLCDusandounbusde4bits. ElpuertodeControl(ctrlport)yDatos(dataport) tienelasiguienteasignacindeterminales. tiene la siguiente asignacin de terminales Ectrl_data_port.3 RSctrl_data_port.2 RS ctrl data port 2 D7ctrl_data_port.7 D6ctrl_data_port.6 D5ctrl_data_port.5 D4ctrl_data_port.4 void Lcd_Init(unsignedshort *ctrl_data_port);

Lcd_Init2 L d I it 2
Ejemplo: Lcd_Init(&PORTB);

Lcd_Out L d O t
Descripcin:ImprimemensajeenelLCDenlafilay columnaespecificada(rowycol). columna especificada (row y col). void L d O ( unsignedshort row, id Lcd_Out(
unsignedshort col, char *text);

Ejemplo:
ImprimeHello!enelLCDenlalnea1,columna3 Imprime Hello! en el LCD en la lnea 1 columna 3

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

Lcd_Out_Cp L d O t C
Descripcin:ImprimemensajeenelLCDenla posicinactualdelcursor. posicin actual del cursor void Lcd_Out_Cp(char *text); Ejemplo:
ImprimeHere!enlaposicinactualdelcursor

Lcd_Out_Cp( Lcd Out Cp("Here!");

Lcd_Chr L d Ch
Descripcin:ImprimeuncaracterenelLCDenlafila ycolumnaespecificada(rowycol). y columna especificada (row y col). void L d Ch ( unsignedshort row, id Lcd_Chr(
unsignedshort col, char character);

Ejemplo:
Imprime la letra i en el LCD en la lnea 2 y columna 3 ImprimelaletraienelLCDenlalnea2,ycolumna3

Lcd_Out(2,3,'i');

Lcd_Chr_Cp L d Ch C
Descripcin:ImprimeuncaracterenelLCDenla posicinactualdelcursor. posicin actual del cursor void Lcd_Chr_Cp(char character); Ejemplo:
Imprimelaletraeenlaposicinactualdelcursor

Lcd_Chr_Cp( Lcd Chr Cp(''e'');

Lcd_Cmd L d C d
Descripcin:EnvauncomandoalLCD.Sepuedepasarala
funcinunadelasconstantespredefinidas.Loscomandosson p losmismosparaambosmodosdemanejodelLCD(bus8o4 bits).

void Lcd Cmd(unsigned short command); Lcd_Cmd(unsignedshort Ejemplo: j l p g p Apagaelcursor,noapareceenelLCD Lcd_Cmd(LCD_CURSOR_OFF);

8. LCD4BITS 8 LCD 4 BITS


DisearelprogramaqueinicialiceunLCD, usandounbusdedatosde4bits,ya d b d d t d 4 bit j q continuacinmandeunmensajecualquiera debienvenida.Elmensajedebedesplazarse hacialaderechaenformacontinua. hacia la derecha en forma continua

LCD4BITS( LCD 4 BITS (algoritmo)


1. Inicialicelospuertosdedatosycontrol. 2. Envamensajeadesplegar. 3. Envacomandodedesplazamientohaciala 3 Enva comando de desplazamiento hacia la derecha. 4. Repiteelpaso3.

LCD4BITS( LCD 4 BITS (diagramadeflujo)


LCD 8 bits Inicializa puertos de datos y control

Enva mensaje

Enva comando de Corrimiento a la der.

LCD4BITS( LCD 4 BITS (esquemticoConfig)

LCD4BITS( LCD 4 BITS (programa1)


void main(void) {TRISD=0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); Lcd_Out(1,1,Enviodedatos); Lcd_Out(2,1,Usandobusde4bits); while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } }

LCD4BITS( LCD 4 BITS (programa2)


char mensaje[11]={B,u,s,,4,,b,i,t,s,\0}; void main(void) {TRISD=0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); L d C fi (&PORTD 0 2 1 7 6 5 4) Lcd_Out(1,6,mensaje); while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } }

LCD4BITS( LCD 4 BITS (esquemticoInit)

LCD4BITS( LCD 4 BITS (programa3)


char*mensaje3=programa 3usando bus4bits; ( ) voidmain(void) {TRISB=0; TRISC=0; Lcd8_Init(&PORTC,&PORTB); Lcd8_Out(1,16,mensaje3); Lcd8_Out(2,1,fila=2columna=5); while(1) { Lcd8_Cmd(LCD_SHIFT_LEFT); Delay_ms(50); } }

Conversindetipodedatos C i d ti d d t
Tipodedatoacadena ByteToStr ShortToStr WordToStr IntToStr LongToStr Fl tT St FloatToStr

ByteToStr B t T St
Descripcion:Creaunacadenadesalidadeunpequeonumerosin signo(valornumricomenosa0x100).Lacadenaestaajustadaaun anchode3caracteres;Lasposicionesalaizquierdaquenoseusan ancho de 3 caracteres; Las posiciones a la izquierda que no se usan enlaconversinserellenanconespacios. void ByteToStr(unsignedshort number,char *output); Ejemplo: l unsignedshort t=24; char *txt=; //se inicializa un apuntador a 4 espacios *txt= ; seinicializaunapuntadora4espacios ByteToStr(t,txt); y ( ) //txtes"24"(unespacioenblanco) p

ShortToStr Sh tT St
Descripcin:Creaunacadenadesalidadeunnumeropequeocon signo(valornumricomenora0x100).Lacadenaestaajustadaa unanchode4caracteres;Lasposicionesalaizquierdaquenose un ancho de 4 caracteres Las posiciones a la izquierda que no se usanenlaconversinserellenanconespacios.

void ShortToStr(short number,char *output);


Ejemplo: short t=4; char *t t // S i i i li h *txt=; Seinicializaunapuntadorde5espacios d d 5 i ShortToStr(t,txt);//txtes"4"(dosespacioenblanco) ( , ); // ( p )

WordToStr W dT St
Descripcin:Creaunacadenadesalidadeunnumerosinsigno (Valornumricodeunavariableunsigned).Lacadenaesta ajustadaaunanchode5caracteres;Lasposicionesala j t d h d 5 t L i i l izquierdaquenoseusanenlaconversinserellenancon p espacios. void WordToStr(unsigned number,char *output); ( g , p );
Ejemplo: unsigned t=437; char *txt=; //Inicializaunapuntadorcon6espacios WordToStr(t,txt); //txtes437"(dosespaciosvacios)

IntToStr I tT St
Descripcin:Creaunacadenadesalidadeunnumeroconsigno(Valor numricodeunavariableint).Lacadenaestaajustadaaunancho de6caracteres;Lasposicionesalaizquierdaquenoseusanenla de 6 caracteres; Las posiciones a la izquierda que no se usan en la conversinserellenanconespacios.

void IntToStr(int number,char *output);


Ejemplo: int j=4220; char *txt=; // Inicializa un apuntador con 6 espacios txt= ; //Inicializaunapuntadorcon6espacios IntToStr(j,txt); //txtes"4220"(unespacioenblanco)

LongToStr L T St
Descripcin:Creaunacadenadesalidadeunnumerolargoconsigno

(Valornumricodeunavariablelong).Lacadenaestaajustadaaun anchode11caracteres;Lasposicionesalaizquierdaquenoseusan ancho de 11 caracteres; Las posiciones a la izquierda que no se usan enlaconversinserellenanconespacios.

void LongToStr(long number,char *output);


Ejemplo: long jj=3700000; char *txt=; txt= ; LongToStr(jj,txt);

//Inicializaunapuntadorcon12espacios // Inicializa un apuntador con 12 espacios //txtes3700000"(3espaciosenblanco)

FloatToStr Fl tT St
Descripcin:Creaunacadenadesalidadeunnumerodepunto flotante.Lacadenacontieneunformatonormalizadodeunnumero (mantisaentre0y1)consignoenlaprimeraposicin.Lamantisa (mantisa entre 0 y 1) con signo en la primera posicin La mantisa estaajustadaaunformatode6dgitos,0.ddddd;Haysiempre5 dgitosacontinuacindelpuntodecimal.

void FloatToStr(float number,char *output);


Ejemplo: float ff =374.2; ff 374.2; char *txt=; FloatToStr(ff,txt); Fl T S (ff )

//Inicializaunapuntadorcon14espacios // // txtes"0.37420e3" " "

9. Contador09( 9 C t d 0 9 (problema) )
Sequiereunprogramaquevisualiceun conteode0a9enunLCD. t d 0 9 LCD

Contador09( C t d 0 9 (algoritmo)
1. 2. 3. 3 4. 5. 6. ConfiguraelLCD Inicializaelcontador ConvierteaASCIIelvalordelcontador Convierte a ASCII el valor del contador EnvavalorenASCIIalLCD Incrementaelcontador Regresaa3

Contador09( C t d 0 9 (diagramadeflujo)
teclado Inicializa puertos p (LCD) Convierte contador a ASCII Inicializa contador Enva a LCD ASCII Incrementa contador

Contador09( C t d 0 9 (programa)
void main(void) {unsigned shortcontador; char cadena[5]=; TRISD=0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); Lcd Config(&PORTD,0,2,1,7,6,5,4); contador=0; Lcd_Out(1,1,Contador09); L d O t(1 1 C t d 0 9) while(1) { ShortToStr (contador,cadena); Lcd_Out (2,8,cadena); contador++; Delay_ms(500); Delay ms(500); } }

Contador09( C t d 0 9 (esquemtico)

Contador09( C t d 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

Contador 0-9 : 9

Ejerciciopropuesto8 Ej i i t 8
1. ProgramaqueutiliceunLCD,configuradoparausar p unbusde8bits.EnelLCDdebenapareceren formasecuencial,losnmerosdelasecuencia1 2 generadosporoperacionesaritmticas.El desplegadodebehacersedelaformamostradaen desplegado debe hacerse de la forma mostrada en lassiguientesfiguras.Seutilizalasegundafila, presentandohasta3numerosconsecutivos,un presentando hasta 3 numeros consecutivos, un numeroalaizquierda,unomasalcentroyotroala derecha.
4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 4096 8192 16384 32768.Losnumerodebenser L d b

Ejerciciopropuesto8 Ej i i t 8
Serie de numeros Serie de numeros 1 Serie de numeros 1 2

Serie de numeros 1 2

Serie de numeros 8

Serie de numeros 8 16

Serie de numeros 8 16

32

Serie de numeros 8192 16384

32768

Ejerciciopropuesto9 Ej i i t 9
1. Elalumnodisearaunprogramaendonde semuestreenunLCDlosnmerosdesde00 t LCD l d d 00 p hastael99.Conunintervalodetiempo entrecambioiguala500milisegundos.

Ejerciciopropuesto9 Ej i i t 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

Tecladomatricial(esquemtico) T l d t i i l(

Tecladomatricial(funciones) T l d t i i l(
Keypad_Init Keypad Read Keypad_Read Keypad Released Keypad_Released

Keypad_Init K d I it
Descripcin:Inicializaelpuertoparatrabajarconelteclado. Lasterminalesdeltecladodebenestarconectadasdela siguienteforma:
port.F0 port.F1 port.F2 port.F3 port F3 port.F4 port.F5 port.F6 port.F7 columna1 columna2 columna3 columna4 columna 4 fila1 fila2 fila 2 fila3 fila4

void Keypad_Init(unsigned *port);

Keypad_Init2 K d I it 2
Ejemplo: Keypad_Init(&PORTB);

Keypad_Read K d R d
Descripcin:Verificasialgunateclafuepresionada.Lafuncinregresa
1a12,dependiendolateclapresionada,o0sinoexisteteclapresionada.
1 2 9 * 0 # 1 2 9 10 11 12

unsignedshort Keypad_Read(void); Ejemplo: kp=Keypad_Read(); k K d R d()

Keypad_Released K d R l d
Descripcin:LallamadaalafuncinKeypad_Releasedesunafuncin
blockingcall:Lafuncinesperahastaquecualquierteclaseapresionaday blocking call: La funcin espera hasta que cualquier tecla sea presionada y liberada.Cuandoselibera,lafuncinregresade1a12,dependiendodela teclapresionada.

unsigned short Keypad Released(void); unsignedshort Keypad_Released(void); Ejemplo: Keypad_Released(); Keypad Released();

10. Tecladomatricial(problema) 10 T l d t i i l(
Sedeseaunprogramaconelcualsemuestre enunLCD(bus8bitsenpuertoBypuertoC LCD (b 8 bit t B t C ) p comocontrol)lateclapresionadaenun tecladomatricial(puertoD).

Tecladomatricial(algoritmo) T l d t i i l(
1. 2. 3. 3 4. 5. Configuracindepuertos(tecladoylcd). Lecturadeteclado ConversinaASCII Conversin a ASCII EnvoalLCD Regresara2

Tecladomatricial(diagramasdeflujo) T l d t i i l(
teclado Inicializa puertos p (LCD y teclado) Lee teclado

Convierte a ASCII

Enva a LCD

AHS1

Tecladomatricial(esquemtico) T l d t i i l(

Diapositiva 157 AHS1


TEC, 08-02-2006

Tecladomatricial( Teclado matricial (programa)


unsigned shortkp,cnt; char txt[5]; void main() { cnt =0; Keypad_Init(&PORTD); Lcd8_Init(&PORTC,&PORTB,0,2,1,7,6,5,4,3,2,1,0); //InicializaLCDenpuertoBypuertoC Lcd8_Cmd(LCD_CLEAR); //Limpiadisplay Lcd8_Cmd(LCD_CURSOR_OFF); //Cursorapagado Lcd8_Out(1,1,"Key:"); Lcd8_Out(2,1,"Times:"); L d8 O t(2 1 "Ti ") do{ kp =0; //Esperaaquesepresioneunateclapressed dokp =Keypad_Read(); while (!kp); //Preparavalorparasalida switch (kp) (kp) {case10:kp =42; break; //'*' case11:kp =48; break; break; // 0 // '0' case12:kp =35; break; //'#' default:kp +=48; } cnt++; Lcd9_Chr(1,10,kp); if (cnt ==255){cnt =0;Lcd8_Out(2,10,"");} //ImprimeenLCD WordToStr(cnt,txt); Lcd8_Out(2,10,txt); }while (1); }

Ejerciciopropuesto9 Ej i i t 9
1. Elalumnorealizaraunprogramaquetome3 nmerosdesdeuntecladomatricial,los d d t l d ti i l l g guardeenunarreglo,losconviertaaun g , numeroqueseguardeenunavariabletipo entera.Conestenumeroelalumnodeber entera Con este numero el alumno deber proporcionarelproductopor2ydivisin entre2resultantes.Visualizandolos resultadosenunLCD. resultados en un LCD

Ejerciciopropuesto9 Ej i i t 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 divisin t L di i i entre 2 es: 012

Вам также может понравиться