SlideShare una empresa de Scribd logo
1 de 372
BASIC PARA
MICROCONTROLADORES PIC


   Christian Bodington Esteva
      Ingeniero en Electrónica
CONTENIDO




Prólogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

Capítulo I. Herramientas de Diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

Capítulo II. MicroCode Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

Capitulo III. Microcontroladores PIC.

           3.1.- ¿Que es un PIC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

           3.2.- El Oscilador Externo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25

           3.3.- El Circuito de Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

           3.4.- Consideraciones técnicas de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . 31

                       3.4.1.- Estado Lógico de un pin I/O. . . . . . . . . . . . . . . . . . . . . . . . . . 31

                       3.4.2. Lectura de un estado lógico en un pin I/O. . . . . . . . . . . . . . . 33

                       3.4.3. El Opto-acoplador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

                       3.4.4. Fuente de poder, 5Vdc / 3.3Vdc. . . . . . . . . . . . . . . . . . . . . . . 37

Capítulo IV. Estructura de un programa. Componentes y operadores en
PicBasic.

           4.1.- Estructura de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

           4.2.- Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

           4.3.- Componentes y operadores en PicBasic. . . . . . . . . . . . . . . . . . . . . . . .41



                                                                 i
4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

                 4.3.2.- Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42

                 4.3.3.- Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

                 4.3.4.- Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

                 4.3.5.- Símbolos o Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

                 4.3.6.- Operadores Aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

                 4.3.7.- Operadores Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

                 4.3.8.- Operadores de Comparación. . . . . . . . . . . . . . . . . . . . . . . . 46

                 4.3.9.- Operadores Lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46



Capitulo V. Primeros Programas con el PIC16F84.

      5.1.- Proyecto #1. Implementación de las instrucciones de programa High,
      Low Goto y Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47

      5.2.- Proyecto #2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

      5.3.- Proyecto #3. Implementación de la instrucción If-Them-Else. . . . . . . .60

      5.4.- Proyecto #4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

      5.5.- Proyecto #5. Implementación de la instrucción For-Next. . . . . . . . . . . 65

      5.6.- Proyecto #6. Implementación de la instrucción Frecout. . . . . . . . . . . . 68

      5.7.- Proyecto #7. Implementación de la instrucción Button . . . . . . . . . . . . .76

                 5.7.1.- Proyecto #7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

                 5.7.2.- Proyecto #7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

                 5.7.3.- Proyecto #7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87



                                                        ii
5.8.- Proyecto #8. Implementación de la instrucción Branch . . . . . . . . . . . . 91

      5.9.- Proyecto #9. Implementación de la instrucción PWM . . . . . . . . . . . . . 94


Capitulo VI. Módulos LCD.
      6.1.- Pantallas LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

      6.2.- Identificación de los pines de una pantalla LCD . . . . . . . . . . . . . . . . . 98

      6.3.- Conexión de una pantalla LCD en Pic Basic. . . . . . . . . . . . . . . . . . . . 99

      6.4.- Proyecto #10. Implementación de la instrucción Lcdout . . . . . . . . . . 103

      6.5.- Proyecto #11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

      6.6.- Proyecto #12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109

      6.7.- Proyecto #13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111

      6.8.- Proyecto #14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114

      6.9.- Proyecto #15. Implementación de la instrucción Count. . . . . . . . . . . 115

      6.10.- Proyecto #16. Implementación de la instrucción Pulsin. . . . . . . . . . 122

      6.11.- Proyecto #17. Implementación de la instrucción Pot. . . . . . . . . . . . 124

      6.12.- Memoria CGRAM en la Pantalla LCD. . . . . . . . . . . . . . . . . . . . . . . .127

      6.13.- Proyecto #18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130

      6.14.- Proyecto #19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137


Capitulo VII. Teclado Matricial.

      7.1.- Teclado Matricial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149

      7.2.- Proyecto #20. Aplicación de un teclado 3x4. . . . . . . . . . . . . . . . . . . .154




                                                       iii
Capitulo VIII. Memoria de Datos.
      8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157

      8.2.- Proyecto #21. Implementación de la instrucción Read. . . . . . . . . . . .161

      8.3.- Proyecto #22. Implementación de la instrucción Write. . . . . . . . . . . .163

      8.4.- Proyecto #23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165

      8.5.- Proyecto #24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168



Capitulo IX. Interrupciones.
      9.1.- ¿Qué son las Interrupciones?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

      9.2.- Fuentes de Interrupciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

      9.3.- Registro INTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

      9.4.- Activación de interrupción a través del pin RB0/INT. . . . . . . . . . . . . . 177

      9.5.- Proyecto #25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

      9.6.- Interrupción TMR0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180

      9.7.- Registro OPTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181

      9.8.- Proyecto #26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

      9.9.- Interrupción por cambio de estado de uno de los pines más
      significativos del puerto B (RB4-RB7). . . . . . . . . . . . . . . . . . . . . . . . . . . . .186

      9.10.- Proyecto #27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187


Capitulo X. Memoria Serial I2C.
      10.1.- ¿Qué es el bus I2C?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190

      10.2.- Proyecto #28. Implementación de las instrucciones I2Cwrite, I2Cread . . 192




                                                       iv
10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196

      10.4.- Proyecto #30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198



Capitulo XI. Conversor A/D en el PIC16F877.
      11.1.- Conversor A/D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202

      11.2.- El registro ADCON0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209

      11.3.- El registro ADCON1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210

      11.4.- Proyecto #31. Implementación de la instrucción ADCin. . . . . . . . . . 214


Capitulo XII. Comunicación Serial. Transmisión y Recepción de Datos.

      12.1.- Comunicación Serial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

      12.2.- Instrucción SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

      12.3.- Proyecto #32. Implementación de la instrucción SerIn. . . . . . . . . . . 221

      12.4.- Instrucción SerOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233

      12.5.- Proyecto #33. Implementación de la instrucción SerOut. . . . . . . . . .233

      12.6.- Proyecto #34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240


Capitulo XIII. Servomotor.
      13.1.- ¿Qué es un Servomotor?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268

      13.2.- Proyecto #35. Implementación de la instrucción PauseUs. . . . . . . . .272

      13.3.- Proyecto #36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276

      13.4.- Proyecto #37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280

      13.5.- Proyecto #38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283



                                                       v
Capitulo XIV. Módulos RF para comunicaciones.
      14.1.- Módulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293

      14.2.- Proyecto #39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296

      14.3.- Proyecto #40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300

      14.4.- Proyecto #41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305


Capitulo XV. Instrucciones de programa de PicBasic.

      @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

      ADCin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

      Asm… EndAsm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311

      Branch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312

      Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

      Call. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

      Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315

      ClearWDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316

      Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

      Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

      DTMFout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

      EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

      End. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

      FreqOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

      For… Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323

      Gosub. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324



                                                           vi
Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324

High. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324

I2Cread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

I2Cwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326

IF-Then-Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328

LCDin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329

LCDout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330

Low. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331

NAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333

PauseUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333

Pot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

PulsIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

PulsOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337

Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340

Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340

SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342



                                                    vii
SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343

           Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344

           Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344

           Toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345

           While-Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

           Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347


Apéndice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348

Apéndice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358

Apéndice C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362




                                                              viii
Prólogo




Emprender el estudio de microcontroladores para el desarrollo de proyectos
electrónicos que sean la base para nuevas ideas es el objetivo primordial de
esta primera edición, en la cual nos hemos concentrado en dar al lector
algunas herramientas fundamentales con las cuales esperamos abrir un
campo de conocimiento en la electrónica de control, a través de un sin
numero de posibilidades de diseño a partir de una serie de ejemplos prácticos
desarrollados en lenguaje Basic para Microcontroladores PIC.

De toda la gama de posibilidades entre las familias de microcontroladores PIC
que ofrece Microchip Inc., hemos elegido para empezar el microcontrolador
más popular de toda la serie, el PIC16F84, que será utilizado en este libro
para estudiar algunas de sus características a través del desarrollo de
actividades que en principio no requieren un nivel de conocimiento elevado y
a través del cual daremos los pasos necesarios para adentrarnos en las
gamas mas altas, de las que se ha seleccionado el microcontrolador
PIC16F877 para la realización de proyectos electrónicos de nivel medio y
avanzado, y en los que podremos manejar dispositivos periféricos que le dan
un gran valor agregado a cada uno de nuestros proyectos y abren
posibilidades de desarrollo muy interesantes al lector.

Además, hemos considerado proporcionar la información adecuada referente
a las herramientas de desarrollo más importantes en la actualidad, para
programación en lenguaje Basic para microcontroladores PIC. En esta
ocasión iniciamos con el estudio del compilador PicBasic Pro, de la empresa
microEngineering Labs, Inc., la cual ofrece una de las herramientas mas
populares en el área, debido a que cuenta con una gran variedad de
instrucciones que hacen de la programación de microcontroladores una tarea
fácil y muy productiva a la hora de desarrollar proyectos que involucren
periféricos como      pantallas LCD, teclados matriciales, sensores de
temperatura, presión, gas, humedad, memorias de datos entre otros, y donde
una de las características más relevantes es el considerable ahorro de
tiempo, lo que se traduce en efectividad y menos líneas de programa, de tal
manera que el diseñador puede prestar mayor atención a los detalles,
logrando así perfeccionar su desempeño en cualquiera de las funciones que
desee programar.

Otra de las herramientas que hemos decidido incorporar a la obra, es el
programador de microcontroladores PIC P16Pro/PicAll, de la página oficial de
PicallW, de Boban Dobaj, Diseñador. Este programador soporta una gran
cantidad de modelos de las series 12, 16 y 18 de Microchip. Su construcción
es sumamente sencilla y de muy bajo costo, además de una serie de ventajas
entre las cuales podemos mencionar la alta velocidad de transferencia de
datos hacia el dispositivo al momento de ser grabado.

Cada capítulo contiene teoría sobre la cual se pretende estudiar el
funcionamiento de los microcontroladores y periféricos conectados a él. Para
ello hemos desarrollado una serie de prácticas en las que el lector deberá
hacer montajes de circuitos en base a los diagramas esquemáticos siguiendo
las instrucciones y leyendo detenidamente los comentarios de cada línea de
programa.

Esperamos con esto proporcionar al lector una base sólida de conocimientos
para el desarrollo de proyectos electrónicos, proyectos de robótica y todo
aquello que represente una innovación científica en este campo.

Finalmente, el agradecimiento para todos nuestros colaboradores en la
edición de esta publicación, quienes se han encargado de revisar cada
detalle, proyectos e ideas plasmadas en cada capitulo.

Ingeniero en Información, Maria del Carmen Lara T.
Ingeniero en Electrónica, Jesús Frank Phorlakis.
Técnico Superior en Electricidad, Raúl Mastropasqua.




                                     2
Herramientas de Diseño                                               Capitulo I



En la elaboración de proyectos electrónicos con microcontroladores PIC,
resulta muy importante considerar una serie de herramientas, las cuales
vamos a describir a continuación:


Software: para la programación en Lenguaje Basic, contamos con una gran
variedad de posibilidades en el mercado, y entre las cuales hemos elegido
para esta primera edición, el Ambiente Integrado de Desarrollo Microcode
Studio (IDE) de microEngineering Labs, Inc., además del compilador Basic,
PICBasic Compiler, o PICBasic Pro Compiler. Con estas dos herramientas
estaremos realizando la programación en cada uno de los proyectos
propuestos a partir del capítulo V.




                                      Figura 1.1.

                     (Fuente: http://www.microengineeringlabs.com)




                                          3
•   Programador de Microcontroladores PIC: es una herramienta
    indispensable con la cual podemos grabar el código generado por el
    compilador PicBasic para poner en funcionamiento cada uno de los
    proyectos propuestos en cada capítulo. Existen en internet una gran
    cantidad de modelos de programadores para microcontroladores PIC,
    de muy bajo costo y fácil construcción. Consideramos una buena
    experiencia realizar el montaje de cualquiera de estos diseños, aunque
    en esta oportunidad nuestra recomendación es el programador
    P16Pro/Picallw. Los detalles para la construcción de este programador
    están contenidos en el apéndice A.




                                Figura 1.2.




                                    4
•   Placa de prototipos: proporciona al diseñador conexiones sin
    soldaduras, con lo cual se hace más práctico el desarrollo de los
    proyectos electrónicos propuestos a lo largo de cada capítulo.




                                Figura 1.3.


•   Multímetro digital: este instrumento de medición será muy útil durante
    la elaboración de los circuitos propuetos en cada capítulo.




                                Figura 1.4.



                                    5
•   Fuente de poder regulada con salida de voltaje variable. En el capítulo
    III se propone la construcción de una fuente de poder regulada a 5 Vdc
    y 3.3 Vdc.




                                 Figura 1.5.




•   Herramientas de corte, extractor de circuitos integrados, cable rígido
    para conexiones en la placa de prototipos.




                                 Figura 1.6.




                                     6
•   Osciloscopio: este instrumento se requiere para el desarrollo de
    algunas prácticas en las cuales se hace necesario medir las señales
    generadas desde el microcontrolador.




                                Figura 1.7.


•   Componentes electrónicos: microcontroladores PIC en los modelos
    definidos en cada ejemplo práctico, resistencias, diodos, servomotores,
    condensadores, cristales y otros componentes de fácil adquisición.
    Cada proyecto cuenta con una tabla en la cual se decriben los
    componentes electrónicos que deberán ser utilizados en el cada
    montaje.




                                  Figura 1.7.



                                    7
Microcode Studio                                                     Capitulo II




Microcode Studio (IDE), es un Ambiente Integrado de Desarrollo de
MECANIQUE, diseñado especialmente para microEngineering Labs, Inc.,
de      libre   adquisición    a    través de  la  página     Web
http://www.microengineeringlabs.com




                                      Figura 2.1.

                     (Fuente: http://www.microengineeringlabs.com)




Descargar este programa es muy sencillo y esto lo podemos hacer
ingresando a la siguiente dirección:

        http://www.microengineeringlabs.com/resources/win_ide.htm

En esta página se puede encontrar una sección destinada para la descarga
del archivo instalador, como se observa en la figura 2.2:




                                          8
Figura 2.2.

                     (Fuente: http://www.microengineeringlabs.com)


Además de esta herramienta, es necesario adquirir el compilador PicBasic,
(Figura 2.3).  Se puede acceder directamente a la página de productos de
microEngineering Labs a través de la dirección:

                http://www.melabs.com/products/index.htm




                                      Figura 2.3.

                     (Fuente: http://www.microengineeringlabs.com)


Es posible descargar una versión DEMO del compilador PIC Basic, con la
cual se pueden compilar programas con un máximo de 31 líneas de código, a
través de la dirección: http://www.melabs.com/pbpdemo.htm




                                          9
Haga clic en el Link aquí
                                                          señalado, para descargar la
                                                          versión Demo de PicBasic.
                                                          Pro




                                           Figura 2.4.
                                (Fuente: http://www.melabs.com)


Para empezar la descarga del archivo de instalación del compilador, solo hay
que hacer clic en el link señalado en la figura 2.4, e indicar la ruta en la cual
se desea que el archivo de instalación sea almacenado.

Nota Importante: Es necesario adquirir una de las versiones completas del
compilador Basic, para no tener límites en la cantidad de líneas del programa
a compilar.

En la figura 2.5 se puede observar el archivo descargado para la versión
disponible del software Microcode Studio, y en la figura 2.6 se puede observar
el archivo del compilador PicBasic Pro en su versión de prueba.




                  Figura 2.5.                                     Figura 2.6.




                                             10
El proceso de instalación es muy sencillo. El primer paso será ejecutar el
archivo mcsinstall.exe, el cual es el responsable de iniciar el proceso de
instalación de Microcode Studio:




                                 Figura 2.7.


Seguidamente Microcode Studio le da la bienvenida en la ventana que se
muestra a continuación:




                                 Figura 2.8.



                                    11
Haga clic en el botón “Next” y podrá ver en la siguiente ventana el acuerdo de
licencia para Microcode Studio:




                                   Figura 2.9.


La ruta por defecto para la instalación de Microcode Studio es C:Archivos de
programaMecaniqueMCS. Esta ruta puede ser cambiada haciendo clic en el
botón “Browse”, a través del cual se podrá ubicar la nueva carpeta en la cual
deberá ser instalado el software:




                                   Nombre de la carpeta en la cual se
                                   encontrará el archivo ejecutable de
                                   Microcode Studio.




                                   Figura 2.10.




                                       12
Pulse “Next” para iniciar la copia de archivos (figura 2.11), y finalmente espere
que se complete la instalación (figura 2.12).




                                    Figura 2.11.




                                    Figura 2.12.




                                        13
Una vez instalado Microcode Studio, es importante tomar en cuenta que antes
de iniciar este software, es necesario instalar el compilador Basic, el cual es
indispensable para la generación del código que será cargado en el
microcontrolador PIC.

Instalación del compilador PicBasic Pro:

Para dar inicio a la instalación del compilador Pic Basic, será necesario
ejecutar el archivo denominado “pbpdemo.exe” para el caso de la versión de
demostración. La figura 2.13 muestra la ventana de inicio del proceso de
instalación, en la cual se da la bienvenida al usuario y le invita a cerrar
cualquier otra aplicación que se encuentre en uso en ese momento.




                                   Figura 2.13.


En la siguiente ventana se debe especificar la unidad de disco duro en la cual
se instalará el compilador y el nombre de la carpeta que va a contener los
archivos a ser instalados. El software de instalación del compilador establece
por defecto la ruta indicada en la figura 2.14.



                                       14
Figura 2.14.




Seguidamente se debe especificar el nombre de la carpeta que va a contener
los accesos directos a los archivos que ofrecen información adicional acerca
del compilador PicBasic. Este paso puede ser omitido seleccionando la opción
“Don’t create a Start Menu Folder”:




                                  Figura 2.15.




                                      15
Una vez seleccionadas las rutas de instalación del compilador, se debe hacer
clic en el botón “Install” (figura 2.16), para dar inicio a la copia de archivos.




                                    Figura 2.16.




                                    Figura 2.17.




                                        16
Figura 2.18.


Finalmente se puede ver en la ventana de la figura 2.18, un mensaje en el
cual se confirma que el compilador PICBasic Pro ha sido instalado
satisfactoriamente. Deshabilite la opción “Install Microcode Studio IDE” y
seguidamente haga clic en el botón “Finish”.

Nota: Puede descargar la documentación completa del compilador PicBasic a
través de la dirección: http://www.melabs.com/support/index.htm




                                     17
Integración de Microcode Studio y Pic Basic Pro:

Es importante integrar Microcode Studio con el compilador PicBasic Pro,
indicando la ruta en la cual se encuentra instalado. Para esto debemos iniciar
el software y seguir las siguientes instrucciones:

   1. Desde el menú de Inicio de Windows ejecute “Microcode Studio”.




                                  Figura 2.19.


   2. Haga clic en el menú “View” y seleccione la opción “Compile and
      Program Options”.




                                  Figura 2.20.




                                      18
3. En la pestaña “Compiler” haga clic en el botón “Find Automatically”
   para una ubicación automática del compilador, o si lo prefiere haga clic
   en “Find Manually” para ubicar el compilador manualmente.




                               Figura 2.21.


4. En la pestaña “Programmer” se pide la ubicación del software del
   programador     que  estaremos   utilizando  para   grabar   los
   microcontroladores.




                               Figura 2.22.




                                   19
Se debe ubicar en la lista el programador “PICALL Programmer”, haciendo
clic en el botón denominado “Add New Programmer” (Figura 2.22), y
seguidamente se debe seleccionar de la lista de opciones, como se puede
observar en la figura 2.23:




                                   Figura 2.23.



Por último, al hacer clic en el botón “Next”, el software realizará la búsqueda
automática de la carpeta que contiene el archivo ejecutable del programador
Picall, el cual ha debido ser instalado según el procedimiento descrito en el
Apéndice A.




                                       20
Microcontroladores PIC                                         Capitulo III


3.1. Que es un PIC?

Los PIC son una familia de microcontroladores desarrollados y fabricados por
la empresa Microchip Technologies Inc., los cuales cuentan con una
tecnología tipo RISC (Reduced Instruction Set Computer) y poseen en su
arquitectura interna características especiales que varían según el modelo de
PIC que deseamos utilizar.

Podríamos decir que estos dispositivos se asemejan a una computadora pero
de tamaño muy reducido, ya que cuentan con casi los mismos recursos que
éstas, es decir, poseen memoria de programa, memoria RAM, memoria de
datos, puertos de entrada o salida, temporizadores y en algunos casos
cuentan con recursos adicionales como convertidores A/D, comparadores,
USART       (Universal Synchronous/Asynchronous Receiver/Transmitter),
comunicación serie I2C, entre otros.

Con todas estas características es lógico pensar que este dispositivo pasa a
ser el corazón del circuito a ser controlado. Esto significa que el
microcontrolador es el encargado de dirigir todos los procesos de un circuito
electrónico, en base a las instrucciones de programa o rutinas que definen
funciones específicas de control, donde las mismas serán realizadas en
lenguaje Basic para microcontroladores PIC. Es por esta razón que
consideramos muy importante estudiar la arquitectura interna del
microcontrolador que se desea programar y aunque esta tarea pueda parecer
difícil, el Lenguaje Basic para microcontroladores PIC la hace sumamente
sencilla.

El diseño de programas para microcontroladores PIC va acompañado
normalmente con un previo estudio del diseño del hardware que hará que
nuestros proyectos se pongan en marcha. Es decir, resulta absolutamente
necesario saber cual será la función específica de cada pin; por ejemplo, en el
caso de los puertos I/O (IN/OUT) a ser utilizados en el microcontrolador, es
importante definir sus funciones antes de empezar a programar, ya que éstos
pueden ser configurados a conveniencia como entrada o como salida de
datos de forma independiente. También podemos destinar un puerto completo

                                      21
del microcontrolador para el control de dispositivos periféricos como pantallas
LCD, teclados, motores paso a paso, leds, servomotores entre otros. De ahí la
importancia de establecer cual será la función de cada puerto del
microcontrolador PIC elegido para nuestros proyectos.

Otra decisión importante será elegir convenientemente el modelo de
microcontrolador a ser utilizado, ya que hay una gran gama de modelos que
pueden ser adaptados a necesidades específicas de diseño.




                                   Figura 3.1.


Los microcontroladores PIC comúnmente más utilizados son los siguientes:

      •   PIC12C508 y PIC12C509, tienen memoria de programa EPROM,
          oscilador interno, y son muy utilizados en diseños de pequeños
          circuitos.

      •   PIC16F84A, tiene memoria de programa tipo FLASH, oscilador
          externo, 13 pines I/O entre otras características que estaremos
          estudiando a lo largo del contenido de esta obra. Este PIC ha
          resultado ser uno de los más populares de toda la serie.

      •   PIC16F87X, incluyen un gran número de mejoras en comparación
          con el PIC16F84, debido principalmente a que cuentan con un
          numero de pines I/O superior a éste, además de otras
          características relevantes. Por ejemplo, con esta serie de
          microcontroladores contamos con una mayor capacidad en cuanto
          a memoria de programa y memoria de datos.




                                      22
•   PIC18F4XX, estos microcontroladores resultan muy útiles cuando
           deseamos diseñar proyectos más avanzados.

Cada uno de estos microcontroladores cuenta con una completa hoja de
datos que puede ser descargada de la página oficial de Microchip:

                         http://www.microchip.com

Estas características influyen directamente al momento de decidir que modelo
de microcontrolador PIC deseamos utilizar en nuestros proyectos, según sea
el objetivo de diseño del circuito que deseamos realizar.

El microcontrolador PIC16F84 es uno de los microcontroladores más
populares y en algunos casos, el preferido por estudiantes para dar inicio al
estudio de la programación de microcontroladores, seguido del PIC16F877 el
cual posee más recursos importantes que estaremos estudiando a
continuación.

Antes de empezar a revisar todo lo referente a la programación de
microcontroladores PIC, consideramos importante recordar algunas de las
características de éstos dispositivos, para tener una base de conocimientos
básicos para poder realizar un programa de control de un diseño
completamente personalizado.

Para empezar,     veamos    algunas    características   del   microcontrolador
PIC16F84:

   •   Microcontrolador de 8 Bits.
   •   Memoria de programa tipo Flash de 1024 palabras de 14 bits.
   •   Memoria RAM de 68 bytes.
   •   Memoria EEPROM de datos de 64 bytes.
   •   Velocidad de operación de hasta 20 Mhz.
   •   Cuatro fuentes de interrupción.
   •   Posee 13 pines I/O (pines de entrada o salida).




                                      23
Diagrama de pines del PIC16F84:




                                       Figura 3.2.



     PIN   Identificación                      Descripción del Pin
      1         RA2         Pin de Entrada/Salida (I/O) del puerto A
      2         RA3         Pin de Entrada/Salida (I/O) del puerto A
      3      RA4/TOCKI      Pin de Entrada/Salida (I/O) del puerto A
      4        MCLR         Reset y entrada de voltaje de programación.
      5         Vss         Pin de Alimentación a Tierra (GND)
      6       RB0/INT       Pin de Entrada/Salida (I/O) del puerto B
      7         RB1         Pin de Entrada/Salida (I/O) del puerto B
      8         RB2         Pin de Entrada/Salida (I/O) del puerto B
      9         RB3         Pin de Entrada/Salida (I/O) del puerto B
     10         RB4         Pin de Entrada/Salida (I/O) del puerto B
     11         RB5         Pin de Entrada/Salida (I/O) del puerto B
     12         RB6         Pin de Entrada/Salida (I/O) del puerto B
     13         RB7         Pin de Entrada/Salida (I/O) del puerto B
     14         Vdd         Pin de Alimentación de 5Vdc
     15    OCS2/CLKOUT      Salida del oscilador a cristal.
     16     OSC1/CLKIN      Entrada del oscilador a cristal o fuente externa de reloj.
     17         RA0         Pin de Entrada/Salida (I/O) del puerto A
     18         RA1         Pin de Entrada/Salida (I/O) del puerto A

                                        Tabla 3.1




                                          24
El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cual
consta de cinco pines I/O y el puerto B, el cual consta de ocho pines I/O como
se puede observar en la figura 3.3:




                                   Figura 3.3.


En total se cuenta con trece pines I/O, los cuales pueden ser programados
como entrada o salida según convenga al momento de diseñar un circuito de
control.

Los pines correspondientes al oscilador (OSC1 y OSC2) y al reset (MCLR)
deben ser siempre tomados en cuenta en el diseño de nuestros proyectos. Es
por este motivo que damos inicio al estudio de algunos circuitos
indispensables para el correcto funcionamiento del microcontrolador PIC.

3.2. El Oscilador Externo.

Es un circuito indispensable para el funcionamiento del microcontrolador y el
cual además, define la velocidad a la cual va a trabajar. Para hacer funcionar
nuestro diseño podemos elegir entre las siguientes cuatro opciones:

   •   Oscilador LP: Oscilador de bajo consumo (Low Power).
   •   Oscilador XT: Cristal / Resonador.


                                      25
•   Oscilador HS: Oscilador de alta velocidad (High Speed).
   •   Oscilador RC: Resistencia / Condensador.


En los modos de oscilador LP, XT y HS el cristal debe ser conectado a los
pines 15 y 16, Osc2/CLKout y Osc1/CLKin respectivamente, como se muestra
en la figura 3.4.




                                   Figura 3.4.


Los valores de los condensadores cerámicos vienen dados según la tabla que
se muestra a continuación:


                Modo      Frecuencia    Osc1/CLKin    Osc2/CLKout
                            32 kHz      68 - 100 pF    68 - 100 pF
                  LP
                           200 kHz       15 - 33 pF    15 - 33 pF
                            2 MHz        15 - 33 pF    15 - 33 pF
                  XT
                            4 MHz        15 - 33 pF    15 - 33 pF
                            4 MHz        15 - 33 pF    15 - 33 pF
                  HS
                            10 MHz       15 - 33 pF    15 - 33 pF
                                   Tabla 3.2




                                       26
Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzo
como el de la figura 3.5.




                                  Figura 3.5.


Al conectar el microcontrolador a la fuente de alimentación de 5 Vdc y medir
la señal de salida del oscilador XT con un osciloscopio, en el pin 15
(Osc2/CLKout) del microcontrolador, podremos ver la onda generada bajo los
siguientes parámetros de medición seleccionados en el equipo:

   •   Voltios/Div: 200mV
   •   Time/Div: 100ns




                                  Figura 3.6.



                                     27
La lectura de la frecuencia y período en este caso sería la siguiente:

   •   Frecuencia: 3,972 Mhz
   •   Período: 251,71 ns


Cristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de los
cuales solo tres están implementados de la siguiente manera:




                                    Figura 3.7.




             Pin 1: NC (Este pin no se encuentra conectado internamente)
             Pin 7: GND
             Pin 8: Salida TTL
             Pin 14: +5Vdc


En su salida se obtiene un tren de pulsos como se puede observar en la figura
3.8, bajo los siguientes parámetros de medición seleccionados en un
osciloscopio:

   •   Voltios/Div: 2V
   •   Time/Div: 100ns




                                       28
Figura 3.8.


La lectura de la frecuencia y período en este caso sería la siguiente:

   •   Frecuencia: 3,999 Mhz
   •   Período: 250,013 ns


El oscilador externo en modo RC resulta ser el más sencillo de todos y por
ende el más económico. Su configuración lo hace menos preciso debido a
que existe una tolerancia de error en sus componentes, sin olvidar también
que la temperatura puede afectar la operación de este tipo de oscilador.

Los valores recomendados para este oscilador son los siguientes:

   •   5 Kohm ≤ R1 ≤ 100 Kohm
   •   C1 > 20 pF




                                       29
Figura 3.9.




3.3. Circuito de Reset: El Pin denominado MCLR (Master Clear), siempre
debe ser tomado en cuenta cuando se diseña un circuito con
microcontroladores PIC. A través de este Pin se podrá reiniciar el dispositivo,
si a éste se le aplica un nivel lógico bajo (0V), por lo tanto resulta importante
destacar que para que un programa cargado en un microcontrolador se
mantenga en ejecución, el Pin MCLR debe estar siempre en un nivel lógico
alto (5V).

Si deseamos tener control externo del reset de un microcontrolador PIC,
debemos considerar el circuito de la figura 3.10:




                                       30
Figura 3.10.


Este circuito permite reiniciar el microcontrolador cada vez que el pulsador P1
es presionado.


3.4. Consideraciones técnicas de diseño:

A continuación veremos algunos circuitos básicos que deben ser tomados en
cuenta para el desarrollo de prácticas con microcontroladores PIC. Estos
circuitos son muy útiles cuando deseamos visualizar el resultado de una
acción programada en el microcontrolador.

3.4.1. Estado Lógico de un pin I/O:

Una manera muy sencilla de ver el estado lógico de un pin configurado como
salida en cualquiera de los puertos de microcontrolador es a través del uso de
LEDs, como se observa en los circuitos de la figura 3.11.


                                       31
En el primer circuito, el LED se iluminará solo cuando el estado lógico del pin
de salida del puerto sea igual a “1”, es decir, 5 voltios.

En el segundo circuito, el LED se iluminará solo cuando el estado lógico de la
salida del puerto sea igual a “0”, es decir, 0 voltios.




                                   Figura 3.11.


Esto significa que si deseamos realizar un programa en Lenguaje Basic
encargado de cambiar el estado lógico de un pin específico, en cualquiera de
los puertos de un microcontrolador, una forma “básica” de visualizar este
cambio es a través del uso de LEDs.



                                       32
3.4.2. Lectura de un estado lógico en un pin I/O:

El microcontrolador también nos permite capturar datos o señales externas
para luego ser procesadas y convertidas en respuestas que pueden definir
una acción específica en nuestros circuitos de prueba. Un ejemplo común
podría ser el uso de un pulsador para hacer destellar un led cada vez que
éste sea presionado.

Si deseamos introducir un nivel lógico bajo (0V), o alto (5V), a una de las
entradas de un microcontrolador a través de un pulsador, podríamos
considerar los circuitos de la figura 3.12, los cuales nos proporcionan dos
formas diferentes de hacerlo:




                                 Figura 3.12.




                                     33
El primer circuito en la figura 3.12 mantiene un nivel lógico alto (5V) mientras
el pulsador permanece abierto. Al presionar el pulsador, el nivel lógico en el
pin I/O del puerto pasa a ser bajo (0V).

El segundo circuito de la figura 3.12 mantiene un nivel lógico bajo (0V)
mientras el pulsador permanece abierto. Al presionar el pulsador, el nivel
lógico en el pin I/O del puerto pasa a ser alto (5V).


3.4.3. El Opto-acoplador:

El opto-acoplador es un componente muy útil cuando se requiere acoplar
circuitos electrónicos digitales con etapas de manejo de potencia o con otros
circuitos.

Este componente en una de sus versiones, se compone básicamente de un
diodo LED el cual se encarga de iluminar un fototransistor, para que éste
conduzca corriente a través del colector.




                                   Figura 3.13.




                                       34
En la configuración de la figura 3.13, cuando en el pin I/O aplicamos un 1
lógico (5V), el LED del opto-acoplador enciende y el fototransistor conduce la
corriente a tierra; por lo tanto, en la salida tendremos un 0 lógico (0V).

Si apagamos el LED, el transistor no conduce, de tal manera que en la salida
tendremos un 1 lógico (5V).

En la configuración de la figura 3.14, cuando en el pin I/O aplicamos un 1
lógico (5V), el LED del opto-acoplador enciende y el fototransistor conduce
para poner en la salida un 1 lógico (5V). Mientras haya un 0 lógico en la
entrada, el fototransistor permanecerá abierto entre el emisor y colector,
dando como resultado un 0 lógico (0V) en la salida.




                                  Figura 3.14.


Una configuración muy común para el control de dispositivos de potencia
como motores eléctricos, luces incandescentes, solenoides, etc., se puede ver
en la figura 3.15, la cual se basa en cualquiera de los dos circuitos antes
mencionados (figura 3.13 y figura 3.14), en la cual se ha incluido un relé a


                                      35
través del cual circulará la corriente necesaria entre sus contactos, para hacer
funcionar cualquiera de estos dispositivos de potencia.




                                   Figura 3.15.




                                       36
3.4.4. Fuente de poder, 5Vdc / 3.3Vdc:


En caso de no disponer de una fuente de poder regulada, proponemos la
construccion de un diseño sencillo que podemos implementar en todos los
proyectos propuestos. En la figura 3.16 se puede observar el diseño de una
fuente regulada con salidas de voltaje de +5 Vdc y +3.3 Vdc:




                                 Figura 3.16.




                                     37
Estructura de un programa.
Componentes y operadores en PicBasic.                         Capitulo IV


4.1.- Estructura de un programa: Para que nuestros programas tengan una
apariencia ordenada y se facilite la comprensión del mismo ante otros
programadores que deseen realizar mejoras a éste, es necesario establecer
una estructura que nos permita identificar fácilmente cada una de las partes
que lo componen.




                                                     A




                       B      C                  D
                                  Figura 4.1.


En la figura 4.1 se puede observar la estructura básica de un programa hecho
en Microcode Studio, y en la cual hemos identificado las cuatro secciones que
consideramos más importantes para lograr un programa bien estructurado.



                                     38
Sección A: Corresponde al encabezado del programa, en el cual se debe
considerar información básica del mismo, como el nombre, la identificación
de autor, Copyright, fecha de elaboración o fecha de los últimos cambios
realizados, versión del programa que se está realizando, e incluso una breve
descripción acerca del objetivo del programa y su aplicación en un
determinado circuito electrónico.

Es importante resaltar que cada línea del encabezado debe empezar con una
comilla simple, en forma de comentario (ver “Sección D”).

Sección B: Esta sección empieza en la columna cero del editor de texto de
Microcode Studio, y en ella se pueden declarar las definiciones (concepto que
estudiaremos mas adelante) y las etiquetas de cada una de las subrutinas
que serán programadas.

Las etiquetas identifican puntos específicos o subrutinas dentro de un
programa. Son definidas por el programador y deben tener al final de cada
una de ellas el símbolo de “dos puntos”, que definen el final de la misma.

Sección C: Estará destinada para las instrucciones de programa y la misma
está separada de la columna cero del editor de texto por una tabulación, es
decir, cuando el cursor se encuentra en la columna cero, presionamos una
vez la tecla “TAB”, y de esta manera establecemos un espacio mínimo,
siempre igual o superior entre la sección B y C.

Sección D: Esta destinada para realizar comentarios acerca de la función que
estará cumpliendo una instrucción específica en nuestro programa. Cada
comentario debe empezar siempre con una comilla simple como se muestra a
continuación:

                  ' Define el Oscilador para un Cristal
                  ' de 4 Mhz.

Cuando un comentario es demasiado extenso, podemos continuar el mismo
en la siguiente línea, siempre que la frase comience con su respectiva comilla.




                                      39
Los comentarios ayudan al diseñador a identificar cada línea de programa o
cada una de las funciones de cada subrutina, garantizando así una buena
documentación en cada uno de los programas que realizamos.


4.2.- Subrutinas: Una subrutina se presenta como un algoritmo separado del
algoritmo principal, y estará destinado a resolver una tarea específica. Las
subrutinas pueden ser referidas cada vez que sea necesario, llamando a la
etiqueta que corresponde a ésta, la cual debe ir siempre al inicio de la misma.


Led1:

           For Z = 0 To 9
               LED = Encendido
Etiqueta       Pause 1000
               LED = Apagado
                                     Subrutina
               Pause 1000
           Next Z
           GoTo Inicio
           End




                                      40
4.3.- Componentes y operadores en PicBasic.

PIC Basic cuenta con una serie de herramientas de programación entre las
cuales podemos mencionar las etiquetas, variables, identificadores,
constantes, comentarios, símbolos entre otras.

Algunas de estas herramientas son de uso obligatorio a la hora de realizar un
programa, y otras que no son de uso obligatorio, nos facilitarán el trabajo
considerablemente.


4.3.1.- Define: La directiva “Define” resulta muy importante en la
programación de microcontroladores con PicBasic, ya que establece una
serie de parámetros que de no ser tomados en cuenta, causará que nuestros
programas sencillamente no funcionen en la mayoría de los casos.

Esta serie de parámetros están directamente relacionados con dispositivos
externos al microcontrolador. Por ejemplo, si deseamos utilizar un oscilador
de diferente frecuencia al valor establecido por defecto (4 Mhz), será
conveniente entonces definir la velocidad del mismo utilizando la directiva:

                          Define Osc {frecuencia}

De igual forma deben ser considerados estos parámetros para el uso de
dispositivos como pantallas LCD, donde se deberán definir los puertos de
conexión para el bus de datos y bus de control. Así mismo ocurre para el caso
de las comunicaciones seriales o I2C, donde los parámetros también deben
ser definidos. Veamos a continuación la tabla de parámetros para el uso de la
instrucción Define.




                                     41
Parámetro                           Descripción

      OSC {frecuencia}          Frecuencia del Oscilador en Mhz

      LCD_DREG {puerto}         Puerto de datos LCD
      LCD_DBIT {bit}            Bit inicial del puerto de datos
      LCD_RSREG {puerto}        Puerto para RS (Register Select)
      LCD_RSBIT {bit}           Pin del Puerto para RS
      LCD_EREG {puerto}         Puerto para E (Enable)
      LCD_EBIT {bit}            Pin del Puerto para E
      LCD_RWREG {puerto}        Puerto para RW (Read/Write)
      LCD_RWBIT {pin}           Pin del puerto para RW

      LCD_LINES {líneas}        Número de líneas de la LCD (1,2 o 4)

      I2C_SCLOUT 1              Interface de Reloj I2C Bipolar
                                Cuando en la transferencia es utilizado un
      I2C_SLOW 1
                                oscilador mas lento que 8 Mhz.
                                    Tabla 4.1.


4.3.2.- Variables: En las variables podemos almacenar datos temporalmente,
los cuales podrán ser consultados o modificados cada vez que sea necesario.
Regularmente la definición de variables se hace al inicio del programa y para
ello se utiliza la palabra VAR seguida por el tipo de variable según la tabla
que mostramos a continuación:


     Nombre de                Tipo de
                     VAR                                 Descripción
     la Variable              Variable
          A1            Var      Bit      Toma los valores 0 y 1 unicamente
        Temp            Var     Byte      Toma valores entre 0 y 255 (8 bits)
         dig1           Var    Word       Toma valores entre 0 y 65535 (16 bits)

                                    Tabla 4.2.




El nombre de la variable es elegido por el programador y el tipo de variable se
define según el tipo de dato que se desea almacenar temporalmente.


                                         42
4.3.3.- Arrays: Las variables Arrays tienen un determinado número de
“elementos”, definido según el tamaño de la variable. Las variables Arrays tipo
Bit, pueden almacenar 256 elementos; las variables Arrays tipo Byte pueden
almacenar hasta 96 elementos y las variables Arrays tipo Word hasta 48
elementos, los cuales a su vez pueden ser accesados en cualquiera de los
tres casos a través de un índice. Este índice se específica entre corchetes
como se muestra en los siguientes ejemplos:

Para declarar una variable Array utilizamos el siguiente formato:

      Dato Var Byte[7]

El primer elemento de esta variable es Dato[0] y el último elemento es
Dato[7], lo cual significa que hemos declarado una variable array de 8
elementos. En este caso podemos almacenar un byte en cada elemento,
siempre especificando el índice.

Ejemplo: Almacenar en cada elemento de la variable “Dato” los valores 200,
15, 56, 75, 80, 20, 33, 45.

      Dato[0] = 200
      Dato[1] = 15
      Dato[2] = 56
      Dato[3] = 75
      Dato[4] = 80
      Dato[5] = 20
      Dato[6] = 33
      Dato[7] = 45

En algunos casos se debe verificar la hoja de datos del microcontrolador, ya
que la cantidad de elementos que se pueden almacenar en variables arrays
tipo Byte o Word puede variar según el modelo del mismo.




                                      43
4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestro
programa, facilitando aún más la comprensión del mismo a la hora de verificar
su funcionamiento. En la tabla 4.3 se puede observar la forma de declarar una
constante.

                      Nombre de la                 Valor de la
                                        CON
                       Constante                   Constante
                       Temp_Max         CON           150
                       Temp_Min         CON            55

                                     Tabla 4.3.


4.3.5.- Símbolos o Alias: Proveen un nombre único y específico a elementos
o variables dentro de nuestro programa. Para definir un símbolo, utilizamos la
palabra “Symbol”, seguida del alias del elemento, el símbolo de igualdad “=”, y
por último el elemento en cuestión:

                      Symbol     {alias}     =    {elemento}

Por ejemplo, si deseamos controlar un motor DC a través de uno de los pines
del puerto A de un microcontrolador, resultaría mucho mas sencillo referirse a
este pin como “Motor”, en vez de referirse a él como “PortA.0”.

Entonces,

      Symbol    Motor = PORTA.0

Veamos otros ejemplos:

      Symbol    Relay = PORTB.0

      Symbol    Sensor = PORTA.0

      Symbol    LED    = PORTA.1

      Symbol    RC0    = PORTC.0




                                        44
4.3.6.- Operadores Aritméticos: Entre los operadores aritméticos más
utilizados tenemos los que se muestran en la siguiente tabla:

      Operador            Descripción                   Operador           Descripción
         +       Suma                                     ABS      Valor Absoluto
          -      Resta                                    SIN      Seno del Angulo
          *      Multiplicación                           COS      Coseno del Angulo
           /     División                                 MIN      Minimo de un número
          //     Residuo                                  MAX      Máximo de un número
         <<      Desplaza a la Izquierda                  REV      Invertir un Bit
                                                                   Valor de un digito para un
         >>      Desplaza a la Derecha                    DIG
                                                                   número decimal
            =    Asignación de Valores

                                           Tabla 4.4.


4.3.7.- Operadores Binarios: En la siguiente tabla veremos los operadores
binarios proporcionados para el Lenguaje PicBasic:

                         Operrador              Descripción
                            &                   AND Lógico
                             |                   OR Lógico
                            ^                   XOR Lógico
                             ˜                   NOT Lógico
                             &/                 NAND Lógico
                             |/                 NOR Lógico
                             ^/                 NXOR Lógico

                                           Tabla 4.5.


Con estos operadores resulta muy sencillo realizar operaciones binarias,
como lo demuestra el siguiente ejemplo:

Si aplicamos una AND lógica, donde deseamos filtrar los siete bits más
significativos del valor almacenado en la siguiente variable:

      Var1 = %00101001

Entonces,

      Var1 = Var1 & %00000001


                                              45
El resultado de esta operación es Var1 = %00000001

4.3.8.- Operadores de Comparación: Los operadores de comparación
normalmente son utilizados con la instrucción If…Them… para realizar
comparaciones entre variables o datos extraídos de alguna operación
aritmética.

                        Operador        Descripción
                            =        Igual
                           <>        Diferente
                            <        Menor que
                            >        Mayor que
                           <=        Menor o igual que
                           >=        Mayor o igual que

                                   Tabla 4.6.


4.3.9.- Operadores Lógicos: Los operadores lógicos son utilizados para
establecer condiciones entre variables y son utilizados de la misma manera
que los operadores de comparación.

                        Operador       Descripción
                          AND        AND Lógico
                           OR        OR Lógico
                          XOR        XOR Lógico
                          NOT        NOT Lógico
                        NOT AND      NAND Lógico
                        NOT OR       NOR Lógico
                        NOT XOR      NXOR Lógico

                                   Tabla 4.7.


Ejemplo:

      If Var1 = 1 and Var2 = 3 And Var3 = 5 Then Goto inicio

La condición saltará a la etiqueta “inicio” solo si se cumplen las tres
condiciones.




                                      46
Primeros Programas con el PIC16F84                              Capitulo V



Para aprender a programar un microcontrolador resulta importante dar inicio
al tema con ejemplos prácticos y sencillos, que nos ayuden a comprender el
funcionamiento de la arquitectura del PIC y las instrucciones de programa que
se están empleando.

El primer paso entonces será realizar el montaje del circuito con base en los
conocimientos adquiridos en las páginas anteriores. Se debe tomar en cuenta
que aunque en los diagramas de los circuitos que se muestran a continuación,
no están presentes los pines de alimentación “Vcc” y “Gnd”, éstos deben ser
conectados debidamente a la fuente de alimentación de 5 Voltios.

A medida que se van proponiendo ejemplos de aplicación práctica, estaremos
estudiando la sintaxis de las instrucciones empleadas en cada proyecto para
facilitar la comprensión general de éste, referente a la programación y diseño
electrónico.

5.1.- Proyecto #1: A continuación realice el montaje de la figura 5.1, en base
al cual realizaremos la programación necesaria para encender dos Leds
conectados a los puertos del microcontrolador:




                                   Figura 5.1.



                                      47
Proyecto # 1

                           Componentes               Cantidad

                PIC16F84A                                1
                Cristal de 4 Mhz                         1
                Capacitor cerámico de 33 pF              2
                LED                                      2
                Resistencia de 220 Ohm                   2
                Fuente regulada de 5 Vdc                 1


                                     Tabla 5.1.

   •   El Led 1 se encuentra conectado en el pin RA0 del puerto A, el cual
       deberá ser configurado como “Salida”.

   •   El Led 2 se encuentra conectado en el pin RB0 del puerto B, el cual
       deberá ser configurado igualmente como “Salida”.

Note que el ánodo del diodo LED se encuentra conectado al pin de salida del
puerto, por lo tanto para que encienda el LED debemos hacer salir un 1 lógico
por el pin correspondiente.

Como los pines de los puertos pueden ser configurados como “entradas” o
como “salidas”, es importante tomar en cuenta los registros de configuración
de puertos, los cuales para el caso específico del PIC16F84 son dos:

TrisA (registro de configuración I/O del puerto A), es un registro de 8 bits, de
los cuales los tres más significativos no se encuentran implementados en este
modelo de microcontrolador, ya que como se puede observar en el diagrama
de pines del dispositivo (figura 3.2), el puerto A solo cuenta con 5 pines (RA0,
RA1, RA2, RA3 y RA4).




                                        48
Un ejemplo de configuración de los pines I/O del puerto A es el siguiente:



                                        Registro TrisA
                                                                           Bit menos
                                            1   1    1      1   0
                                            RA4 RA3 RA2 RA1 RA0
                                                                           significativo

                                            Figura 5.2.


1 = Entrada (Al configurar un bit del registro TrisA en “1”, éste se comporta como entrada).

0 = Salida (Al configurar un bit del registro TrisA en “0”, éste se comporta como salida).

Al ver la figura 5.2, se puede observar que el pin RA0 ha sido configurado
como salida y el resto de los pines como entrada.

En PicBasic, este paso se realiza de la siguiente manera:

TrisA = %11110         (“%” para expresar la configuración en Binario), ó:

TrisA = $1E (“$” para expresar la configuración en Hexadecimal)

 “Recordemos entonces que como el Led 1 se encuentra conectado en el pin RA0,
 el bit correspondiente a este pin en el registro TrisA ha sido configurado como
 salida”.



TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B,
ya sea como entrada o como salida, por ejemplo:


                                        Registro TrisB
                               1    1   1   1    1   1      1   0
                                                                             Bit menos
                              RB7 RB6 RB5 RA4 RA3 RA2 RA1 RA0                significativo

                                            Figura 5.3.

1 = Entrada (Al configurar un bit del registro TrisB en “1”, éste se comporta como entrada).

0 = Salida (Al configurar un bit del registro TrisB en “0”, éste se comporta como salida).



                                               49
Para el caso particular del puerto B, se puede observar que el pin RB0 ha sido
configurado como salida y el resto de los pines como entrada.

“Consideramos importante configurar los pines que no estarán en uso como
entrada, ya que de esta forma podemos evitar daños en el hardware interno
del microcontrolador al experimentar con éste en un tablero de pruebas.”

La configuración en PicBasic para el registro TrisB, ajustada al ejemplo de la
figura 5.3 sería entonces la siguiente:

TrisB = %11111110 (si se desea hacer la notación en binario), ó:

TrisB = $FE (si se desea hacer la notación en hexadecimal)

Antes de verificar el programa propuesto para este ejemplo, veremos la
sintaxis de las instrucciones utilizadas en él, para tener una idea clara de la
función que cumple cada instrucción. Esta información puede ser
complementada en el capítulo XV, en el cual encontrará la descripción de
cada una de las instrucciones utilizadas en cada proyecto planteado en esta
edición.


Sintaxis de las Instrucciones empleadas en el programa:


HIGH

Sintaxis:    HIGH pin

La instrucción “High” pone en uno lógico un pin I/O específico.




                                      50
LOW

Sintaxis:    LOW pin

La instrucción “LOW” coloca en cero lógico un pin I/O específico.



GOTO

Sintaxis:    GOTO etiqueta

La instrucción “Goto” continúa la ejecución de un programa a partir de la
etiqueta especificada (Esta instrucción no tiene retorno).



PAUSE

Sintaxis:    PAUSE periodo

La instrucción “Pause” realiza una pausa en el programa por un periodo
definido en milisegundos.



Veamos el programa en PicBasic:

'****************************************
'* Nombre      : Proyecto1.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************

Define Osc 4            ' Define el Oscilador para un Cristal
                        ' de 4 Mhz.


                                     51
TRISA = %11110    ' Configuración el Puerto A
    TRISB = %11111110 ' Configuración el Puerto B

    PORTA = 0           ' Inicializa el puerto "A", es decir,
                        ' se ponen todos los pines en cero.
    PORTB = 0           ' Inicializa el puerto "B".

Inicio:                 ' Etiqueta de Inicio del programa

    High PORTA.0        ' Enciente el Led conectado en el pin RA0
    Pause 1000          ' Hace una pausa de 1000 milisegundos = 1
                        ' Seg.

    Low PORTA.0         ' Apaga el Led conectado en el pin RA0
    Pause 1000          ' Hace una pausa de 1000 milisegundos = 1
                        ' Seg.

    High PORTB.0        ' Enciente el Led conectado en el pin RB0
    Pause 1000          ' Hace una pausa de 1000 milisegundos = 1
                        ' Seg.

    Low PORTB.0         ' Apaga el Led conectado en el pin RB0
    Pause 1000          ' Hace una pausa de 1000 milisegundos = 1
                        ' Seg.

    GoTo Inicio         ' Salta a la etiqueta "Inicio" y se repite el
                        ' proceso.
    End



La instrucción “High” se encarga de poner un nivel lógico alto en el pin
especificado seguidamente. En este caso, primero se escribe el puerto y
seguido de un punto, se especifica el número del pin en el puerto que
deseamos utilizar.

La instrucción “Low” es responsable en este caso de poner el pin
especificado en un nivel lógico bajo. Al igual que en la instrucción “High”, se
debe especificar el puerto y el pin del puerto a ser utilizado.

La instrucción “GoTo” realiza un salto hacia una etiqueta específica; en este
caso el programa salta a la etiqueta “Inicio” para empezar de nuevo todo el
proceso.



                                      52
Al escribir el programa en el editor de texto de Microcode Studio, se debe
grabar el mismo con el nombre de su preferencia para que éste pueda ser
compilado y al mismo tiempo pueda ser enviado al microcontrolador.

Observe que para este           programa,        hemos   designado   el   nombre
“Proyecto1.pbp” (figura 5.4).




                                   Figura 5.4.




Antes de compilar el programa, se debe asegurar de seleccionar el modelo
apropiado de microcontrolador PIC, como se observa en la figura 5.5. Luego
se compila el programa y se verifica que éste no tenga errores.




                                      53
Modelo
            Compilar
                           Compilar y           del uC.
                           Grabar en
                           el PIC

                                  Figura 5.5.

Seguidamente, se debe proceder a cargar el programa compilado en el
microcontrolador con la ayuda del programador de microcontroladores Pic.

Al hacer clic en el icono “Compilar y Grabar en el PIC” (ver figura 5.5), el
compilador habrá generado un archivo de nombre “Ejemplo1.hex” y
seguidamente se abrirá el software “Picall/P16Pro”, como se observa en la
figura 5.6:




                                  Figura 5.6.


En este momento el microcontrolador deberá estar montado en la base del
programador en la posición indicada por la figura 5.6.




                                     54
Antes de programar el microcontrolador, también resulta conveniente verificar
los fusibles de programación, accediendo al botón “Config”, el cual puede ser
visualizado en la figura 5.6.

En esta sección se debe configurar el tipo de oscilador utilizado en nuestro
circuito, así como otras opciones disponibles que comentaremos a
continuación (ver figura 5.7).




                                     Figura 5.7.


En la figura 5.7 se pueden observar tres secciones llamadas “Oscillator”,
“Hardware” y “Protection”:

   •   En la sección “Oscillator”, debemos seleccionar el tipo de oscilador
       utilizado en nuestro circuito electrónico, el cual en este caso es del tipo
       XT, debido a que el cristal que hemos elegido es de 4 Mhz.


   •   En la sección “Hardware” es posible activar el temporizador “Perro
       Guardián”, el cual se encarga de reiniciar el microcontrolador en caso
       de fallas o bloqueos en el programa. Para utilizar el “Watchdog” es
       necesario diseñar el programa bajo ciertos parámetros, de forma que
       podamos reiniciar el temporizador “Watchdog” antes de que éste se
       desborde y provoque un “Reset” en el sistema. Si nuestro programa
       llegara a fallar, el temporizador Watchdog completaría su conteo y se
       desbordaría, provocando un “Reset” del sistema.



                                        55
•   En la sección “Hardware” también disponemos de la opción “Power Up
       Timer”, la cual una vez activada en el microcontrolador, hará que éste
       no pueda iniciar el programa hasta tanto el voltaje aplicado al circuito
       sea estable y seguro (ver figura 5.8).

                           6

                           5


                 Voltios   4


                           3

                           2


                           1


                           0
                               1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61
                                                        Tiempo



                                                    Figura 5.8.

   •   En la sección “Protection”, tenemos la posibilidad de proteger el código
       de programa almacenado en la memoria del microcontrolador.


Finalmente hacemos clic en el botón “Program” (ver figura 5.6), para
descargar el programa “Proyecto1.hex” en el microcontrolador;
inmediatamente se podrá ver el proceso de grabación y verificación de datos,
para luego culminar con el montaje del microcontrolador en el circuito de
prueba.

Estos pasos se deben aplicar en cada uno de los proyectos aquí planteados,
o cada vez que se desee realizar una modificación a un programa para
obtener siempre mejores resultados sobre el objetivo propuesto en cada
actividad.




                                                       56
5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin del
puerto B, el cual a su vez deberá ser configurado como salida para garantizar
el correcto funcionamiento del mismo. En la figura 5.9 podemos observar en
detalle la conexión del circuito eléctrico que deberá ser montado.




                                     Figura 5.9.



                                   Proyecto # 2

                           Componente              Cantidad

                PIC16F84A                             1
                Cristal de 4 Mhz                      1
                Capacitor de 33 pF                    2
                LED                                   8
                Resistencia de 220 Ohm                8
                Fuente regulada de 5 Vdc              1


                                     Tabla 5.2.




                                           57
En el proyecto #1 se pudo observar como es posible encender un led
conectado a un pin del puerto A o B en un PIC16F84A, utilizando las
instrucciones High y Low. También existen otras formas de poner un “1” o un
“0” lógico en un pin configurado como salida; esto se puede lograr de varias
maneras:

       PORTA.0 = 1      ' RA0 = 1 -> (es igual a High PortA.0)

       PORTA.0 = 0      ' RA0 = 0 -> (es igual a Low PortA.0)

Cuando deseamos poner varios pines de un mismo puerto en “1”, podemos
utilizar las siguientes opciones:

       PORTB = %10101010       ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1
                               ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0

Este mismo ejemplo de configuración en hexadecimal:

       PORTB = $AA             ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1
                               ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0


Recordemos que el símbolo “%” expresa la notación en binario, por lo cual se
deben expresar los ocho bits a ser cargados en el registro “PortB”. Otra forma
de expresar este ejemplo sería colocando la notación en hexadecimal con el
símbolo “$”, seguido del valor calculado.

Basados en esta información podemos lograr encender y apagar varios leds
simultáneamente conectados a uno de los puertos del microcontrolador como
lo muestra el montaje de la figura 5.9.


Veamos el siguiente programa:
'****************************************
'* Nombre      : Proyecto2.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************



                                            58
Define Osc 4           ' Define el Oscilador para un Cristal
                       ' de 4 Mhz.

   TRISB = %00000000   ' Configura el Puerto B como Salida

   PORTB = %00000000   ' Inicializa el puerto "B".

Inicio:                ' Etiqueta de Inicio del programa

   PORTB = %01010101   ' Enciente las salidas RB0, RB2, RB4 y RB6, al
                       ' mismo tiempo apaga RB1, RB3, RB5 y RB7.

   Pause 1000          ' Hace una pausa de 1000 milisegundos = 1 Seg.

   PORTB = %10101010   ' Enciente las salidas RB1, RB3, RB5 y RB7, al
                       ' mismo tiempo apaga RB0, RB2, RB4 y RB6.

   Pause 1000          ' Hace una pausa de 1000 milisegundos = 1 Seg.

   GoTo Inicio         ' Salta a la etiqueta "Inicio" y se repite el
                       ' proceso.

   End


Este programa enciende primero las salidas pares del puerto B y apaga las
salidas impares, genera una pausa de 1 segundo (1000 ms) y seguidamente
hace el proceso inverso en las salidas, es decir, enciende las salidas impares
y apaga las salidas pares para generar nuevamente otra pausa de 1 segundo
y así repetir el proceso completo al generar un salto a la etiqueta “Inicio”.




                                         59
5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador pueden
ser configurados también como entradas, como se detalla en el contenido del
proyecto #1, donde se explica claramente que al poner un “1” en un bit de un
registro de configuración de puerto, ya sea TRISA o TRISB, para el caso del
PIC16F84A, éste se comportará como entrada. Realice el montaje de la figura
5.10 y analice el programa que se muestra a continuación.




                                    Figura 5.10.



                                  Proyecto # 3

                            Componente             Cantidad

                PIC16F84A                             1
                Cristal de 4 Mhz                      1
                Capacitor cerámico de 33 pF           2
                LED                                   1
                Resistencia de 220 Ohm                1
                Resistencia de 10K Ohm                1
                Pulsador Normalmente Abierto          1
                Fuente regulada de 5 Vdc              1


                                     Tabla 5.3.




                                        60
IF – THEM – ELSE

Sintaxis:       If expresión 1 {AND / OR expresión 2} Then etiqueta

Con la instrucción If – Them podemos tomar decisiones a lo largo de un
programa, basadas en condiciones específicas definidas por el programador.


El siguiente programa hace destellar un LED conectado en RB0, solo cuado el
pulsador es activado:
'****************************************
'* Nombre      : Proyecto3.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************

Define Osc 4          ' Define el Oscilador para un Cristal
                      ' de 4 Mhz.

   TRISA = %11111    ' configura el Puerto A como Entrada
   TRISB = %00000000 ' Configura el Puerto B como Salida

   PORTB = $00        ' Inicializa el puerto B

Inicio:

   If PORTA.0 = 1 Then PORTB.0 = 1 ' Pregunta si RA0 = 1, si se cumple
                                   ' la condición entonces enciende el Led.

   Pause 1000         ' Hace una pausa de 1 segundo (1000 ms)

   Low PORTB.0        ' Apaga el Led

   Pause 1000         ' Hace una pausa de 1 segundo (1000 ms)

   GoTo inicio        ' Salta a la etiqueta "Inicio"

   End


Para verificar si el pulsador está activado, se pregunta si RA0 = 1. Esto es
posible gracias a la instrucción “IF” la cual genera un resultado siempre que la
condición planteada se cumpla, y para lo cual debemos utilizar
necesariamente su complemento “Then” seguido de la acción a ser tomada.



                                            61
En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, se
cumple la condición y por lo tanto RB0 = 1, es decir, el LED enciende.


5.4.- Proyecto #4: En este ejemplo empleamos un microcontrolador
PIC16F877A, con el cual nos hemos planteado la lectura de ocho pulsadores
conectados al puerto B, de tal manera que al activar uno de ellos podemos
mostrar un dígito decimal en un Display de siete segmentos.




                                  Figura 5.11.




                                      62
Proyecto # 4

                               Componente                 Cantidad

                  PIC16F877A                                 1
                  Cristal de 4 Mhz                           1
                  Capacitor cerámico de 33 pF                2
                  Resistencia de 220 Ohm                     8
                  Resistencia de 10K Ohm                     8
                  Pulsador Normalmente Abierto               8
                  Display de 7 Segmentos - Cátodo común      1
                  Fuente regulada de 5 Vdc                   1


                                       Tabla 5.4.




En el diagrama esquemático de la figura 5.11 se pueden observar ocho
pulsadores normalmente abiertos, los cuales una vez activados generan un
estado lógico alto en el puerto seleccionado (puerto “B”), el cual ha sido
configurado como entrada.

El display de 7 segmentos de cátodo común, se encuentra conectado al
puerto “D”, donde el bit menos significativo RB0 corresponde al segmento “a”
del display, RB1 corresponde al segmento “b”, RB2 corresponde al segmento
“c”, RB3 corresponde al segmento “d”, RB4 corresponde al segmento “e”, RB5
corresponde al segmento “f” y RB6 corresponde al segmento “g”.

El siguiente programa es una forma básica de tomar una lectura de cada
pulsador conectado al puerto “B” y generar un resultado en el puerto de salida
al cual hemos conectado un display de 7 segmentos:

'****************************************
'* Nombre      : Proyecto4.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************




                                            63
Define Osc 4        ' Define el Oscilador para un Cristal
                    ' de 4 Mhz.


   TRISB = $FF      ' Configura el Puerto B como Entrada
   TrisD = $00      ' Configura el Puerto D como Salida


Inicio:

   '   A continuación se verifica cada pin del puerto B,
   '   si hay un 1 lógico en alguna de las entradas el
   '   puerto D se actualiza con el dato correspondiente
   '   para generar en el Display un dígito decimal.

                               ' gfedcba
                               ' |||||||
   If PORTB.0 = 1 Then PortD = %00111111   ' Enciende los segmentos correspondientes
                                           ' al dígito “cero” en el display.

   If PORTB.1 = 1 Then PortD = %00000110   ' Enciende los segmentos correspondientes
                                           ' al dígito “uno” en el display.

   If PORTB.2 = 1 Then PortD = %01011011   ' Enciende los segmentos correspondientes
                                           ' al dígito “dos” en el display.

   If PORTB.3 = 1 Then PortD = %01001111   ' Enciende los segmentos correspondientes
                                           ' al dígito “tres” en el display.

   If PORTB.4 = 1 Then PortD = %01100110   ' Enciende los segmentos correspondientes
                                           ' al dígito “cuatro” en el display.

   If PORTB.5 = 1 Then PortD = %01101101   ' Enciende los segmentos correspondientes
                                           ' al dígito “cinco” en el display.

   If PORTB.6 = 1 Then PortD = %01111101   ' Enciende los segmentos correspondientes
                                           ' al dígito “seis” en el display.

   If PORTB.7 = 1 Then PortD = %00000111   ' Enciende los segmentos correspondientes
                                           ' al dígito “siete” en el display.


   GoTo Inicio      ' Salta a la etiqueta "Inicio"

   End




                                           64
5.5.- Proyecto #5: En el ejemplo a continuación se realiza un conteo
ascendente desde cero hasta nueve en un display de 7 segmentos conectado
al puerto “D” de un PIC16F877A.




                                   Figura 5.12.




                                 Proyecto # 5

                            Componente                 Cantidad

               PIC16F877A                                 1
               Cristal de 4 Mhz                           1
               Capacitor cerámico de 33 pF                2
               Resistencia de 220 Ohm                     8
               Display de 7 Segmentos - Cátodo común      1
               Fuente regulada de 5 Vdc                   1


                                    Tabla 5.5.




                                       65
FOR… NEXT

Sintaxis:    For variable = inicio to final          {step {-} incremento}
      *
      *
      Instrucciones…
      *
      *
      Next { variable}


La instrucción For…Next se encarga de hacer repeticiones de instrucciones
que permanecen dentro del lazo For… Next.

El parámetro Step afecta el incremento según el valor asignado después de
esta palabra. Si este parámetro es omitido, el incremento es en una unidad.

Analice el siguiente programa:
'****************************************
'* Nombre      : Proyecto5.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************

Define Osc 4         ' Define el Oscilador para un Cristal
                     ' de 4 Mhz.

   I Var Byte        ' Declaración de la Variable "I" tipo Byte

   ' Constantes para definir cada dígito decimal en el Display:

                  ' gfedcba
                  ' |||||||
   Cero     CON   %00111111
   Uno      CON   %00000110
   Dos      CON   %01011011
   Tres     CON   %01001111
   Cuatro   CON   %01100110
   Cinco    CON   %01101101
   Seis     CON   %01111101
   Siete    CON   %00000111



                                            66
Ocho         CON %01111111
   Nueve        CON %01100111

   ' Configuración del Puerto de Salida:

   TrisD = $00                     ' Configura el Puerto D como Salida

Inicio:

    For I = 0 To 9                 ' Repetición de Instrucciones dentro del Lazo
                                   ' For - Next

          Call Digito              ' Salto con Retorno hacia la etiqueta "Digito"

          Pause 1000               ' Pausa de 1 segundo (1000 ms)

    Next I

    GoTo Inicio                    ' Salta a la etiqueta "Inicio"

Digito:

   ' Verificación del dígito a ser mostrado en el Display el cual
   ' se corresponde con el valor almacenado en la variable "I".

   If   I   =   0   Then   PortD   =   cero
   If   I   =   1   Then   PortD   =   Uno
   If   I   =   2   Then   PortD   =   dos
   If   I   =   3   Then   PortD   =   tres
   If   I   =   4   Then   PortD   =   cuatro
   If   I   =   5   Then   PortD   =   cinco
   If   I   =   6   Then   PortD   =   seis
   If   I   =   7   Then   PortD   =   siete
   If   I   =   8   Then   PortD   =   ocho
   If   I   =   9   Then   PortD   =   nueve

   Return           ' Retorna una línea después del salto con retorno (Call)
   End




Al iniciar el conteo en el display de 7 segmentos, se puede observar un
conteo ascendente que da inicio en cero y se va incrementando en una
unidad cada segundo hasta llegar a nueve.

Si deseamos realizar el incremento en más de una unidad por vez, tan solo
debemos incluir la directiva “Step”, seguido del incremento, es decir, si
queremos realizar un incremento de dos unidades por vez, entonces el lazo
For – Next se compone de la siguiente manera:



                                                     67
For I = 0 To 9 Step 2    ' Repetición de Instrucciones dentro del Lazo
                             ' For – Next con incremento en dos unidades.

       Call Digito           ' Salto con Retorno hacia la etiqueta "Digito"

       Pause 1000            ' Pausa de 1 segundo (1000 ms)

    Next I



Esto significa que el conteo arranca en cero y cada segundo transcurrido se
podrán ver los dígitos: “2”, “4”, “6” y “8”.

Para realizar un conteo regresivo, el lazo For – Next se compone de la
siguiente forma:

    For I = 9 To 0 Step -1   ' Repetición de Instrucciones dentro del Lazo
                             ' For – Next.

       Call Digito           ' Salto con Retorno hacia la etiqueta "Digito"

       Pause 1000            ' Pausa de 1 segundo (1000 ms)

    Next I


En este caso en conteo inicia en nueve y decrece en una unidad hasta llegar
a cero.


5.6.- Proyecto #6: PicBasic cuenta con una instrucción capaz de generar
tonos DTMF (Dual Tone Multifrecuency - Multifrecuencia de doble tono), tonos
que se utilizan en telefonía para marcar una serie de números y así poder
establecer la comunicación entre dos o más personas. Una aplicación
interesante para esta instrucción podría ser el discado de números telefónicos
en sistemas de alarma cuando ha sido activado un dispositivo de supervisión,
para luego generar un mensaje de voz que nos alerte de dicho evento.

Realice el montaje de la figura 5.13 y analice el programa que se muestra a
continuación, el cual genera tonos DTMF consecutivos de una serie de dígitos
predefinidos. Es muy importante considerar que para generar los tonos
adecuadamente el oscilador externo debe ser de 10 Mhz o superior.




                                        68
Figura 5.13.


                                      Proyecto # 6

                              Componente               Cantidad

                 PIC16F84A                                1
                 Cristal de 10 Mhz                        1
                 Capacitor cerámico de 33 pF              2
                 Capcitor Electrolítico de 10 uF          2
                 Parlante de 8 Ohm                        1
                 Fuente regulada de 5 Vdc                 1



                                        Tabla 5.6.


En la tabla 5.7 se puede observar la frecuencia baja y la frecuencia alta de
cada digito entre cero y quince, los cuales se corresponden a su vez con cada
uno de los dígitos de un teclado telefónico, como se puede observar en la
segunda columna de la misma tabla.

Esto quiere decir que si generamos las frecuencias correspondientes al dígito
“1” utilizando la instrucción “DTMFout”, obtendremos las mismas frecuencias
baja y alta que se generan al pulsar el dígito “1” de cualquier teléfono de tonos
DTMF. Si deseáramos generar desde el microcontrolador el tono DTMF



                                            69
correspondiente al dígito “0” de un teclado telefónico, entonces, según la tabla
5.7, el dígito a introducir en la instrucción “DTMFout” deberá ser el “10”.

              Dígito en la   Dígito en un
                                             Frecuencias   Frecuencias
              Instrucción      Teclado
                                                Bajas         Altas
               DTMFout        Telefónico
                    1              1             697 HZ     1209 HZ
                    2              2             697 HZ     1336 HZ
                    3              3             697 HZ     1477 HZ
                    4              4             770 HZ     1209 HZ
                    5              5             770 HZ     1336 HZ
                    6              6             770 HZ     1477 HZ
                    7              7             852 HZ     1209 HZ
                    8              8             852 HZ     1336 HZ
                    9              9             852 HZ     1477 HZ
                   10              0             941 HZ     1209 HZ
                   11              *             941 HZ     1336 HZ
                   12              #             941 HZ     1477 HZ
                   13              A             697 HZ     1633 HZ
                   14              B             770 HZ     1633 HZ
                   15              C             852 HZ     1633 HZ
                    0              D             941 HZ     1633 HZ

                                       Tabla 5.7.




                                      Figura 5.14.




                                            70
Antes de empezar a programar, vamos a verificar la sintaxis de la instrucción
DTMFout:


DTMFout

Sintaxis:    DTMFout pin, {On-ms, Off-ms}, [tono, tono,...tono]

La instrucción DTMFout genera tonos DTMF en secuencia y a través de un
puerto cualquiera del microcontrolador.


Pin: especifica el pin del puerto en el cual se emitirán los tonos DTMF.

On-ms: es una variable o constante que especifica la duración de cada tono
en milisegundos. En caso de no utilizar este parámetro, el tiempo por defecto
de cada tono es de 200 ms.

Off-ms: es una variable o constante que especifica el tiempo en milisegundos
del silencio que hay entre cada tono. En caso de no utilizar este parámetro, el
tiempo en silencio entre cada tono por defecto será de 50 ms.

Tono: puede ser una variable o constante entre 0 y 15, que especifica el tono
que debe ser generado.




                                       71
Programa en Pic Basic:
'****************************************
'* Nombre      : Proyecto6.pbp          *
'* Autor       : Nombre del Autor       *
'* Copyright : Copyright (Año)          *
'* Fecha       : Fecha                  *
'* Versión     : 1.0                    *
'****************************************

Define Osc 10        ' Define el Oscilador en 10 Mhz.

   TRISA = $FE       ' Configura el pin RA0 como Salida
                     ' y el resto de los pines como entrada.

Inicio:

   DTMFOut      PORTA.0, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

   Pause 2000        ' Genera una pausa de 2 segundos.

   DTMFOut      PORTA.0, 400, 150, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

   Pause 2000        ' Genera una pausa de 2 segundos.

   GoTo Inicio       ' Salta a la etiqueta "Inicio".

   End




                                            72
Observe que en la primera instrucción “DTMFout”, después de la etiqueta
“Inicio”, no se especifica la duración de cada tono y el tiempo en silencio entre
cada tono. Esto significa que el microcontrolador genera cada tono con una
duración de 200 milisegundos por defecto, y un tiempo en silencio entre cada
tono de 50 milisegundos como se muestra en las figuras 5.15 y 5.16
respectivamente:




                                    Figura 5.15.




                                        73
Figura 5.16.


La segunda instrucción “DTMFout”, después de la etiqueta “Inicio”, tiene
definido un tiempo de duración para cada tono de 400 milisegundos (figura
5.17), y un tiempo de espera entre cada tono de 150 milisegundos (figura
5.18). Estos tiempos pueden ser ajustados a conveniencia cada vez que sea
necesario.




                                    74
Figura 5.17.




Figura 5.18.




    75
5.7.- Proyecto #7: En este proyecto estudiaremos la instrucción “Button”, la
cual es utilizada para la eliminación de rebotes en pulsadores o para efectuar
repeticiones en un botón, como sucede en el caso de los teclados de las
computadoras, en las cuales si dejamos presionado un botón o tecla, la
misma se repite indefinidamente a una frecuencia específica, la cual puede
ser variada fácilmente como lo demostraremos a continuación.



Antes de empezar, veamos la sintaxis de la instrucción Button:




Button

Sintaxis:    Button pin, estado, retardo, rango, variable, acción, etiqueta

La instrucción “Button”   elimina los rebotes de un “pulsador” o “switch”, y
genera auto-repetición.




Pin: especifica el pin del puerto en el cual será conectado el pulsador.

Estado: indica cual es estado lógico que debe ocurrir cuando el pulsador es
presionado (0 o 1). Si es 0, el pulsador deberá ser activo-bajo y si es 1, el
pulsador deberá ser activo-alto (Ver figura 5.19).




                                       76
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic
Basic

Más contenido relacionado

La actualidad más candente

Guia completo correias gates
Guia completo correias gates Guia completo correias gates
Guia completo correias gates Herlon Moitinho
 
Preparación de motores de serie para competición - Stefano Gillieri
Preparación de motores de serie para competición -  Stefano GillieriPreparación de motores de serie para competición -  Stefano Gillieri
Preparación de motores de serie para competición - Stefano GillieriSantiago Nicolás Nuñez
 
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manual
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair ManualPERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manual
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manualjnekmsmme
 
Analise de falha em motores
Analise de falha em motoresAnalise de falha em motores
Analise de falha em motoresdragavitt
 
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manual
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manualPerkins 2500 series 2506 15 industrial engine (mga ) service repair manual
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manualfujsjefkskemm
 
1 MANTENIMIENTO (1).ppt
1 MANTENIMIENTO (1).ppt1 MANTENIMIENTO (1).ppt
1 MANTENIMIENTO (1).pptAndriDP
 
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLI
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLIValores de Ajuste de Tapa de Cilindros para Juntas CICCARELLI
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLIAmigosRenault9Arg
 
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manual
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair ManualPERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manual
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manualjsnekmse
 
MANUAL DO MOTOR MWM SPRINT 4.07 6.07
MANUAL DO MOTOR MWM SPRINT 4.07 6.07MANUAL DO MOTOR MWM SPRINT 4.07 6.07
MANUAL DO MOTOR MWM SPRINT 4.07 6.07Elson Dorigon
 

La actualidad más candente (20)

-Mercedes-Benz-OM904-OM-906-LA.pdf
-Mercedes-Benz-OM904-OM-906-LA.pdf-Mercedes-Benz-OM904-OM-906-LA.pdf
-Mercedes-Benz-OM904-OM-906-LA.pdf
 
Tabela de parede linha diesel
Tabela de parede linha dieselTabela de parede linha diesel
Tabela de parede linha diesel
 
Curso perkins
Curso perkinsCurso perkins
Curso perkins
 
Guia completo correias gates
Guia completo correias gates Guia completo correias gates
Guia completo correias gates
 
Preparación de motores de serie para competición - Stefano Gillieri
Preparación de motores de serie para competición -  Stefano GillieriPreparación de motores de serie para competición -  Stefano Gillieri
Preparación de motores de serie para competición - Stefano Gillieri
 
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manual
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair ManualPERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manual
PERKINS 4000 SERIES 4006-23 TAG3A INLINE DIESEL ENGINE Service Repair Manual
 
Analise de falha em motores
Analise de falha em motoresAnalise de falha em motores
Analise de falha em motores
 
motores de competicion
motores de competicionmotores de competicion
motores de competicion
 
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manual
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manualPerkins 2500 series 2506 15 industrial engine (mga ) service repair manual
Perkins 2500 series 2506 15 industrial engine (mga ) service repair manual
 
Manual de sintomas e falhas
Manual de sintomas e falhasManual de sintomas e falhas
Manual de sintomas e falhas
 
1 MANTENIMIENTO (1).ppt
1 MANTENIMIENTO (1).ppt1 MANTENIMIENTO (1).ppt
1 MANTENIMIENTO (1).ppt
 
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLI
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLIValores de Ajuste de Tapa de Cilindros para Juntas CICCARELLI
Valores de Ajuste de Tapa de Cilindros para Juntas CICCARELLI
 
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manual
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair ManualPERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manual
PERKINS 2200 SERIES 2206D-E13TA INDUSTRIAL ENGINE Service Repair Manual
 
31967994 manual-motor-mwm-4-10-6-10
31967994 manual-motor-mwm-4-10-6-1031967994 manual-motor-mwm-4-10-6-10
31967994 manual-motor-mwm-4-10-6-10
 
Iveco
IvecoIveco
Iveco
 
Motor Scania Dc 12
Motor Scania Dc 12 Motor Scania Dc 12
Motor Scania Dc 12
 
39528701 mecanica-diesel-22
39528701 mecanica-diesel-2239528701 mecanica-diesel-22
39528701 mecanica-diesel-22
 
Tabela de torque
Tabela de torqueTabela de torque
Tabela de torque
 
Curso automotriz II
Curso automotriz IICurso automotriz II
Curso automotriz II
 
MANUAL DO MOTOR MWM SPRINT 4.07 6.07
MANUAL DO MOTOR MWM SPRINT 4.07 6.07MANUAL DO MOTOR MWM SPRINT 4.07 6.07
MANUAL DO MOTOR MWM SPRINT 4.07 6.07
 

Similar a Basic

LENGUAJE BASIC WILBER PINILLA
LENGUAJE BASIC WILBER PINILLALENGUAJE BASIC WILBER PINILLA
LENGUAJE BASIC WILBER PINILLAsena
 
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIAL
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIALSISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIAL
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIALÍcaro Álvarez Giménez
 
Introduccion a nodejs
Introduccion a nodejs Introduccion a nodejs
Introduccion a nodejs Erik Gur
 
Introduccion a nodejs_a_traves_de_koans_ebook
Introduccion a nodejs_a_traves_de_koans_ebookIntroduccion a nodejs_a_traves_de_koans_ebook
Introduccion a nodejs_a_traves_de_koans_ebookJose Luis Fernandez
 
Una guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeUna guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeCovantec R.L.
 
D7024 install 0603_sp
D7024 install 0603_spD7024 install 0603_sp
D7024 install 0603_spRichard Deza
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE Cclaudiocj7
 
Gestión moderna del mantenimiento
Gestión moderna del mantenimientoGestión moderna del mantenimiento
Gestión moderna del mantenimientoRobert Almeyda
 
Manual ingeniero mantenimiento
Manual ingeniero mantenimientoManual ingeniero mantenimiento
Manual ingeniero mantenimientoGREAT PERU PERU
 
Robotica 299011
Robotica 299011Robotica 299011
Robotica 299011conchaes
 
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Miguel Angel Corona Lòpez
 
Microcontroladores pic diseño practico de aplicaciones
Microcontroladores pic diseño practico de aplicacionesMicrocontroladores pic diseño practico de aplicaciones
Microcontroladores pic diseño practico de aplicacionesCarlos Tovar
 

Similar a Basic (20)

LENGUAJE BASIC WILBER PINILLA
LENGUAJE BASIC WILBER PINILLALENGUAJE BASIC WILBER PINILLA
LENGUAJE BASIC WILBER PINILLA
 
Microcontroladores libro
Microcontroladores   libroMicrocontroladores   libro
Microcontroladores libro
 
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIAL
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIALSISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIAL
SISTEMA DE INSPECCIÓN DE PANTÓGRAFOS MEDIANTE VISIÓN ARTIFICIAL
 
Introduccion a nodejs
Introduccion a nodejs Introduccion a nodejs
Introduccion a nodejs
 
Introduccion a nodejs_a_traves_de_koans_ebook
Introduccion a nodejs_a_traves_de_koans_ebookIntroduccion a nodejs_a_traves_de_koans_ebook
Introduccion a nodejs_a_traves_de_koans_ebook
 
Manual de C
Manual de CManual de C
Manual de C
 
Manual de c# 2
Manual de c# 2Manual de c# 2
Manual de c# 2
 
Una guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de ZopeUna guía comprensiva de la Arquitectura de Componentes de Zope
Una guía comprensiva de la Arquitectura de Componentes de Zope
 
D7024 install 0603_sp
D7024 install 0603_spD7024 install 0603_sp
D7024 install 0603_sp
 
tesina-general
tesina-generaltesina-general
tesina-general
 
manual de Usuario Calener.pdf
manual de Usuario Calener.pdfmanual de Usuario Calener.pdf
manual de Usuario Calener.pdf
 
manual de Usuario Calener.pdf
manual de Usuario Calener.pdfmanual de Usuario Calener.pdf
manual de Usuario Calener.pdf
 
MANUAL DE LENGUAJE C
MANUAL DE LENGUAJE CMANUAL DE LENGUAJE C
MANUAL DE LENGUAJE C
 
Gestión moderna del mantenimiento
Gestión moderna del mantenimientoGestión moderna del mantenimiento
Gestión moderna del mantenimiento
 
Manual ingeniero mantenimiento
Manual ingeniero mantenimientoManual ingeniero mantenimiento
Manual ingeniero mantenimiento
 
Cypecad manual
Cypecad manualCypecad manual
Cypecad manual
 
Cypecad ejemplo
Cypecad   ejemploCypecad   ejemplo
Cypecad ejemplo
 
Robotica 299011
Robotica 299011Robotica 299011
Robotica 299011
 
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
Microcontroladores pic (josé mª angulo usategui, ignacio angulo martínez)
 
Microcontroladores pic diseño practico de aplicaciones
Microcontroladores pic diseño practico de aplicacionesMicrocontroladores pic diseño practico de aplicaciones
Microcontroladores pic diseño practico de aplicaciones
 

Basic

  • 1. BASIC PARA MICROCONTROLADORES PIC Christian Bodington Esteva Ingeniero en Electrónica
  • 2.
  • 3. CONTENIDO Prólogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Capítulo I. Herramientas de Diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Capítulo II. MicroCode Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Capitulo III. Microcontroladores PIC. 3.1.- ¿Que es un PIC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 3.2.- El Oscilador Externo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 3.3.- El Circuito de Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.- Consideraciones técnicas de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.1.- Estado Lógico de un pin I/O. . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.2. Lectura de un estado lógico en un pin I/O. . . . . . . . . . . . . . . 33 3.4.3. El Opto-acoplador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.4.4. Fuente de poder, 5Vdc / 3.3Vdc. . . . . . . . . . . . . . . . . . . . . . . 37 Capítulo IV. Estructura de un programa. Componentes y operadores en PicBasic. 4.1.- Estructura de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.- Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.- Componentes y operadores en PicBasic. . . . . . . . . . . . . . . . . . . . . . . .41 i
  • 4. 4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.2.- Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 4.3.3.- Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.3.4.- Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.5.- Símbolos o Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.6.- Operadores Aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 4.3.7.- Operadores Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 4.3.8.- Operadores de Comparación. . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.9.- Operadores Lógicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Capitulo V. Primeros Programas con el PIC16F84. 5.1.- Proyecto #1. Implementación de las instrucciones de programa High, Low Goto y Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 5.2.- Proyecto #2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.3.- Proyecto #3. Implementación de la instrucción If-Them-Else. . . . . . . .60 5.4.- Proyecto #4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.5.- Proyecto #5. Implementación de la instrucción For-Next. . . . . . . . . . . 65 5.6.- Proyecto #6. Implementación de la instrucción Frecout. . . . . . . . . . . . 68 5.7.- Proyecto #7. Implementación de la instrucción Button . . . . . . . . . . . . .76 5.7.1.- Proyecto #7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.7.2.- Proyecto #7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.7.3.- Proyecto #7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 ii
  • 5. 5.8.- Proyecto #8. Implementación de la instrucción Branch . . . . . . . . . . . . 91 5.9.- Proyecto #9. Implementación de la instrucción PWM . . . . . . . . . . . . . 94 Capitulo VI. Módulos LCD. 6.1.- Pantallas LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.2.- Identificación de los pines de una pantalla LCD . . . . . . . . . . . . . . . . . 98 6.3.- Conexión de una pantalla LCD en Pic Basic. . . . . . . . . . . . . . . . . . . . 99 6.4.- Proyecto #10. Implementación de la instrucción Lcdout . . . . . . . . . . 103 6.5.- Proyecto #11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.6.- Proyecto #12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 6.7.- Proyecto #13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 6.8.- Proyecto #14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 6.9.- Proyecto #15. Implementación de la instrucción Count. . . . . . . . . . . 115 6.10.- Proyecto #16. Implementación de la instrucción Pulsin. . . . . . . . . . 122 6.11.- Proyecto #17. Implementación de la instrucción Pot. . . . . . . . . . . . 124 6.12.- Memoria CGRAM en la Pantalla LCD. . . . . . . . . . . . . . . . . . . . . . . .127 6.13.- Proyecto #18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 6.14.- Proyecto #19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137 Capitulo VII. Teclado Matricial. 7.1.- Teclado Matricial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 7.2.- Proyecto #20. Aplicación de un teclado 3x4. . . . . . . . . . . . . . . . . . . .154 iii
  • 6. Capitulo VIII. Memoria de Datos. 8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 8.2.- Proyecto #21. Implementación de la instrucción Read. . . . . . . . . . . .161 8.3.- Proyecto #22. Implementación de la instrucción Write. . . . . . . . . . . .163 8.4.- Proyecto #23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 8.5.- Proyecto #24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Capitulo IX. Interrupciones. 9.1.- ¿Qué son las Interrupciones?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.2.- Fuentes de Interrupciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.3.- Registro INTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 9.4.- Activación de interrupción a través del pin RB0/INT. . . . . . . . . . . . . . 177 9.5.- Proyecto #25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 9.6.- Interrupción TMR0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 9.7.- Registro OPTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 9.8.- Proyecto #26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 9.9.- Interrupción por cambio de estado de uno de los pines más significativos del puerto B (RB4-RB7). . . . . . . . . . . . . . . . . . . . . . . . . . . . .186 9.10.- Proyecto #27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187 Capitulo X. Memoria Serial I2C. 10.1.- ¿Qué es el bus I2C?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 10.2.- Proyecto #28. Implementación de las instrucciones I2Cwrite, I2Cread . . 192 iv
  • 7. 10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 10.4.- Proyecto #30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 Capitulo XI. Conversor A/D en el PIC16F877. 11.1.- Conversor A/D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 11.2.- El registro ADCON0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 11.3.- El registro ADCON1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210 11.4.- Proyecto #31. Implementación de la instrucción ADCin. . . . . . . . . . 214 Capitulo XII. Comunicación Serial. Transmisión y Recepción de Datos. 12.1.- Comunicación Serial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 12.2.- Instrucción SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 12.3.- Proyecto #32. Implementación de la instrucción SerIn. . . . . . . . . . . 221 12.4.- Instrucción SerOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 12.5.- Proyecto #33. Implementación de la instrucción SerOut. . . . . . . . . .233 12.6.- Proyecto #34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240 Capitulo XIII. Servomotor. 13.1.- ¿Qué es un Servomotor?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 13.2.- Proyecto #35. Implementación de la instrucción PauseUs. . . . . . . . .272 13.3.- Proyecto #36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 13.4.- Proyecto #37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 13.5.- Proyecto #38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 v
  • 8. Capitulo XIV. Módulos RF para comunicaciones. 14.1.- Módulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293 14.2.- Proyecto #39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 14.3.- Proyecto #40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300 14.4.- Proyecto #41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305 Capitulo XV. Instrucciones de programa de PicBasic. @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 ADCin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Asm… EndAsm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311 Branch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312 Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Call. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315 ClearWDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 DTMFout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 End. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 FreqOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 For… Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Gosub. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 vi
  • 9. Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324 High. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324 I2Cread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 I2Cwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326 IF-Then-Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 LCDin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329 LCDout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330 Low. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331 NAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 PauseUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 Pot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 PulsIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 PulsOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337 Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340 Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340 SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342 vii
  • 10. SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345 While-Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347 Apéndice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348 Apéndice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358 Apéndice C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360 Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362 viii
  • 11. Prólogo Emprender el estudio de microcontroladores para el desarrollo de proyectos electrónicos que sean la base para nuevas ideas es el objetivo primordial de esta primera edición, en la cual nos hemos concentrado en dar al lector algunas herramientas fundamentales con las cuales esperamos abrir un campo de conocimiento en la electrónica de control, a través de un sin numero de posibilidades de diseño a partir de una serie de ejemplos prácticos desarrollados en lenguaje Basic para Microcontroladores PIC. De toda la gama de posibilidades entre las familias de microcontroladores PIC que ofrece Microchip Inc., hemos elegido para empezar el microcontrolador más popular de toda la serie, el PIC16F84, que será utilizado en este libro para estudiar algunas de sus características a través del desarrollo de actividades que en principio no requieren un nivel de conocimiento elevado y a través del cual daremos los pasos necesarios para adentrarnos en las gamas mas altas, de las que se ha seleccionado el microcontrolador PIC16F877 para la realización de proyectos electrónicos de nivel medio y avanzado, y en los que podremos manejar dispositivos periféricos que le dan un gran valor agregado a cada uno de nuestros proyectos y abren posibilidades de desarrollo muy interesantes al lector. Además, hemos considerado proporcionar la información adecuada referente a las herramientas de desarrollo más importantes en la actualidad, para programación en lenguaje Basic para microcontroladores PIC. En esta ocasión iniciamos con el estudio del compilador PicBasic Pro, de la empresa microEngineering Labs, Inc., la cual ofrece una de las herramientas mas populares en el área, debido a que cuenta con una gran variedad de instrucciones que hacen de la programación de microcontroladores una tarea fácil y muy productiva a la hora de desarrollar proyectos que involucren periféricos como pantallas LCD, teclados matriciales, sensores de temperatura, presión, gas, humedad, memorias de datos entre otros, y donde una de las características más relevantes es el considerable ahorro de tiempo, lo que se traduce en efectividad y menos líneas de programa, de tal
  • 12. manera que el diseñador puede prestar mayor atención a los detalles, logrando así perfeccionar su desempeño en cualquiera de las funciones que desee programar. Otra de las herramientas que hemos decidido incorporar a la obra, es el programador de microcontroladores PIC P16Pro/PicAll, de la página oficial de PicallW, de Boban Dobaj, Diseñador. Este programador soporta una gran cantidad de modelos de las series 12, 16 y 18 de Microchip. Su construcción es sumamente sencilla y de muy bajo costo, además de una serie de ventajas entre las cuales podemos mencionar la alta velocidad de transferencia de datos hacia el dispositivo al momento de ser grabado. Cada capítulo contiene teoría sobre la cual se pretende estudiar el funcionamiento de los microcontroladores y periféricos conectados a él. Para ello hemos desarrollado una serie de prácticas en las que el lector deberá hacer montajes de circuitos en base a los diagramas esquemáticos siguiendo las instrucciones y leyendo detenidamente los comentarios de cada línea de programa. Esperamos con esto proporcionar al lector una base sólida de conocimientos para el desarrollo de proyectos electrónicos, proyectos de robótica y todo aquello que represente una innovación científica en este campo. Finalmente, el agradecimiento para todos nuestros colaboradores en la edición de esta publicación, quienes se han encargado de revisar cada detalle, proyectos e ideas plasmadas en cada capitulo. Ingeniero en Información, Maria del Carmen Lara T. Ingeniero en Electrónica, Jesús Frank Phorlakis. Técnico Superior en Electricidad, Raúl Mastropasqua. 2
  • 13. Herramientas de Diseño Capitulo I En la elaboración de proyectos electrónicos con microcontroladores PIC, resulta muy importante considerar una serie de herramientas, las cuales vamos a describir a continuación: Software: para la programación en Lenguaje Basic, contamos con una gran variedad de posibilidades en el mercado, y entre las cuales hemos elegido para esta primera edición, el Ambiente Integrado de Desarrollo Microcode Studio (IDE) de microEngineering Labs, Inc., además del compilador Basic, PICBasic Compiler, o PICBasic Pro Compiler. Con estas dos herramientas estaremos realizando la programación en cada uno de los proyectos propuestos a partir del capítulo V. Figura 1.1. (Fuente: http://www.microengineeringlabs.com) 3
  • 14. Programador de Microcontroladores PIC: es una herramienta indispensable con la cual podemos grabar el código generado por el compilador PicBasic para poner en funcionamiento cada uno de los proyectos propuestos en cada capítulo. Existen en internet una gran cantidad de modelos de programadores para microcontroladores PIC, de muy bajo costo y fácil construcción. Consideramos una buena experiencia realizar el montaje de cualquiera de estos diseños, aunque en esta oportunidad nuestra recomendación es el programador P16Pro/Picallw. Los detalles para la construcción de este programador están contenidos en el apéndice A. Figura 1.2. 4
  • 15. Placa de prototipos: proporciona al diseñador conexiones sin soldaduras, con lo cual se hace más práctico el desarrollo de los proyectos electrónicos propuestos a lo largo de cada capítulo. Figura 1.3. • Multímetro digital: este instrumento de medición será muy útil durante la elaboración de los circuitos propuetos en cada capítulo. Figura 1.4. 5
  • 16. Fuente de poder regulada con salida de voltaje variable. En el capítulo III se propone la construcción de una fuente de poder regulada a 5 Vdc y 3.3 Vdc. Figura 1.5. • Herramientas de corte, extractor de circuitos integrados, cable rígido para conexiones en la placa de prototipos. Figura 1.6. 6
  • 17. Osciloscopio: este instrumento se requiere para el desarrollo de algunas prácticas en las cuales se hace necesario medir las señales generadas desde el microcontrolador. Figura 1.7. • Componentes electrónicos: microcontroladores PIC en los modelos definidos en cada ejemplo práctico, resistencias, diodos, servomotores, condensadores, cristales y otros componentes de fácil adquisición. Cada proyecto cuenta con una tabla en la cual se decriben los componentes electrónicos que deberán ser utilizados en el cada montaje. Figura 1.7. 7
  • 18. Microcode Studio Capitulo II Microcode Studio (IDE), es un Ambiente Integrado de Desarrollo de MECANIQUE, diseñado especialmente para microEngineering Labs, Inc., de libre adquisición a través de la página Web http://www.microengineeringlabs.com Figura 2.1. (Fuente: http://www.microengineeringlabs.com) Descargar este programa es muy sencillo y esto lo podemos hacer ingresando a la siguiente dirección: http://www.microengineeringlabs.com/resources/win_ide.htm En esta página se puede encontrar una sección destinada para la descarga del archivo instalador, como se observa en la figura 2.2: 8
  • 19. Figura 2.2. (Fuente: http://www.microengineeringlabs.com) Además de esta herramienta, es necesario adquirir el compilador PicBasic, (Figura 2.3). Se puede acceder directamente a la página de productos de microEngineering Labs a través de la dirección: http://www.melabs.com/products/index.htm Figura 2.3. (Fuente: http://www.microengineeringlabs.com) Es posible descargar una versión DEMO del compilador PIC Basic, con la cual se pueden compilar programas con un máximo de 31 líneas de código, a través de la dirección: http://www.melabs.com/pbpdemo.htm 9
  • 20. Haga clic en el Link aquí señalado, para descargar la versión Demo de PicBasic. Pro Figura 2.4. (Fuente: http://www.melabs.com) Para empezar la descarga del archivo de instalación del compilador, solo hay que hacer clic en el link señalado en la figura 2.4, e indicar la ruta en la cual se desea que el archivo de instalación sea almacenado. Nota Importante: Es necesario adquirir una de las versiones completas del compilador Basic, para no tener límites en la cantidad de líneas del programa a compilar. En la figura 2.5 se puede observar el archivo descargado para la versión disponible del software Microcode Studio, y en la figura 2.6 se puede observar el archivo del compilador PicBasic Pro en su versión de prueba. Figura 2.5. Figura 2.6. 10
  • 21. El proceso de instalación es muy sencillo. El primer paso será ejecutar el archivo mcsinstall.exe, el cual es el responsable de iniciar el proceso de instalación de Microcode Studio: Figura 2.7. Seguidamente Microcode Studio le da la bienvenida en la ventana que se muestra a continuación: Figura 2.8. 11
  • 22. Haga clic en el botón “Next” y podrá ver en la siguiente ventana el acuerdo de licencia para Microcode Studio: Figura 2.9. La ruta por defecto para la instalación de Microcode Studio es C:Archivos de programaMecaniqueMCS. Esta ruta puede ser cambiada haciendo clic en el botón “Browse”, a través del cual se podrá ubicar la nueva carpeta en la cual deberá ser instalado el software: Nombre de la carpeta en la cual se encontrará el archivo ejecutable de Microcode Studio. Figura 2.10. 12
  • 23. Pulse “Next” para iniciar la copia de archivos (figura 2.11), y finalmente espere que se complete la instalación (figura 2.12). Figura 2.11. Figura 2.12. 13
  • 24. Una vez instalado Microcode Studio, es importante tomar en cuenta que antes de iniciar este software, es necesario instalar el compilador Basic, el cual es indispensable para la generación del código que será cargado en el microcontrolador PIC. Instalación del compilador PicBasic Pro: Para dar inicio a la instalación del compilador Pic Basic, será necesario ejecutar el archivo denominado “pbpdemo.exe” para el caso de la versión de demostración. La figura 2.13 muestra la ventana de inicio del proceso de instalación, en la cual se da la bienvenida al usuario y le invita a cerrar cualquier otra aplicación que se encuentre en uso en ese momento. Figura 2.13. En la siguiente ventana se debe especificar la unidad de disco duro en la cual se instalará el compilador y el nombre de la carpeta que va a contener los archivos a ser instalados. El software de instalación del compilador establece por defecto la ruta indicada en la figura 2.14. 14
  • 25. Figura 2.14. Seguidamente se debe especificar el nombre de la carpeta que va a contener los accesos directos a los archivos que ofrecen información adicional acerca del compilador PicBasic. Este paso puede ser omitido seleccionando la opción “Don’t create a Start Menu Folder”: Figura 2.15. 15
  • 26. Una vez seleccionadas las rutas de instalación del compilador, se debe hacer clic en el botón “Install” (figura 2.16), para dar inicio a la copia de archivos. Figura 2.16. Figura 2.17. 16
  • 27. Figura 2.18. Finalmente se puede ver en la ventana de la figura 2.18, un mensaje en el cual se confirma que el compilador PICBasic Pro ha sido instalado satisfactoriamente. Deshabilite la opción “Install Microcode Studio IDE” y seguidamente haga clic en el botón “Finish”. Nota: Puede descargar la documentación completa del compilador PicBasic a través de la dirección: http://www.melabs.com/support/index.htm 17
  • 28. Integración de Microcode Studio y Pic Basic Pro: Es importante integrar Microcode Studio con el compilador PicBasic Pro, indicando la ruta en la cual se encuentra instalado. Para esto debemos iniciar el software y seguir las siguientes instrucciones: 1. Desde el menú de Inicio de Windows ejecute “Microcode Studio”. Figura 2.19. 2. Haga clic en el menú “View” y seleccione la opción “Compile and Program Options”. Figura 2.20. 18
  • 29. 3. En la pestaña “Compiler” haga clic en el botón “Find Automatically” para una ubicación automática del compilador, o si lo prefiere haga clic en “Find Manually” para ubicar el compilador manualmente. Figura 2.21. 4. En la pestaña “Programmer” se pide la ubicación del software del programador que estaremos utilizando para grabar los microcontroladores. Figura 2.22. 19
  • 30. Se debe ubicar en la lista el programador “PICALL Programmer”, haciendo clic en el botón denominado “Add New Programmer” (Figura 2.22), y seguidamente se debe seleccionar de la lista de opciones, como se puede observar en la figura 2.23: Figura 2.23. Por último, al hacer clic en el botón “Next”, el software realizará la búsqueda automática de la carpeta que contiene el archivo ejecutable del programador Picall, el cual ha debido ser instalado según el procedimiento descrito en el Apéndice A. 20
  • 31. Microcontroladores PIC Capitulo III 3.1. Que es un PIC? Los PIC son una familia de microcontroladores desarrollados y fabricados por la empresa Microchip Technologies Inc., los cuales cuentan con una tecnología tipo RISC (Reduced Instruction Set Computer) y poseen en su arquitectura interna características especiales que varían según el modelo de PIC que deseamos utilizar. Podríamos decir que estos dispositivos se asemejan a una computadora pero de tamaño muy reducido, ya que cuentan con casi los mismos recursos que éstas, es decir, poseen memoria de programa, memoria RAM, memoria de datos, puertos de entrada o salida, temporizadores y en algunos casos cuentan con recursos adicionales como convertidores A/D, comparadores, USART (Universal Synchronous/Asynchronous Receiver/Transmitter), comunicación serie I2C, entre otros. Con todas estas características es lógico pensar que este dispositivo pasa a ser el corazón del circuito a ser controlado. Esto significa que el microcontrolador es el encargado de dirigir todos los procesos de un circuito electrónico, en base a las instrucciones de programa o rutinas que definen funciones específicas de control, donde las mismas serán realizadas en lenguaje Basic para microcontroladores PIC. Es por esta razón que consideramos muy importante estudiar la arquitectura interna del microcontrolador que se desea programar y aunque esta tarea pueda parecer difícil, el Lenguaje Basic para microcontroladores PIC la hace sumamente sencilla. El diseño de programas para microcontroladores PIC va acompañado normalmente con un previo estudio del diseño del hardware que hará que nuestros proyectos se pongan en marcha. Es decir, resulta absolutamente necesario saber cual será la función específica de cada pin; por ejemplo, en el caso de los puertos I/O (IN/OUT) a ser utilizados en el microcontrolador, es importante definir sus funciones antes de empezar a programar, ya que éstos pueden ser configurados a conveniencia como entrada o como salida de datos de forma independiente. También podemos destinar un puerto completo 21
  • 32. del microcontrolador para el control de dispositivos periféricos como pantallas LCD, teclados, motores paso a paso, leds, servomotores entre otros. De ahí la importancia de establecer cual será la función de cada puerto del microcontrolador PIC elegido para nuestros proyectos. Otra decisión importante será elegir convenientemente el modelo de microcontrolador a ser utilizado, ya que hay una gran gama de modelos que pueden ser adaptados a necesidades específicas de diseño. Figura 3.1. Los microcontroladores PIC comúnmente más utilizados son los siguientes: • PIC12C508 y PIC12C509, tienen memoria de programa EPROM, oscilador interno, y son muy utilizados en diseños de pequeños circuitos. • PIC16F84A, tiene memoria de programa tipo FLASH, oscilador externo, 13 pines I/O entre otras características que estaremos estudiando a lo largo del contenido de esta obra. Este PIC ha resultado ser uno de los más populares de toda la serie. • PIC16F87X, incluyen un gran número de mejoras en comparación con el PIC16F84, debido principalmente a que cuentan con un numero de pines I/O superior a éste, además de otras características relevantes. Por ejemplo, con esta serie de microcontroladores contamos con una mayor capacidad en cuanto a memoria de programa y memoria de datos. 22
  • 33. PIC18F4XX, estos microcontroladores resultan muy útiles cuando deseamos diseñar proyectos más avanzados. Cada uno de estos microcontroladores cuenta con una completa hoja de datos que puede ser descargada de la página oficial de Microchip: http://www.microchip.com Estas características influyen directamente al momento de decidir que modelo de microcontrolador PIC deseamos utilizar en nuestros proyectos, según sea el objetivo de diseño del circuito que deseamos realizar. El microcontrolador PIC16F84 es uno de los microcontroladores más populares y en algunos casos, el preferido por estudiantes para dar inicio al estudio de la programación de microcontroladores, seguido del PIC16F877 el cual posee más recursos importantes que estaremos estudiando a continuación. Antes de empezar a revisar todo lo referente a la programación de microcontroladores PIC, consideramos importante recordar algunas de las características de éstos dispositivos, para tener una base de conocimientos básicos para poder realizar un programa de control de un diseño completamente personalizado. Para empezar, veamos algunas características del microcontrolador PIC16F84: • Microcontrolador de 8 Bits. • Memoria de programa tipo Flash de 1024 palabras de 14 bits. • Memoria RAM de 68 bytes. • Memoria EEPROM de datos de 64 bytes. • Velocidad de operación de hasta 20 Mhz. • Cuatro fuentes de interrupción. • Posee 13 pines I/O (pines de entrada o salida). 23
  • 34. Diagrama de pines del PIC16F84: Figura 3.2. PIN Identificación Descripción del Pin 1 RA2 Pin de Entrada/Salida (I/O) del puerto A 2 RA3 Pin de Entrada/Salida (I/O) del puerto A 3 RA4/TOCKI Pin de Entrada/Salida (I/O) del puerto A 4 MCLR Reset y entrada de voltaje de programación. 5 Vss Pin de Alimentación a Tierra (GND) 6 RB0/INT Pin de Entrada/Salida (I/O) del puerto B 7 RB1 Pin de Entrada/Salida (I/O) del puerto B 8 RB2 Pin de Entrada/Salida (I/O) del puerto B 9 RB3 Pin de Entrada/Salida (I/O) del puerto B 10 RB4 Pin de Entrada/Salida (I/O) del puerto B 11 RB5 Pin de Entrada/Salida (I/O) del puerto B 12 RB6 Pin de Entrada/Salida (I/O) del puerto B 13 RB7 Pin de Entrada/Salida (I/O) del puerto B 14 Vdd Pin de Alimentación de 5Vdc 15 OCS2/CLKOUT Salida del oscilador a cristal. 16 OSC1/CLKIN Entrada del oscilador a cristal o fuente externa de reloj. 17 RA0 Pin de Entrada/Salida (I/O) del puerto A 18 RA1 Pin de Entrada/Salida (I/O) del puerto A Tabla 3.1 24
  • 35. El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cual consta de cinco pines I/O y el puerto B, el cual consta de ocho pines I/O como se puede observar en la figura 3.3: Figura 3.3. En total se cuenta con trece pines I/O, los cuales pueden ser programados como entrada o salida según convenga al momento de diseñar un circuito de control. Los pines correspondientes al oscilador (OSC1 y OSC2) y al reset (MCLR) deben ser siempre tomados en cuenta en el diseño de nuestros proyectos. Es por este motivo que damos inicio al estudio de algunos circuitos indispensables para el correcto funcionamiento del microcontrolador PIC. 3.2. El Oscilador Externo. Es un circuito indispensable para el funcionamiento del microcontrolador y el cual además, define la velocidad a la cual va a trabajar. Para hacer funcionar nuestro diseño podemos elegir entre las siguientes cuatro opciones: • Oscilador LP: Oscilador de bajo consumo (Low Power). • Oscilador XT: Cristal / Resonador. 25
  • 36. Oscilador HS: Oscilador de alta velocidad (High Speed). • Oscilador RC: Resistencia / Condensador. En los modos de oscilador LP, XT y HS el cristal debe ser conectado a los pines 15 y 16, Osc2/CLKout y Osc1/CLKin respectivamente, como se muestra en la figura 3.4. Figura 3.4. Los valores de los condensadores cerámicos vienen dados según la tabla que se muestra a continuación: Modo Frecuencia Osc1/CLKin Osc2/CLKout 32 kHz 68 - 100 pF 68 - 100 pF LP 200 kHz 15 - 33 pF 15 - 33 pF 2 MHz 15 - 33 pF 15 - 33 pF XT 4 MHz 15 - 33 pF 15 - 33 pF 4 MHz 15 - 33 pF 15 - 33 pF HS 10 MHz 15 - 33 pF 15 - 33 pF Tabla 3.2 26
  • 37. Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzo como el de la figura 3.5. Figura 3.5. Al conectar el microcontrolador a la fuente de alimentación de 5 Vdc y medir la señal de salida del oscilador XT con un osciloscopio, en el pin 15 (Osc2/CLKout) del microcontrolador, podremos ver la onda generada bajo los siguientes parámetros de medición seleccionados en el equipo: • Voltios/Div: 200mV • Time/Div: 100ns Figura 3.6. 27
  • 38. La lectura de la frecuencia y período en este caso sería la siguiente: • Frecuencia: 3,972 Mhz • Período: 251,71 ns Cristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de los cuales solo tres están implementados de la siguiente manera: Figura 3.7. Pin 1: NC (Este pin no se encuentra conectado internamente) Pin 7: GND Pin 8: Salida TTL Pin 14: +5Vdc En su salida se obtiene un tren de pulsos como se puede observar en la figura 3.8, bajo los siguientes parámetros de medición seleccionados en un osciloscopio: • Voltios/Div: 2V • Time/Div: 100ns 28
  • 39. Figura 3.8. La lectura de la frecuencia y período en este caso sería la siguiente: • Frecuencia: 3,999 Mhz • Período: 250,013 ns El oscilador externo en modo RC resulta ser el más sencillo de todos y por ende el más económico. Su configuración lo hace menos preciso debido a que existe una tolerancia de error en sus componentes, sin olvidar también que la temperatura puede afectar la operación de este tipo de oscilador. Los valores recomendados para este oscilador son los siguientes: • 5 Kohm ≤ R1 ≤ 100 Kohm • C1 > 20 pF 29
  • 40. Figura 3.9. 3.3. Circuito de Reset: El Pin denominado MCLR (Master Clear), siempre debe ser tomado en cuenta cuando se diseña un circuito con microcontroladores PIC. A través de este Pin se podrá reiniciar el dispositivo, si a éste se le aplica un nivel lógico bajo (0V), por lo tanto resulta importante destacar que para que un programa cargado en un microcontrolador se mantenga en ejecución, el Pin MCLR debe estar siempre en un nivel lógico alto (5V). Si deseamos tener control externo del reset de un microcontrolador PIC, debemos considerar el circuito de la figura 3.10: 30
  • 41. Figura 3.10. Este circuito permite reiniciar el microcontrolador cada vez que el pulsador P1 es presionado. 3.4. Consideraciones técnicas de diseño: A continuación veremos algunos circuitos básicos que deben ser tomados en cuenta para el desarrollo de prácticas con microcontroladores PIC. Estos circuitos son muy útiles cuando deseamos visualizar el resultado de una acción programada en el microcontrolador. 3.4.1. Estado Lógico de un pin I/O: Una manera muy sencilla de ver el estado lógico de un pin configurado como salida en cualquiera de los puertos de microcontrolador es a través del uso de LEDs, como se observa en los circuitos de la figura 3.11. 31
  • 42. En el primer circuito, el LED se iluminará solo cuando el estado lógico del pin de salida del puerto sea igual a “1”, es decir, 5 voltios. En el segundo circuito, el LED se iluminará solo cuando el estado lógico de la salida del puerto sea igual a “0”, es decir, 0 voltios. Figura 3.11. Esto significa que si deseamos realizar un programa en Lenguaje Basic encargado de cambiar el estado lógico de un pin específico, en cualquiera de los puertos de un microcontrolador, una forma “básica” de visualizar este cambio es a través del uso de LEDs. 32
  • 43. 3.4.2. Lectura de un estado lógico en un pin I/O: El microcontrolador también nos permite capturar datos o señales externas para luego ser procesadas y convertidas en respuestas que pueden definir una acción específica en nuestros circuitos de prueba. Un ejemplo común podría ser el uso de un pulsador para hacer destellar un led cada vez que éste sea presionado. Si deseamos introducir un nivel lógico bajo (0V), o alto (5V), a una de las entradas de un microcontrolador a través de un pulsador, podríamos considerar los circuitos de la figura 3.12, los cuales nos proporcionan dos formas diferentes de hacerlo: Figura 3.12. 33
  • 44. El primer circuito en la figura 3.12 mantiene un nivel lógico alto (5V) mientras el pulsador permanece abierto. Al presionar el pulsador, el nivel lógico en el pin I/O del puerto pasa a ser bajo (0V). El segundo circuito de la figura 3.12 mantiene un nivel lógico bajo (0V) mientras el pulsador permanece abierto. Al presionar el pulsador, el nivel lógico en el pin I/O del puerto pasa a ser alto (5V). 3.4.3. El Opto-acoplador: El opto-acoplador es un componente muy útil cuando se requiere acoplar circuitos electrónicos digitales con etapas de manejo de potencia o con otros circuitos. Este componente en una de sus versiones, se compone básicamente de un diodo LED el cual se encarga de iluminar un fototransistor, para que éste conduzca corriente a través del colector. Figura 3.13. 34
  • 45. En la configuración de la figura 3.13, cuando en el pin I/O aplicamos un 1 lógico (5V), el LED del opto-acoplador enciende y el fototransistor conduce la corriente a tierra; por lo tanto, en la salida tendremos un 0 lógico (0V). Si apagamos el LED, el transistor no conduce, de tal manera que en la salida tendremos un 1 lógico (5V). En la configuración de la figura 3.14, cuando en el pin I/O aplicamos un 1 lógico (5V), el LED del opto-acoplador enciende y el fototransistor conduce para poner en la salida un 1 lógico (5V). Mientras haya un 0 lógico en la entrada, el fototransistor permanecerá abierto entre el emisor y colector, dando como resultado un 0 lógico (0V) en la salida. Figura 3.14. Una configuración muy común para el control de dispositivos de potencia como motores eléctricos, luces incandescentes, solenoides, etc., se puede ver en la figura 3.15, la cual se basa en cualquiera de los dos circuitos antes mencionados (figura 3.13 y figura 3.14), en la cual se ha incluido un relé a 35
  • 46. través del cual circulará la corriente necesaria entre sus contactos, para hacer funcionar cualquiera de estos dispositivos de potencia. Figura 3.15. 36
  • 47. 3.4.4. Fuente de poder, 5Vdc / 3.3Vdc: En caso de no disponer de una fuente de poder regulada, proponemos la construccion de un diseño sencillo que podemos implementar en todos los proyectos propuestos. En la figura 3.16 se puede observar el diseño de una fuente regulada con salidas de voltaje de +5 Vdc y +3.3 Vdc: Figura 3.16. 37
  • 48. Estructura de un programa. Componentes y operadores en PicBasic. Capitulo IV 4.1.- Estructura de un programa: Para que nuestros programas tengan una apariencia ordenada y se facilite la comprensión del mismo ante otros programadores que deseen realizar mejoras a éste, es necesario establecer una estructura que nos permita identificar fácilmente cada una de las partes que lo componen. A B C D Figura 4.1. En la figura 4.1 se puede observar la estructura básica de un programa hecho en Microcode Studio, y en la cual hemos identificado las cuatro secciones que consideramos más importantes para lograr un programa bien estructurado. 38
  • 49. Sección A: Corresponde al encabezado del programa, en el cual se debe considerar información básica del mismo, como el nombre, la identificación de autor, Copyright, fecha de elaboración o fecha de los últimos cambios realizados, versión del programa que se está realizando, e incluso una breve descripción acerca del objetivo del programa y su aplicación en un determinado circuito electrónico. Es importante resaltar que cada línea del encabezado debe empezar con una comilla simple, en forma de comentario (ver “Sección D”). Sección B: Esta sección empieza en la columna cero del editor de texto de Microcode Studio, y en ella se pueden declarar las definiciones (concepto que estudiaremos mas adelante) y las etiquetas de cada una de las subrutinas que serán programadas. Las etiquetas identifican puntos específicos o subrutinas dentro de un programa. Son definidas por el programador y deben tener al final de cada una de ellas el símbolo de “dos puntos”, que definen el final de la misma. Sección C: Estará destinada para las instrucciones de programa y la misma está separada de la columna cero del editor de texto por una tabulación, es decir, cuando el cursor se encuentra en la columna cero, presionamos una vez la tecla “TAB”, y de esta manera establecemos un espacio mínimo, siempre igual o superior entre la sección B y C. Sección D: Esta destinada para realizar comentarios acerca de la función que estará cumpliendo una instrucción específica en nuestro programa. Cada comentario debe empezar siempre con una comilla simple como se muestra a continuación: ' Define el Oscilador para un Cristal ' de 4 Mhz. Cuando un comentario es demasiado extenso, podemos continuar el mismo en la siguiente línea, siempre que la frase comience con su respectiva comilla. 39
  • 50. Los comentarios ayudan al diseñador a identificar cada línea de programa o cada una de las funciones de cada subrutina, garantizando así una buena documentación en cada uno de los programas que realizamos. 4.2.- Subrutinas: Una subrutina se presenta como un algoritmo separado del algoritmo principal, y estará destinado a resolver una tarea específica. Las subrutinas pueden ser referidas cada vez que sea necesario, llamando a la etiqueta que corresponde a ésta, la cual debe ir siempre al inicio de la misma. Led1: For Z = 0 To 9 LED = Encendido Etiqueta Pause 1000 LED = Apagado Subrutina Pause 1000 Next Z GoTo Inicio End 40
  • 51. 4.3.- Componentes y operadores en PicBasic. PIC Basic cuenta con una serie de herramientas de programación entre las cuales podemos mencionar las etiquetas, variables, identificadores, constantes, comentarios, símbolos entre otras. Algunas de estas herramientas son de uso obligatorio a la hora de realizar un programa, y otras que no son de uso obligatorio, nos facilitarán el trabajo considerablemente. 4.3.1.- Define: La directiva “Define” resulta muy importante en la programación de microcontroladores con PicBasic, ya que establece una serie de parámetros que de no ser tomados en cuenta, causará que nuestros programas sencillamente no funcionen en la mayoría de los casos. Esta serie de parámetros están directamente relacionados con dispositivos externos al microcontrolador. Por ejemplo, si deseamos utilizar un oscilador de diferente frecuencia al valor establecido por defecto (4 Mhz), será conveniente entonces definir la velocidad del mismo utilizando la directiva: Define Osc {frecuencia} De igual forma deben ser considerados estos parámetros para el uso de dispositivos como pantallas LCD, donde se deberán definir los puertos de conexión para el bus de datos y bus de control. Así mismo ocurre para el caso de las comunicaciones seriales o I2C, donde los parámetros también deben ser definidos. Veamos a continuación la tabla de parámetros para el uso de la instrucción Define. 41
  • 52. Parámetro Descripción OSC {frecuencia} Frecuencia del Oscilador en Mhz LCD_DREG {puerto} Puerto de datos LCD LCD_DBIT {bit} Bit inicial del puerto de datos LCD_RSREG {puerto} Puerto para RS (Register Select) LCD_RSBIT {bit} Pin del Puerto para RS LCD_EREG {puerto} Puerto para E (Enable) LCD_EBIT {bit} Pin del Puerto para E LCD_RWREG {puerto} Puerto para RW (Read/Write) LCD_RWBIT {pin} Pin del puerto para RW LCD_LINES {líneas} Número de líneas de la LCD (1,2 o 4) I2C_SCLOUT 1 Interface de Reloj I2C Bipolar Cuando en la transferencia es utilizado un I2C_SLOW 1 oscilador mas lento que 8 Mhz. Tabla 4.1. 4.3.2.- Variables: En las variables podemos almacenar datos temporalmente, los cuales podrán ser consultados o modificados cada vez que sea necesario. Regularmente la definición de variables se hace al inicio del programa y para ello se utiliza la palabra VAR seguida por el tipo de variable según la tabla que mostramos a continuación: Nombre de Tipo de VAR Descripción la Variable Variable A1 Var Bit Toma los valores 0 y 1 unicamente Temp Var Byte Toma valores entre 0 y 255 (8 bits) dig1 Var Word Toma valores entre 0 y 65535 (16 bits) Tabla 4.2. El nombre de la variable es elegido por el programador y el tipo de variable se define según el tipo de dato que se desea almacenar temporalmente. 42
  • 53. 4.3.3.- Arrays: Las variables Arrays tienen un determinado número de “elementos”, definido según el tamaño de la variable. Las variables Arrays tipo Bit, pueden almacenar 256 elementos; las variables Arrays tipo Byte pueden almacenar hasta 96 elementos y las variables Arrays tipo Word hasta 48 elementos, los cuales a su vez pueden ser accesados en cualquiera de los tres casos a través de un índice. Este índice se específica entre corchetes como se muestra en los siguientes ejemplos: Para declarar una variable Array utilizamos el siguiente formato: Dato Var Byte[7] El primer elemento de esta variable es Dato[0] y el último elemento es Dato[7], lo cual significa que hemos declarado una variable array de 8 elementos. En este caso podemos almacenar un byte en cada elemento, siempre especificando el índice. Ejemplo: Almacenar en cada elemento de la variable “Dato” los valores 200, 15, 56, 75, 80, 20, 33, 45. Dato[0] = 200 Dato[1] = 15 Dato[2] = 56 Dato[3] = 75 Dato[4] = 80 Dato[5] = 20 Dato[6] = 33 Dato[7] = 45 En algunos casos se debe verificar la hoja de datos del microcontrolador, ya que la cantidad de elementos que se pueden almacenar en variables arrays tipo Byte o Word puede variar según el modelo del mismo. 43
  • 54. 4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestro programa, facilitando aún más la comprensión del mismo a la hora de verificar su funcionamiento. En la tabla 4.3 se puede observar la forma de declarar una constante. Nombre de la Valor de la CON Constante Constante Temp_Max CON 150 Temp_Min CON 55 Tabla 4.3. 4.3.5.- Símbolos o Alias: Proveen un nombre único y específico a elementos o variables dentro de nuestro programa. Para definir un símbolo, utilizamos la palabra “Symbol”, seguida del alias del elemento, el símbolo de igualdad “=”, y por último el elemento en cuestión: Symbol {alias} = {elemento} Por ejemplo, si deseamos controlar un motor DC a través de uno de los pines del puerto A de un microcontrolador, resultaría mucho mas sencillo referirse a este pin como “Motor”, en vez de referirse a él como “PortA.0”. Entonces, Symbol Motor = PORTA.0 Veamos otros ejemplos: Symbol Relay = PORTB.0 Symbol Sensor = PORTA.0 Symbol LED = PORTA.1 Symbol RC0 = PORTC.0 44
  • 55. 4.3.6.- Operadores Aritméticos: Entre los operadores aritméticos más utilizados tenemos los que se muestran en la siguiente tabla: Operador Descripción Operador Descripción + Suma ABS Valor Absoluto - Resta SIN Seno del Angulo * Multiplicación COS Coseno del Angulo / División MIN Minimo de un número // Residuo MAX Máximo de un número << Desplaza a la Izquierda REV Invertir un Bit Valor de un digito para un >> Desplaza a la Derecha DIG número decimal = Asignación de Valores Tabla 4.4. 4.3.7.- Operadores Binarios: En la siguiente tabla veremos los operadores binarios proporcionados para el Lenguaje PicBasic: Operrador Descripción & AND Lógico | OR Lógico ^ XOR Lógico ˜ NOT Lógico &/ NAND Lógico |/ NOR Lógico ^/ NXOR Lógico Tabla 4.5. Con estos operadores resulta muy sencillo realizar operaciones binarias, como lo demuestra el siguiente ejemplo: Si aplicamos una AND lógica, donde deseamos filtrar los siete bits más significativos del valor almacenado en la siguiente variable: Var1 = %00101001 Entonces, Var1 = Var1 & %00000001 45
  • 56. El resultado de esta operación es Var1 = %00000001 4.3.8.- Operadores de Comparación: Los operadores de comparación normalmente son utilizados con la instrucción If…Them… para realizar comparaciones entre variables o datos extraídos de alguna operación aritmética. Operador Descripción = Igual <> Diferente < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que Tabla 4.6. 4.3.9.- Operadores Lógicos: Los operadores lógicos son utilizados para establecer condiciones entre variables y son utilizados de la misma manera que los operadores de comparación. Operador Descripción AND AND Lógico OR OR Lógico XOR XOR Lógico NOT NOT Lógico NOT AND NAND Lógico NOT OR NOR Lógico NOT XOR NXOR Lógico Tabla 4.7. Ejemplo: If Var1 = 1 and Var2 = 3 And Var3 = 5 Then Goto inicio La condición saltará a la etiqueta “inicio” solo si se cumplen las tres condiciones. 46
  • 57. Primeros Programas con el PIC16F84 Capitulo V Para aprender a programar un microcontrolador resulta importante dar inicio al tema con ejemplos prácticos y sencillos, que nos ayuden a comprender el funcionamiento de la arquitectura del PIC y las instrucciones de programa que se están empleando. El primer paso entonces será realizar el montaje del circuito con base en los conocimientos adquiridos en las páginas anteriores. Se debe tomar en cuenta que aunque en los diagramas de los circuitos que se muestran a continuación, no están presentes los pines de alimentación “Vcc” y “Gnd”, éstos deben ser conectados debidamente a la fuente de alimentación de 5 Voltios. A medida que se van proponiendo ejemplos de aplicación práctica, estaremos estudiando la sintaxis de las instrucciones empleadas en cada proyecto para facilitar la comprensión general de éste, referente a la programación y diseño electrónico. 5.1.- Proyecto #1: A continuación realice el montaje de la figura 5.1, en base al cual realizaremos la programación necesaria para encender dos Leds conectados a los puertos del microcontrolador: Figura 5.1. 47
  • 58. Proyecto # 1 Componentes Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 LED 2 Resistencia de 220 Ohm 2 Fuente regulada de 5 Vdc 1 Tabla 5.1. • El Led 1 se encuentra conectado en el pin RA0 del puerto A, el cual deberá ser configurado como “Salida”. • El Led 2 se encuentra conectado en el pin RB0 del puerto B, el cual deberá ser configurado igualmente como “Salida”. Note que el ánodo del diodo LED se encuentra conectado al pin de salida del puerto, por lo tanto para que encienda el LED debemos hacer salir un 1 lógico por el pin correspondiente. Como los pines de los puertos pueden ser configurados como “entradas” o como “salidas”, es importante tomar en cuenta los registros de configuración de puertos, los cuales para el caso específico del PIC16F84 son dos: TrisA (registro de configuración I/O del puerto A), es un registro de 8 bits, de los cuales los tres más significativos no se encuentran implementados en este modelo de microcontrolador, ya que como se puede observar en el diagrama de pines del dispositivo (figura 3.2), el puerto A solo cuenta con 5 pines (RA0, RA1, RA2, RA3 y RA4). 48
  • 59. Un ejemplo de configuración de los pines I/O del puerto A es el siguiente: Registro TrisA Bit menos 1 1 1 1 0 RA4 RA3 RA2 RA1 RA0 significativo Figura 5.2. 1 = Entrada (Al configurar un bit del registro TrisA en “1”, éste se comporta como entrada). 0 = Salida (Al configurar un bit del registro TrisA en “0”, éste se comporta como salida). Al ver la figura 5.2, se puede observar que el pin RA0 ha sido configurado como salida y el resto de los pines como entrada. En PicBasic, este paso se realiza de la siguiente manera: TrisA = %11110 (“%” para expresar la configuración en Binario), ó: TrisA = $1E (“$” para expresar la configuración en Hexadecimal) “Recordemos entonces que como el Led 1 se encuentra conectado en el pin RA0, el bit correspondiente a este pin en el registro TrisA ha sido configurado como salida”. TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B, ya sea como entrada o como salida, por ejemplo: Registro TrisB 1 1 1 1 1 1 1 0 Bit menos RB7 RB6 RB5 RA4 RA3 RA2 RA1 RA0 significativo Figura 5.3. 1 = Entrada (Al configurar un bit del registro TrisB en “1”, éste se comporta como entrada). 0 = Salida (Al configurar un bit del registro TrisB en “0”, éste se comporta como salida). 49
  • 60. Para el caso particular del puerto B, se puede observar que el pin RB0 ha sido configurado como salida y el resto de los pines como entrada. “Consideramos importante configurar los pines que no estarán en uso como entrada, ya que de esta forma podemos evitar daños en el hardware interno del microcontrolador al experimentar con éste en un tablero de pruebas.” La configuración en PicBasic para el registro TrisB, ajustada al ejemplo de la figura 5.3 sería entonces la siguiente: TrisB = %11111110 (si se desea hacer la notación en binario), ó: TrisB = $FE (si se desea hacer la notación en hexadecimal) Antes de verificar el programa propuesto para este ejemplo, veremos la sintaxis de las instrucciones utilizadas en él, para tener una idea clara de la función que cumple cada instrucción. Esta información puede ser complementada en el capítulo XV, en el cual encontrará la descripción de cada una de las instrucciones utilizadas en cada proyecto planteado en esta edición. Sintaxis de las Instrucciones empleadas en el programa: HIGH Sintaxis: HIGH pin La instrucción “High” pone en uno lógico un pin I/O específico. 50
  • 61. LOW Sintaxis: LOW pin La instrucción “LOW” coloca en cero lógico un pin I/O específico. GOTO Sintaxis: GOTO etiqueta La instrucción “Goto” continúa la ejecución de un programa a partir de la etiqueta especificada (Esta instrucción no tiene retorno). PAUSE Sintaxis: PAUSE periodo La instrucción “Pause” realiza una pausa en el programa por un periodo definido en milisegundos. Veamos el programa en PicBasic: '**************************************** '* Nombre : Proyecto1.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. 51
  • 62. TRISA = %11110 ' Configuración el Puerto A TRISB = %11111110 ' Configuración el Puerto B PORTA = 0 ' Inicializa el puerto "A", es decir, ' se ponen todos los pines en cero. PORTB = 0 ' Inicializa el puerto "B". Inicio: ' Etiqueta de Inicio del programa High PORTA.0 ' Enciente el Led conectado en el pin RA0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 ' Seg. Low PORTA.0 ' Apaga el Led conectado en el pin RA0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 ' Seg. High PORTB.0 ' Enciente el Led conectado en el pin RB0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 ' Seg. Low PORTB.0 ' Apaga el Led conectado en el pin RB0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 ' Seg. GoTo Inicio ' Salta a la etiqueta "Inicio" y se repite el ' proceso. End La instrucción “High” se encarga de poner un nivel lógico alto en el pin especificado seguidamente. En este caso, primero se escribe el puerto y seguido de un punto, se especifica el número del pin en el puerto que deseamos utilizar. La instrucción “Low” es responsable en este caso de poner el pin especificado en un nivel lógico bajo. Al igual que en la instrucción “High”, se debe especificar el puerto y el pin del puerto a ser utilizado. La instrucción “GoTo” realiza un salto hacia una etiqueta específica; en este caso el programa salta a la etiqueta “Inicio” para empezar de nuevo todo el proceso. 52
  • 63. Al escribir el programa en el editor de texto de Microcode Studio, se debe grabar el mismo con el nombre de su preferencia para que éste pueda ser compilado y al mismo tiempo pueda ser enviado al microcontrolador. Observe que para este programa, hemos designado el nombre “Proyecto1.pbp” (figura 5.4). Figura 5.4. Antes de compilar el programa, se debe asegurar de seleccionar el modelo apropiado de microcontrolador PIC, como se observa en la figura 5.5. Luego se compila el programa y se verifica que éste no tenga errores. 53
  • 64. Modelo Compilar Compilar y del uC. Grabar en el PIC Figura 5.5. Seguidamente, se debe proceder a cargar el programa compilado en el microcontrolador con la ayuda del programador de microcontroladores Pic. Al hacer clic en el icono “Compilar y Grabar en el PIC” (ver figura 5.5), el compilador habrá generado un archivo de nombre “Ejemplo1.hex” y seguidamente se abrirá el software “Picall/P16Pro”, como se observa en la figura 5.6: Figura 5.6. En este momento el microcontrolador deberá estar montado en la base del programador en la posición indicada por la figura 5.6. 54
  • 65. Antes de programar el microcontrolador, también resulta conveniente verificar los fusibles de programación, accediendo al botón “Config”, el cual puede ser visualizado en la figura 5.6. En esta sección se debe configurar el tipo de oscilador utilizado en nuestro circuito, así como otras opciones disponibles que comentaremos a continuación (ver figura 5.7). Figura 5.7. En la figura 5.7 se pueden observar tres secciones llamadas “Oscillator”, “Hardware” y “Protection”: • En la sección “Oscillator”, debemos seleccionar el tipo de oscilador utilizado en nuestro circuito electrónico, el cual en este caso es del tipo XT, debido a que el cristal que hemos elegido es de 4 Mhz. • En la sección “Hardware” es posible activar el temporizador “Perro Guardián”, el cual se encarga de reiniciar el microcontrolador en caso de fallas o bloqueos en el programa. Para utilizar el “Watchdog” es necesario diseñar el programa bajo ciertos parámetros, de forma que podamos reiniciar el temporizador “Watchdog” antes de que éste se desborde y provoque un “Reset” en el sistema. Si nuestro programa llegara a fallar, el temporizador Watchdog completaría su conteo y se desbordaría, provocando un “Reset” del sistema. 55
  • 66. En la sección “Hardware” también disponemos de la opción “Power Up Timer”, la cual una vez activada en el microcontrolador, hará que éste no pueda iniciar el programa hasta tanto el voltaje aplicado al circuito sea estable y seguro (ver figura 5.8). 6 5 Voltios 4 3 2 1 0 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 Tiempo Figura 5.8. • En la sección “Protection”, tenemos la posibilidad de proteger el código de programa almacenado en la memoria del microcontrolador. Finalmente hacemos clic en el botón “Program” (ver figura 5.6), para descargar el programa “Proyecto1.hex” en el microcontrolador; inmediatamente se podrá ver el proceso de grabación y verificación de datos, para luego culminar con el montaje del microcontrolador en el circuito de prueba. Estos pasos se deben aplicar en cada uno de los proyectos aquí planteados, o cada vez que se desee realizar una modificación a un programa para obtener siempre mejores resultados sobre el objetivo propuesto en cada actividad. 56
  • 67. 5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin del puerto B, el cual a su vez deberá ser configurado como salida para garantizar el correcto funcionamiento del mismo. En la figura 5.9 podemos observar en detalle la conexión del circuito eléctrico que deberá ser montado. Figura 5.9. Proyecto # 2 Componente Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor de 33 pF 2 LED 8 Resistencia de 220 Ohm 8 Fuente regulada de 5 Vdc 1 Tabla 5.2. 57
  • 68. En el proyecto #1 se pudo observar como es posible encender un led conectado a un pin del puerto A o B en un PIC16F84A, utilizando las instrucciones High y Low. También existen otras formas de poner un “1” o un “0” lógico en un pin configurado como salida; esto se puede lograr de varias maneras: PORTA.0 = 1 ' RA0 = 1 -> (es igual a High PortA.0) PORTA.0 = 0 ' RA0 = 0 -> (es igual a Low PortA.0) Cuando deseamos poner varios pines de un mismo puerto en “1”, podemos utilizar las siguientes opciones: PORTB = %10101010 ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0 Este mismo ejemplo de configuración en hexadecimal: PORTB = $AA ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0 Recordemos que el símbolo “%” expresa la notación en binario, por lo cual se deben expresar los ocho bits a ser cargados en el registro “PortB”. Otra forma de expresar este ejemplo sería colocando la notación en hexadecimal con el símbolo “$”, seguido del valor calculado. Basados en esta información podemos lograr encender y apagar varios leds simultáneamente conectados a uno de los puertos del microcontrolador como lo muestra el montaje de la figura 5.9. Veamos el siguiente programa: '**************************************** '* Nombre : Proyecto2.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** 58
  • 69. Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. TRISB = %00000000 ' Configura el Puerto B como Salida PORTB = %00000000 ' Inicializa el puerto "B". Inicio: ' Etiqueta de Inicio del programa PORTB = %01010101 ' Enciente las salidas RB0, RB2, RB4 y RB6, al ' mismo tiempo apaga RB1, RB3, RB5 y RB7. Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 Seg. PORTB = %10101010 ' Enciente las salidas RB1, RB3, RB5 y RB7, al ' mismo tiempo apaga RB0, RB2, RB4 y RB6. Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 Seg. GoTo Inicio ' Salta a la etiqueta "Inicio" y se repite el ' proceso. End Este programa enciende primero las salidas pares del puerto B y apaga las salidas impares, genera una pausa de 1 segundo (1000 ms) y seguidamente hace el proceso inverso en las salidas, es decir, enciende las salidas impares y apaga las salidas pares para generar nuevamente otra pausa de 1 segundo y así repetir el proceso completo al generar un salto a la etiqueta “Inicio”. 59
  • 70. 5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador pueden ser configurados también como entradas, como se detalla en el contenido del proyecto #1, donde se explica claramente que al poner un “1” en un bit de un registro de configuración de puerto, ya sea TRISA o TRISB, para el caso del PIC16F84A, éste se comportará como entrada. Realice el montaje de la figura 5.10 y analice el programa que se muestra a continuación. Figura 5.10. Proyecto # 3 Componente Cantidad PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 LED 1 Resistencia de 220 Ohm 1 Resistencia de 10K Ohm 1 Pulsador Normalmente Abierto 1 Fuente regulada de 5 Vdc 1 Tabla 5.3. 60
  • 71. IF – THEM – ELSE Sintaxis: If expresión 1 {AND / OR expresión 2} Then etiqueta Con la instrucción If – Them podemos tomar decisiones a lo largo de un programa, basadas en condiciones específicas definidas por el programador. El siguiente programa hace destellar un LED conectado en RB0, solo cuado el pulsador es activado: '**************************************** '* Nombre : Proyecto3.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. TRISA = %11111 ' configura el Puerto A como Entrada TRISB = %00000000 ' Configura el Puerto B como Salida PORTB = $00 ' Inicializa el puerto B Inicio: If PORTA.0 = 1 Then PORTB.0 = 1 ' Pregunta si RA0 = 1, si se cumple ' la condición entonces enciende el Led. Pause 1000 ' Hace una pausa de 1 segundo (1000 ms) Low PORTB.0 ' Apaga el Led Pause 1000 ' Hace una pausa de 1 segundo (1000 ms) GoTo inicio ' Salta a la etiqueta "Inicio" End Para verificar si el pulsador está activado, se pregunta si RA0 = 1. Esto es posible gracias a la instrucción “IF” la cual genera un resultado siempre que la condición planteada se cumpla, y para lo cual debemos utilizar necesariamente su complemento “Then” seguido de la acción a ser tomada. 61
  • 72. En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, se cumple la condición y por lo tanto RB0 = 1, es decir, el LED enciende. 5.4.- Proyecto #4: En este ejemplo empleamos un microcontrolador PIC16F877A, con el cual nos hemos planteado la lectura de ocho pulsadores conectados al puerto B, de tal manera que al activar uno de ellos podemos mostrar un dígito decimal en un Display de siete segmentos. Figura 5.11. 62
  • 73. Proyecto # 4 Componente Cantidad PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 Resistencia de 220 Ohm 8 Resistencia de 10K Ohm 8 Pulsador Normalmente Abierto 8 Display de 7 Segmentos - Cátodo común 1 Fuente regulada de 5 Vdc 1 Tabla 5.4. En el diagrama esquemático de la figura 5.11 se pueden observar ocho pulsadores normalmente abiertos, los cuales una vez activados generan un estado lógico alto en el puerto seleccionado (puerto “B”), el cual ha sido configurado como entrada. El display de 7 segmentos de cátodo común, se encuentra conectado al puerto “D”, donde el bit menos significativo RB0 corresponde al segmento “a” del display, RB1 corresponde al segmento “b”, RB2 corresponde al segmento “c”, RB3 corresponde al segmento “d”, RB4 corresponde al segmento “e”, RB5 corresponde al segmento “f” y RB6 corresponde al segmento “g”. El siguiente programa es una forma básica de tomar una lectura de cada pulsador conectado al puerto “B” y generar un resultado en el puerto de salida al cual hemos conectado un display de 7 segmentos: '**************************************** '* Nombre : Proyecto4.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** 63
  • 74. Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. TRISB = $FF ' Configura el Puerto B como Entrada TrisD = $00 ' Configura el Puerto D como Salida Inicio: ' A continuación se verifica cada pin del puerto B, ' si hay un 1 lógico en alguna de las entradas el ' puerto D se actualiza con el dato correspondiente ' para generar en el Display un dígito decimal. ' gfedcba ' ||||||| If PORTB.0 = 1 Then PortD = %00111111 ' Enciende los segmentos correspondientes ' al dígito “cero” en el display. If PORTB.1 = 1 Then PortD = %00000110 ' Enciende los segmentos correspondientes ' al dígito “uno” en el display. If PORTB.2 = 1 Then PortD = %01011011 ' Enciende los segmentos correspondientes ' al dígito “dos” en el display. If PORTB.3 = 1 Then PortD = %01001111 ' Enciende los segmentos correspondientes ' al dígito “tres” en el display. If PORTB.4 = 1 Then PortD = %01100110 ' Enciende los segmentos correspondientes ' al dígito “cuatro” en el display. If PORTB.5 = 1 Then PortD = %01101101 ' Enciende los segmentos correspondientes ' al dígito “cinco” en el display. If PORTB.6 = 1 Then PortD = %01111101 ' Enciende los segmentos correspondientes ' al dígito “seis” en el display. If PORTB.7 = 1 Then PortD = %00000111 ' Enciende los segmentos correspondientes ' al dígito “siete” en el display. GoTo Inicio ' Salta a la etiqueta "Inicio" End 64
  • 75. 5.5.- Proyecto #5: En el ejemplo a continuación se realiza un conteo ascendente desde cero hasta nueve en un display de 7 segmentos conectado al puerto “D” de un PIC16F877A. Figura 5.12. Proyecto # 5 Componente Cantidad PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cerámico de 33 pF 2 Resistencia de 220 Ohm 8 Display de 7 Segmentos - Cátodo común 1 Fuente regulada de 5 Vdc 1 Tabla 5.5. 65
  • 76. FOR… NEXT Sintaxis: For variable = inicio to final {step {-} incremento} * * Instrucciones… * * Next { variable} La instrucción For…Next se encarga de hacer repeticiones de instrucciones que permanecen dentro del lazo For… Next. El parámetro Step afecta el incremento según el valor asignado después de esta palabra. Si este parámetro es omitido, el incremento es en una unidad. Analice el siguiente programa: '**************************************** '* Nombre : Proyecto5.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz. I Var Byte ' Declaración de la Variable "I" tipo Byte ' Constantes para definir cada dígito decimal en el Display: ' gfedcba ' ||||||| Cero CON %00111111 Uno CON %00000110 Dos CON %01011011 Tres CON %01001111 Cuatro CON %01100110 Cinco CON %01101101 Seis CON %01111101 Siete CON %00000111 66
  • 77. Ocho CON %01111111 Nueve CON %01100111 ' Configuración del Puerto de Salida: TrisD = $00 ' Configura el Puerto D como Salida Inicio: For I = 0 To 9 ' Repetición de Instrucciones dentro del Lazo ' For - Next Call Digito ' Salto con Retorno hacia la etiqueta "Digito" Pause 1000 ' Pausa de 1 segundo (1000 ms) Next I GoTo Inicio ' Salta a la etiqueta "Inicio" Digito: ' Verificación del dígito a ser mostrado en el Display el cual ' se corresponde con el valor almacenado en la variable "I". If I = 0 Then PortD = cero If I = 1 Then PortD = Uno If I = 2 Then PortD = dos If I = 3 Then PortD = tres If I = 4 Then PortD = cuatro If I = 5 Then PortD = cinco If I = 6 Then PortD = seis If I = 7 Then PortD = siete If I = 8 Then PortD = ocho If I = 9 Then PortD = nueve Return ' Retorna una línea después del salto con retorno (Call) End Al iniciar el conteo en el display de 7 segmentos, se puede observar un conteo ascendente que da inicio en cero y se va incrementando en una unidad cada segundo hasta llegar a nueve. Si deseamos realizar el incremento en más de una unidad por vez, tan solo debemos incluir la directiva “Step”, seguido del incremento, es decir, si queremos realizar un incremento de dos unidades por vez, entonces el lazo For – Next se compone de la siguiente manera: 67
  • 78. For I = 0 To 9 Step 2 ' Repetición de Instrucciones dentro del Lazo ' For – Next con incremento en dos unidades. Call Digito ' Salto con Retorno hacia la etiqueta "Digito" Pause 1000 ' Pausa de 1 segundo (1000 ms) Next I Esto significa que el conteo arranca en cero y cada segundo transcurrido se podrán ver los dígitos: “2”, “4”, “6” y “8”. Para realizar un conteo regresivo, el lazo For – Next se compone de la siguiente forma: For I = 9 To 0 Step -1 ' Repetición de Instrucciones dentro del Lazo ' For – Next. Call Digito ' Salto con Retorno hacia la etiqueta "Digito" Pause 1000 ' Pausa de 1 segundo (1000 ms) Next I En este caso en conteo inicia en nueve y decrece en una unidad hasta llegar a cero. 5.6.- Proyecto #6: PicBasic cuenta con una instrucción capaz de generar tonos DTMF (Dual Tone Multifrecuency - Multifrecuencia de doble tono), tonos que se utilizan en telefonía para marcar una serie de números y así poder establecer la comunicación entre dos o más personas. Una aplicación interesante para esta instrucción podría ser el discado de números telefónicos en sistemas de alarma cuando ha sido activado un dispositivo de supervisión, para luego generar un mensaje de voz que nos alerte de dicho evento. Realice el montaje de la figura 5.13 y analice el programa que se muestra a continuación, el cual genera tonos DTMF consecutivos de una serie de dígitos predefinidos. Es muy importante considerar que para generar los tonos adecuadamente el oscilador externo debe ser de 10 Mhz o superior. 68
  • 79. Figura 5.13. Proyecto # 6 Componente Cantidad PIC16F84A 1 Cristal de 10 Mhz 1 Capacitor cerámico de 33 pF 2 Capcitor Electrolítico de 10 uF 2 Parlante de 8 Ohm 1 Fuente regulada de 5 Vdc 1 Tabla 5.6. En la tabla 5.7 se puede observar la frecuencia baja y la frecuencia alta de cada digito entre cero y quince, los cuales se corresponden a su vez con cada uno de los dígitos de un teclado telefónico, como se puede observar en la segunda columna de la misma tabla. Esto quiere decir que si generamos las frecuencias correspondientes al dígito “1” utilizando la instrucción “DTMFout”, obtendremos las mismas frecuencias baja y alta que se generan al pulsar el dígito “1” de cualquier teléfono de tonos DTMF. Si deseáramos generar desde el microcontrolador el tono DTMF 69
  • 80. correspondiente al dígito “0” de un teclado telefónico, entonces, según la tabla 5.7, el dígito a introducir en la instrucción “DTMFout” deberá ser el “10”. Dígito en la Dígito en un Frecuencias Frecuencias Instrucción Teclado Bajas Altas DTMFout Telefónico 1 1 697 HZ 1209 HZ 2 2 697 HZ 1336 HZ 3 3 697 HZ 1477 HZ 4 4 770 HZ 1209 HZ 5 5 770 HZ 1336 HZ 6 6 770 HZ 1477 HZ 7 7 852 HZ 1209 HZ 8 8 852 HZ 1336 HZ 9 9 852 HZ 1477 HZ 10 0 941 HZ 1209 HZ 11 * 941 HZ 1336 HZ 12 # 941 HZ 1477 HZ 13 A 697 HZ 1633 HZ 14 B 770 HZ 1633 HZ 15 C 852 HZ 1633 HZ 0 D 941 HZ 1633 HZ Tabla 5.7. Figura 5.14. 70
  • 81. Antes de empezar a programar, vamos a verificar la sintaxis de la instrucción DTMFout: DTMFout Sintaxis: DTMFout pin, {On-ms, Off-ms}, [tono, tono,...tono] La instrucción DTMFout genera tonos DTMF en secuencia y a través de un puerto cualquiera del microcontrolador. Pin: especifica el pin del puerto en el cual se emitirán los tonos DTMF. On-ms: es una variable o constante que especifica la duración de cada tono en milisegundos. En caso de no utilizar este parámetro, el tiempo por defecto de cada tono es de 200 ms. Off-ms: es una variable o constante que especifica el tiempo en milisegundos del silencio que hay entre cada tono. En caso de no utilizar este parámetro, el tiempo en silencio entre cada tono por defecto será de 50 ms. Tono: puede ser una variable o constante entre 0 y 15, que especifica el tono que debe ser generado. 71
  • 82. Programa en Pic Basic: '**************************************** '* Nombre : Proyecto6.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Año) * '* Fecha : Fecha * '* Versión : 1.0 * '**************************************** Define Osc 10 ' Define el Oscilador en 10 Mhz. TRISA = $FE ' Configura el pin RA0 como Salida ' y el resto de los pines como entrada. Inicio: DTMFOut PORTA.0, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] Pause 2000 ' Genera una pausa de 2 segundos. DTMFOut PORTA.0, 400, 150, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] Pause 2000 ' Genera una pausa de 2 segundos. GoTo Inicio ' Salta a la etiqueta "Inicio". End 72
  • 83. Observe que en la primera instrucción “DTMFout”, después de la etiqueta “Inicio”, no se especifica la duración de cada tono y el tiempo en silencio entre cada tono. Esto significa que el microcontrolador genera cada tono con una duración de 200 milisegundos por defecto, y un tiempo en silencio entre cada tono de 50 milisegundos como se muestra en las figuras 5.15 y 5.16 respectivamente: Figura 5.15. 73
  • 84. Figura 5.16. La segunda instrucción “DTMFout”, después de la etiqueta “Inicio”, tiene definido un tiempo de duración para cada tono de 400 milisegundos (figura 5.17), y un tiempo de espera entre cada tono de 150 milisegundos (figura 5.18). Estos tiempos pueden ser ajustados a conveniencia cada vez que sea necesario. 74
  • 86. 5.7.- Proyecto #7: En este proyecto estudiaremos la instrucción “Button”, la cual es utilizada para la eliminación de rebotes en pulsadores o para efectuar repeticiones en un botón, como sucede en el caso de los teclados de las computadoras, en las cuales si dejamos presionado un botón o tecla, la misma se repite indefinidamente a una frecuencia específica, la cual puede ser variada fácilmente como lo demostraremos a continuación. Antes de empezar, veamos la sintaxis de la instrucción Button: Button Sintaxis: Button pin, estado, retardo, rango, variable, acción, etiqueta La instrucción “Button” elimina los rebotes de un “pulsador” o “switch”, y genera auto-repetición. Pin: especifica el pin del puerto en el cual será conectado el pulsador. Estado: indica cual es estado lógico que debe ocurrir cuando el pulsador es presionado (0 o 1). Si es 0, el pulsador deberá ser activo-bajo y si es 1, el pulsador deberá ser activo-alto (Ver figura 5.19). 76