Академический Документы
Профессиональный Документы
Культура Документы
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
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 +
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.
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
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.
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 } }
Enciende bit
Retardo de 300 ms
Retardo de 1000ms
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.
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];
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
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; } }
Ejerciciospropuestos3 Ej i i t 3
1. Elalumnoenviaraunasecuenciaporel puertoBusandolosvaloresalmacenadoen puerto B usando los valores almacenado en unarreglo.
00000011 00000110 00001100 00011000 00110000 01100000 11000000
& | ^ ~
<< >>
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
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
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; } }
--
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(
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
//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
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
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);
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);
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
Enva mensaje
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
. . .
H O LA
H O
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_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_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_Cmd L d C d
Descripcin:EnvauncomandoalLCD.Sepuedepasarala
funcinunadelasconstantespredefinidas.Loscomandosson p losmismosparaambosmodosdemanejodelLCD(bus8o4 bits).
Enva mensaje
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.
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.
LongToStr L T St
Descripcin:Creaunacadenadesalidadeunnumerolargoconsigno
(Valornumricodeunavariablelong).Lacadenaestaajustadaaun anchode11caracteres;Lasposicionesalaizquierdaquenoseusan ancho de 11 caracteres; Las posiciones a la izquierda que no se usan enlaconversinserellenanconespacios.
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.
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
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
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
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
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(
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 La divisin t L di i i entre 2 es: 012