0% encontró este documento útil (0 votos)
503 vistas105 páginas

Mis Primeros Programas 16f628a

Primeros programas con los pic 16f628a

Cargado por

Joseph Baltazar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
503 vistas105 páginas

Mis Primeros Programas 16f628a

Primeros programas con los pic 16f628a

Cargado por

Joseph Baltazar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, TODOPIC rocontroladores => Mensaje Microcontroladores PIC => Primeros pasos - Ini Suky en 05 de Febrero de 2009, 21:18:42 Titulo: Mis primeros programas en ASM. PIC16F84A y PIC1GF628A/648A Publicado por: Suky en 05 de Febrero de 2009, 21:18:42 Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A La idea de este tutorial es ayudar a los que recién estén empezando, aqui mostraremos como comenzar. Usaremos en primer lugar el microcontrolador PICA6F84A, porque es el que por lo general se usa en la ensefianza. Comenzaremos explicando como esta constituido, los terminales, manejo de corrientes de los puertos, osciladores externos, circuito de reset, memoria de programa y memoria de datos. Luego iremos a lo interesante, que es la programacién, nuestros primeros programitas, de los cuales se tratard de explicarlos detalladamente, el funcionamiento y los registros que se usan en cada caso.- INDICE El PICi6FB4a ‘+ Introduccién (http://www. todopic.com.ar/foros/index. php?topic=24720.msg201393#msg201393) ‘+ Mi Primer Programa, control de un led (http://www.todopic.com.ar/foros/index.php? topic=24720,msg201396#ms9201396) + Creacién de Demoras, Led titilando (http://www. todopic.com.ar/foros/index php? topic=24720,msg201398#ms9201398) + Creacién de Tablas, Control Display 7 Segmentos (http://www.todopic.com.ar/foros/index.php? topic=24720,msg201401 #msg201401) + Direccionamiento Indirecto, Control Display 7 Segmentos (http://www .todopic.com.ar/foros/index.php?topic=24720.msg201402#msg201402) + Control de varios Displays 7 Segmentos con multiplexign (http://wv.todopie.com.ar/foros/index. php ?topic=24720,msg201403#ms¢201403) + Control de varios Displays 7 Segmentos con 7415164 (http://www.todopic.com.ar/foros/index.php?topic=24720.msg213264#msg213264) + Interrupciones, Registros y guardado ternporario de STATUS y W (http://www .todopic.com.a/foros/index. php?topic=24720,ms9201405#ms¢201405) + Interrupcién TMRO, modo Temporizador (http://www. todopic.com.ar/foros/index. php? topic=24720.msq201407#msg201407) + Interrupcién TMRO, modo Contador (http://www.todopic.com.ar/foros/index.php? topic=24720,msq201408#ms9201408) + Interrupcién RBO, Control de Led (http://www.todopic.com.ar/foros/index.php? topic=24720.msg201409#ms9201408) + Interrupcién RB4 a RB7, Control Teclado Matricial (http://www.todopic.com.ar/foros/index.php? tople=24720,msq201410#ms9201410) + Control del LCD, Pentalla de Cristal Liquide (http://www todople.cor.ar/foros/index php? topic=24720.msg201411#msg2014i1) * Comunicacién RS232 (http://www.todopic.com.ar/foros/index.php?- topic=24720,msg201413#ms9201413) ‘Todas las simulaciones hechas en proteus, aqul (http://www.mediafire.com/?rxcjmjvltjm) (Para el PICL6F84A) El PIC16F628A/648A + Introduccién (http://mww.todopic.com.ar/foros/index. php?topie=24720.msg204908#msg204908) + Timer + Ejemplo (http://www.todopic.com.ar/foros/index.php? topic=24720.msg204910#msg204910) ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 si05 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, + Timer2 + Ejemplo (http://www todopic.com.ar/foros/index.php? topic=24720.msg204912#msg204912) + Médulo de comunicacién serie (Usart) + Ejemplo (http://www.todopic.com.ar/foros/index.php? topic=24720.msg204913#msg204913) + Comparadores analégicos + Ejemplo (http://www.todopic.com.ar/foros/index.php? topic=24720.msg204915#msg204915) ‘+ Médulo CCP. Introduccién (http://www.todopic.com.ar/foros/index.php? topic=24720.msg204920 #msg204920) + Modo Captura + Ejemplo: Medir Frecuencia (http://www. todopic.com.ar/foros/index.php? topic=24720.msg204920#msg204920) + Modo Comparacién + Ejemplo: Sefial de frecuencia variable (http://www.todopic.com.ar/foros/index.php?topic=24720.msg207734#msg207734) + Modo PWM + Ejemplo: Sefial de 2 Frecuencias distintas (http://www. todopic.com.ar/fores/index.php?topic=24720.msg207737#msg207737) + 2° Ejemplo PWM. Variando el Ciclo de Trabajo.- (http://www.todopic.com.ar/foros/index.ohp? topic=24720.msg207739#msg207739) + Mas Informacién (http://www.todopic.com.ar/foros/index.php? topic=24720.msg207741#msg207741) + COMUNICACION IR - PIC16F628 Y PIC12F629 (http://www.todopic.com.ar/foros/index.php? topic=24720.msg224696#msg224696) realizado por beto1234 (http://www.todopic.com.ar/foros/index.php?action=profile;u=21383) Herramientas Software para escribir nuestro cédigo y compilar: MPLAB (http://www.microchip.com/stellent/ideplg? IdcService=S$_GET_PAGE&nodeld=1406&dDocName=en019469&part=SW007002) Software para simular: Proteus (http://www.labcenter.co.uk/download/prodemo_download.cim) Una plaquita programadora. Software para grabar nuestro PIC, se puede usar el WinPic800 (http://mww.winpic800.com) o el Icprog (htep://www.ic-prog.com/download.html) =) Aqui dejo un tutorial de como crear un proyecto en MPLAB, compilar y simular. Un programador de PIC sencillo que pueden armar (Programador JDM ~ Serial)(circuito, PCB para hacer le plaqueta y una pequefia explicacién de cémo grabar con WinPIC80O) y un tutorial para crear placas de circuito impreso (PCB) por el método de la plancha ---> Tutoriales (http://www.mediafire.com/file/ak3zioShl2e/Para Comenzar.rar) Datasheets DATASHEET del PICL6F84A (http://ww1.micrachip.com/downloads/en/devicedoc/35007b. pdf) DATASHEET del PIC16F628A/648A (http: //host.nigde,edu.tr/muzam/PIC16F648A, pdf) ConfigPIC (http://www.mediafire.com/file/z201jymSzzm/ConfigPIC.rar): Software para realizar el cédigo automaticamente a partir de una interfase de configuracién. (http://img135.imageshack.us/img135/3100/54953366.th.jpg) (http://img135.imageshack.us/my.php? image=54953366,jp9) Titulo: Intreduccién Publicado por: Suky en 05 de Febrero de 2009, 21:20:10 Introduccion: El PICL6F84A esta fabricado en tecnologia CMOS, pose memoria FLASH, y consumo bajo de potencia, Esté compuesto basicamente de una memoria ROM (1024 palabras de memoria de programa), una memoria RAM (de acceso aleatorio, 68 bytes), lineas de entrada y salida (2 Puertos) y una légica de control que coordina la interaccién de los demas bloques. _wwtodopie.com arlforosindex php?PHPSESSID=pvi9ngkqouregabqk0igd004Aacton=prinipage:topic=24720.0 20s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Estos micros pertenecen a la gama media y dispones de un set de 35 instrucciones, tipo RISC (Computador con Set de Instrucciones Reducido) pocas pero muy poderosas.- Algunas funciones especiales que dispone este PIC: + Temporizador programable (Timer). Si se quiere medir periodos de tiempo entre eventos, generar temporizaciones o salidas con frecuencia especifica, etc. + Perro Guardién o Watchdog. Consiste en un temporizador que, cuando se desborda ya pasa por 0, provoca un reset automatico, utilizado para sistemas que no tienen control de un supervisor, y al bloquearse el micro se resetea. Si se utiliza el cédigo debe resetearlo antes de que se desborde. + Memoria EEPROM de 64 bytes, para guardar datos que no se alteran a pesar de quitar la alimentacién, ‘+ Interrupciones, cuando una sefial externa, o una condicién interna activa una linea de interrupcién, dejando de lado la tarea que esta ejecutando, atiende dicha interrupcién y luego continua con lo que estaba haciend. + Proteccién ante fallo de alimentacién. Se trata de un circulto que resetea al micro cuando el voltaje Vad es inferior al minimo. + Estado de bajo consumo. Sleep. Si el micro debe esperar mucho tiempo sin hacer nada, posee una instruccién especial, Sleep, que lo pasa al estado de reposo. Al activarse una interrupcién se “despierta” y reanuda su trabajo. (Reset externo, desbordamiento de Watchdog, interrupcién por BO, interrupcién por cambio de nivel en RB4 a RB7, interrupcién por escritura completada en EEPROM) Veamos el diagrama de pines, para ver como estén distribuidos sus pines. Este microcontrolador cuenta con dos puertos configurables como estradas y salidas, y consta de 18 pines los cuales se encuentran asignados de la siguiente manera (attp://img150.imageshack.us/img150/3674/pici6‘84aab3 jpg) El puerto A tiene solo cinco pines, el pin 3, ésea, RA4/TOCKI puede ser configurado a su vez como entrada/salida 0 como temporizador/contador, Cuando es salida se comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd de 1 Kehm. Cuando se configura como entrada, funciona como disparadar Schmitt Trigger por lo que puede reconacer sefiales con un poco de distorsién. El puerto B tiene 8 pines que pueden ser configurados como entrada/salida. RBO puede programarse ‘ademas como entrada de interrupcién externa. Los pines RB4 a RB7 pueden programarse para responder a interrupciones por cambio de estado y los pines RB6 y RB7 se corresponden con lineas de entrada de reloj y entrada de datos cuando esta en modo programacién. MCLR/Vpp, es la entrada de reset si esta a nivel bajo, también es habilitador de tensién de programacién. Cuando su tensién es Vad el PIC funciona normalmente. \Vss y Vdd, son los pines de masa y alimentacién. La tensién de alimentacion esta comprendida entre los 2y 5.5 Volt. OSC1/CLKIN y OSC2/CLKOUT, pines de entrada externa de reloj y salida de oscilador a cristal respectivamente.- Capacidad de corriente de los puertos. La maxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero es de 25 mA y modo fuente de 20 mA. La maxima capacidad de corrlente total de los puestos es, Puerto A: Modo sumidero 80 mA; Modo fuente 50 mA. Puerto B: Modo sumidero 150 mA; Modo fuente 100 mA. El Oscilador externo. Es un circulto externo que le indica al micracontrolador la velocidad a la que debe trabajar. Puede utlizar cuatro tipos distintos: RC, Oscilador con resistencia y condensador (Poco preciso) XT, Cristal de cuarzo. HS, Cristal de alta velocidad LP, Cristal de baja frecuencia y bajo consumo de potencia Al momento de programar un micro se debe especificar que tipo de oscilador se usa. Internamente la frecuencia del oscilador es dividida por 4, asi que si temeos un oscilador de 4 MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instruccién se ejecuta cada 1 us. Aqui utilizaremos un cristal XT de 4 MHz que debe ir acompafiado de dos condensadores: (htep://img264.imageshack.us/img264/7666/osciladorcy3.bmp) Reset. EI PIC 16F84A posee un temporizador interno conectado al pin de reset, que funciona cuando se da alimentacién al microcontrolador. Esto hace que al encender el sistema el microcontrolador quede en reset por un tiempo mientras se estabilizan todas las sefiales del circulto. Para tener control sobre el reset se utiliza el siguiente circulto: ww odie. com arlfrosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004Aacton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, (http://img156.imageshack.us/img156/801/resetze3.bmp) ‘Titulo: Estructura interna del Microcontrolador Publicado por: Suky en 05 de Febrero de 2009, 21:20:56 Estructura interna del Microcontrolador. Arquitectura del PIC, existen dos arquitecturas, la clésica de Von Neumann y la arquitectura Harvard, esta ultima es la que usan los PIC’s. Dispone de dos memorias independientes, una que contiene solo instrucciones y la otra solo contiene datos. Ambas disponen de sus respectivos buses de acceso y es posible realizar operaciones de acceso simulténeamente en ambas. (http://img217.imageshack.us/img217/4196/arquitecturapicxy4.jpg) Memoria del programa. Aqui almacenamos nuestro programa o cédigo que debe ejecutar, en el PICLEFB4A es FLASH, es répida, de bajo consumo y alta capacidad de almacenamiento. Se divide en 2048 posiciones, pero este PIC solo tiene implementadas 1024 posiciones, de 0x00 hasta Ox3FF. (http://img204.imageshack.us/img204/7706/memoriadelprogramawks jpg) Cuando ocurre un reset, el contador de programa (PC) apunta a la direccién 0x00, y el micro inicia nuevamente, Aqui se debe escribir todo lo relacionado con la iniciacién del mismo, por ejemplo configuracién de puertos, etc. Si ocurre una interrupcién PC apunta a la direccién 0x04, y aqui debemos escribir el cédigo necesario para atender a dicha interrupcién Memoria RAM estatica. Donde se encuentran los 24 registros especificos (SFR) y 68 registros de propésito general (GPR). Se halla dividida en 2 Bancos de 128 bytes cada uno. (http: //img516.imageshack.us/img516/7530/memoriaramii2.jpa) ‘Algo que se debe tener en cuenta es la pila o Stack, que consta de 8 posiciones, cada posicién contiene la direccién y datos de la instruccién que se esta ejecutando, asi cuando se eecuta una llamada call 0 una interrupcién, el PC sabe donde regresar. (Limitar las llamadas anidadas) Titulo: Primer Programa Publicado por: Suky en 05 de Febrero de 2009, 21:22:06 Comenzando con la creacién de nuestro cédigo: A continuacién vamos a desarrollar nuestro primer programa. Considero que se tiene conocimiento del lenguaje Assembler, si no es asi se puede leer el tutorial ASM desde cero (http://www.todopic.com.ar/foros/index.php?topic=23623.0) de este mismo foro. Este activaré un led conectado a RBO siempre que el interruptor conectado a RAO este cerrado, Para ello vamos a necesitar el siguiente circuito: (htep://img217.imageshack.us/img217/282/hardcontrolledja0. bmp) En RAO tenemos conectado un pulsador de forma que cuando lo pulsemos se introduzca un cero légico en el pin y cuando no lo pulsemos se introduzca un une Iégico, Tenemos un Led con su correspondiente resistencia limitadora de corriente en el pin RBO. grama de Flujo: (heep://img19.imageshack.us/img19/7125/controlledtz4.jpg) Primero que nada debemos especificar con que microcontrolador estamos trabajando, esto lo realizamos ¢s las dos primeras lineas: Céeiga: ASM 2. | List penersaa 3. | #include PIGFBAA. ine En el archive P16F84A.inc se encuentran las definiciones de las direcciones de los registros especificos, los bits utilizados en cada registro y los fusibles del micro. Configuracién de fusibles. Hay ciertos aspectos del PIC que han de ser activados o desactivados mediante hardware a la hora de programarlo. Esto quiere decir que no se pueden volver a cambiar hasta que el chip no se reprograme de nuevo. El PICL6FB4A dispone de 4 fuses (los modelos superiores _ ww odie. com arlfrosindex php?PHPSESSID=pvi9ngkqoureggbqk0Bigd0048acton=prinipage:topic=24720.0 anos. 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, tienen mas). Cada fuse activa o desactiva una opcién de funcionamiento. OSC: Este fuse controla el modo de oscilacién que usard el PIC para funcionar. Como ya sabemos, e! oscilador se puede configurar de 4 maneras distintas, dependiendo de la velocidad y del tipo de circuito oscilador empleado. WDT: El famoso "perro guardién” del PIC se configura aqui, Esta es una capacidad del microcontrolador de autorresetearse. PWRT: Si activamas este fuse, lo que conseguimos es que se genere un retardo en la inicializacién del microcontrolader. CP: Activando este fuse tendremos la garantia de que el cédigo que escribamos en el PIC no pueda ser lefdo por otra persona, para que no nos lo copien, modifiquen, etc. (Code Protection). Esto no impide que el PIC funcione como siempre, ni que no se pueda sobrescribir su contenido Céaig: AS CONFIG _€PLOFF & _WDT_OFF & _PWATE_ON & _xT_osc Definicién de variables que utilizaremos en nuestro proyecto. En este caso solo definiremos bits, por ejemplo Led y Pulsador. Para organizar nuestro programa lo estructuraremos de la siguiente manera: Nivel Directiva Operandos_; Comentarios Céeigo: ASM 1, | s709* Definicton de variables +++ 2. | Led equ 8 3. | Pulsador equ ® © Defininos Pulsador como el bit @, en este caso sera pare PORTA Configuracién de puertos. Para la configuracién necesitamos los siguientes registros: STATUS > 0x03; PORTA > 0x05; PORTB > 0x06; TRISA > 0x86 y TRISB > 0x86. Por defecto los puertos quedan configurades como entradas de datos y si se quiere cambiar hay que configurarlos. Esto se realiza con los registros TRISA y TRISB, teniendo en cuenta que si se asigna un cero (0) 2 un pin, quedara como salida y si se asigna un uno (1), quedara como entrada. En nuestro caso se necesita colocar TRISA igual a 11111 (0 se puede dejar por default) y TRISB 11111110. Ahora bien, cuando el PIC arranca se encuentra en el Banco 0, TRISA y TRISB se encuentran en el Banco 1, entonces debemos cambiar de Banco, Esto se realiza con él bit RPO del registro STATUS. Si este se pone un cero a RPO, estaremos en el Banco 0, Si se coloca un uno, estaremos en el Banco 1 Registro W: es el registro mas importante que tiene el microcontrolador y es denominado ACUMULADOR. Cécigo: ASM 1, | 520" conftguracton de puertos *** 2. |Reset org 9x00; Agu contenzo et micro. 3. | goto inicio; Salto @ inicio de mi prograna.- 4. | org @x®5__; Origen det eédigo de prograna.- 5. |Inlcto bsf — STATUS,RPO__—_ Pasanos de Banco @ a Sonco 1 6. | novia 9°11 3 Muevo 1111 a W.- 7.| fovf TRISA } Cargo en TRISA, 3 | novi 9°11111110" ». | rovif — TRISB 10. | bef STATUS RP; Paso del Bonco 1 at danco @ u. | bef — PORTB,Led = Comienza apagodo.- Ya configurado nuestro PIC, vamos a realizar la rutina que ejecutara Beige: ASM 1, [97% control de Lea *** 2. | Bucie PORTA,Pulsador ; Preguntanos si esta en @ Logice 3. | pagar 3 Esta 0 1 Logico, Apaganos Led.- a) onr®, Led 5 Esta a @ Logico, Encendenos Led. 5. | aucle } Testeanos nuevonente la condicion del Pulsador 8 | goto aucle 1 Testeomos nuevanente La condieton det Pulsador.- ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 sii0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, ae. | end Aqui solamente en un bucle infinite testeamos continuamente el estado del pulsador, y segin su estado se encenderd o apagaré el Led.- Titulo: Re: Mis primeros programas. Manual PIC1GF&4A Publicado por: Suky en 05 de Febrero de 2009, 21:2¢ Programa completo: Céaigo: ASM 1. [5 "** encobezado **** 2, | ist petersea 3, | include PIL6FB4A.inc 4. |_cowriG —_c>_oFF & _Wor_oFF & ef PWRTE_ON & _xT_OsC fiction de variables **** eq © «=; Defininos Led como el bit cero de un registro, en este caso 7, | Pulsador equ @ ~—=; Defininos Pulsador cono el bit @, en este caso sera pare PORTA 8. | :**** Configuracion de puertos *** 9. [Reset org 9x00; Aqui conienzo el micro. 10. | goto Inicio; Salto o inicto de mi prograna.- 11. | ore 5; Origen det codigo de prograna.- 42, |Intclo bs STATUS RPO; Pasanos de Banco @ a Sanco 1.~ 2. | novia 6°11121) 5 Muevo 11111 a Wi 18. | ovuf TRIS 3 Corgo en TRISA, 15. | novi °11111110) 16. | rovnf TRISB v7. bef —STATUS,RP@——; Paso det Banco 1 al Banco 18. | bef PORTB,Led i Comienzo apagode. as. | + control de Led *=** 20. |Bucle btfse PORTA, Pulsader ; Preguntonos si esta en @ Logica. 21. | goto Apagar } Esta a 1 Logico, Apaganos Led. 22.) sf PORTB, Led } Esta a @ Logtco, Encendenos Led.- 23. | goto Sucle 5 Testeanos nuevanente La condicion det Pulsador.- 24. | 25. |Apagar bef PORTB, Led Apaganos Led. 26. | goto ucle steanos nuevanente La condicion del Pul 27, | 28. | end Bueno aqui ya tenemos nuestro programita terminaco, solo falta compilarlo y simularlo para detectar errores, esto esta minimamente explicado en el tutorial del Utilitario MPLAB adjuntado al principio. Se adjunta el circuito realizado en Proteus para simulacién.~ Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 21:26:30 Creacién de Demoras: Ciclo de maquina: Es la unidad basica de tiempo que utiliza el microcontrolador y equivale a 4 ciclos de reloj. Osea, si tenemos un osclador de 4 Miz, el ciclo de reloj seria de 250 ns y el ciclo maquina de 1 us Las instrucciones del microcontrolador necesitan 1 ciclo maquina excepto algunas excepciones, como ‘son los comandos que incluyen saltos (goto, call, btfss, btfsc, return, etc) que necesitan dos ciclos maquina ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos: 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Demoras mediante lazo simple Ccécigo: ASM 2. | Denara_exus 2. | roviw 0x% ganos valor XX que controle duracten (1) 3 | owif Contador ricianos Contador (1) 4, | Repeticion ) 6. | goto Repeticion es 8, repetinos (2) 7.| return 4 Regresamos de La subrutin Entre paréntesis se muestra el nimero ¢e ciclos que demora cada instruccién.- De manera que el ndmero de ciclos de instruccién Tsub consumidos por la rutina, incluyendo los 2 ciclos de la llamada (CALL) serén Tsub = [2 +141 + (OxXX- 1)*(1 + 2) + 2 + 2] ciclos = (3*OxXX + 5) *Tey Donde Tey es la duracién en segundos de un ciclo de instruccién. Utiizando un oscilador de 4 MHz la mayor duracién posible es de 770 us, con OxXX = OxFF- Demoras mediante Lazos anidados Para lograr demoras de mayor duracién deben utllizarse lazos anidados, poniendo un lazo de demora dentro de otro. Céeigo: ASM 1. | Denera_xx 2. | roviw 0x00 2a) 3. | ovif Contador 3a) 4, | Repetictont 5. | roviw @xY¥ 5a) 6. | ovif Contador? @ 7, | Repeticion2 8. | decfez Contador2,2 5 (1 sino sale, ? st sol ». | goto Repeticion2 @) 1. | decfs2 Contador, 1 3 (1 st no sale, 2 st sale) 1.) goto Repeticiont @ 2. | return :@ La duracién de esta rutina en ciclos de reloj seré Tsub = 2+ 1+ 1+ (OxxX)*[L +1 + (OxYY- 1)*(1 +2) 42+ 142] + (1414 (OXVY- M142) 4 24242] ciclos Lo cual se puede simplificar como sigue Tsub = [0xXX#((OxYY - 1)*3 + 7) +5] Tey En este caso el maximo que se puede conseguir es de aprox. 196 milisegundos.- Bueno ahora que se entiende como se realizan las demoras, les adjunto un programita que obtiene el cédigo necesario para una pausa, ingresando el valor de la misma y la frecuencia del oscilador utilizado- ‘Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 21:39:57 Ejempl En este ejemplo se explicard como calcular demoras. Se haré titilar un led conectado a RBO siempre que el interruptor conectado a RAO este cerrado. Diagrama de Flujo: (http://img19.imageshack.us/img19/9232/ledtitilandosys.jpa) Céeigo: ASM alse 2. | List p-16Fsea 3. | Finclude PusFeas. ine Encabezado ** ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 71105 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A 4. | CONFIG _CP_OFF & _WOT_OFF & _PWRTE_ON & _xT_OSC 5. |=" pefinicton de variables **** 6. |Contadord equ. &XOC_—_ SeLeccionanos posicion en La menoria RAY (GPR) para guardar 7 | j registro utiltzado pare denora.- 8. |Contador2 equ «= @x@D_—— Registro utiLtzade en denora.- 8. | Led eq —@ ——_; Defininos Led cono el Bit cero de un registro, en este caso PORT. 18. | ulsador eq @ 5 Defininos Pulsador como el bit 8, en este caso sera para POR an. | ;**** Configuracion de puertos *** 42. |Reset org XB Agu conienzo el micro a. | goto Inicio; Salto inicio de mi programa. as. | org 8x85; Origen det codigo de programa 45. | tnicto bst —STATUS,RP® 5 Posanos de Banco a Banco 1 Jeovim b'znaa1 3 Muevo 11211 @ W.~ | owt TRISA 3 Cargo en TRISA. | moviw b'12111110 | rovnf TRISE | bef STATUS,RP®—— Paso del Banco 1 al Banco | bef PORTB,Led = Comienza apagado.- | s2¥4* controt de ted *=+* |bucte btfsc PORTA,Pulsador ; Preguntanos si esta en @ Logico.- goto Apagar Esta a 1 Logico, Apaganos Led. ESRENERERSES BESS sf PORTB, Led 3 Esta a @ Logico, Encendemos Led. | call besora_15ens; Montenenos prendido 158 milisegundos | bef PORTB, Led 3 Apaganos Led | call esora_asens ; Apagonos durante 150 ms, Ya realizonos un tittlo.~ | goto Bucle | Testeamos nuevanente La condicton del Pulsodor | { |Apagar bef PORTB, Led sApaganos Led.~ 22. goto ucle j Testeanos nuevonente La condicion del Pulsador.~ | 33. | :*** benora == 36. | Denora_asons 35. | rovim @xFF z 36. | sow Contador } Inictonos contadord.~ 37. | Repeticiona 38. fovlw @xc3 ; 39. | ovif contador? 5 49, | Repeticion2 a. aects2 Contador?,1 5 Decrenenta Contador? y si es @ sale.- a2. | goto Repeticion? 3 Si no es @ repetinos ciclo. a. | decfse Contador, 2 + Decrenenta Contador 4a. | goto Repeticiont 3 Si no es cero repetinos ciclo. 4s. | return 3 Regresa de La subrutina. 4s. | a. end Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en OS de Febrero de 2009, 21:41:34 Creacién de Tablas: Control de un Display de 7 Segmentos. Un Display es una coleccién de Leds ubicados de forma estratégica, Si se los agrupa unlendo sus catodos seré ce CATODO COMUN, o bien agrupando sus énodes, un Display de ANODO COMUN, Por otro lado estos Leds pueden ser fabricados en forma de Puntos o Segmentos, tal es asi que se encuentran Display de 7 Segmentos, como los de la imagen: (http://img89.imageshack.us/img89/8063/display7segnp1.jpg) El programa que realizaremos leerd la cantidad de veces que se activa un pulsador y mostraremos el resultado. Conectaremos el Display en forma directa, es decir conectando el puerto B del micro a los pines del Display, y luego encender cada uno de los segmentos del Display para visualizar el valor correspondiente. Para ello crearemos una tabla que contenga los distintos cédigos para el numero que wv odopic.com arlforasindex. php?PHPSESSID=pvi9ngkqeu2reggbak0Blgd0048action=prinipage;toic=24720.0 anos: 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, necesitemos visualizar. (http://img516. imageshack.us/img516/3756/harddisplaysimplewb0.bmp) Es obvio que con un solo display solamente podremos contar de 0 2 9. Diagrama de Flujo: (http://img4 imageshack. us/img4/8099/displaysimpleth3 .th.jpg) (http://imgd.imageshack.us/my. php? image=displaysimpleth3 jpg) ‘Antes de continuar tratare de explicar algunos registros importantes: EI PC. Direccionamiento del programa: Especifica la direccién de la instruccién que se ejecutara. Consta de 13 bits, con lo que es posible direccionar hasta 8K palabras, pero en el 16F84A solo se implementa 4k. (http://img204.imageshack.us/img204/4632/contadorpenr4.jpg) La parte alta del contador de programa (PCH) no se puede acceder directamente, ella debe cargarse desde los 5 bits mas bajos del registro llamado PCLATCH (direccién 0x08), En la creacién de tablas, la posicién a leer de la misma se realiza con el control del registro PCL. Este registro es de 8 bits, por lo que direcciona solo 256 posiciones, por ello se debe tener en cuenta la posicién de la tabla en la memoria de programa o también controlar los bits mas significativos de PC (Si nuestra tabla tiene mas de 255 posiciones, si o si debemos manejar estos bits [PCLATCH]). Para devolver el valor direccionado se utiliza retiw, este instruccién devuelve un valor en el acumulador al retornar de una subrutina, La creacién de la tabla se hard de la siguiente forma Céaigo: ASM 1, | Tabla 2. | ada PCL, # 3. |retlw valora 4. |retiw valora S. |retlw Valor2 6. |retiw Valor3 n| z Donde Valor0, Valor1, Valor2... etc. son los valores que queremos almacenar en la tabla. La estrategia a seguir para consultar algin valor de la tabla es cargar en el acumulador (W) la direccién de [a tabla donde se encuentra el valor que quieres leer y después llamar a la subrutina TABLA (con un CALL), ‘Advertencia: la carga de W no puede superar el numero de valores de la tabla, sino se estaré ejecutando una instruccién errénea provocando un mal funcionamiento del programa.- Explicado lo necesario pasamos al cédigo del ejemplo: Céaigo: ASM 1. |" encabezado *+* 2, | ist petersan 3. | include PIGFB4A. inc 4. | _cOWFIG _cP_OFF & _WoT_OFF & _PwRTE_ON & _xT_osSC 5. | Jere Definieton de variables **** 6. | contador eau @x0c 5 Registro para almacenar conteo 7. |Contadort equ exe; Registro utilizedo en demora.~ 8. |contador2 eau exGE —_; Registro utilizado en demora, 9. | pulsador equ 75 Defintnos Pulsador como el bit 7, en este caso sera 10, Inicio det Micro **** 1 ore 0x00 3 Aqut comtenza et mero v goto Inicio 4 Salto a inicio de mi prograno.- a 15. jabla de conversion 8CO a 7 Segnentos **** 7 org 05 3 Origen del codigo de tabla.- 18, | sco7se6 5 retlw b’gfedcba’ para display catodo comun a8. addwf PCL. 1 Se incrementa el contador det prograne 20, retIw p’enan2 e ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 a. | retlw 22. | rethy 23. retlw 24. eth 2s. | retlw 26. | etl 27. | ret 22 retlw 2. retly 30. | care at. | ret 22. | a3. | 34. |; 35. | Inicio. bsF 36. sovlw 37. owt 38. | bef 29. | sovlw ae. | owt a cart a2, | +0 Testeo de 43. | Testeo aa. | berss as. | goto 4s. | call a7. bers as. | goto 4“. dinct 50. ove si. | call 2. | nowt 53. | bese sa goto 5s. call 56. | befse 7 goto on. 58. | goto. Testeo so. | Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A b*ea0e110" b'iei1011" b'ae0211 b'iz08118" prare1ze1" prnaier breeoen11" pranait b'ze1n11" ‘contador brennan 574" Prograna principal **** STATUS, RPO ‘18020000 TRIB STATUS, APO brenaiia' PorTe contador Pulsador **** PORTE, Pulsador Testeo besara_20ns PORTE, Pulsador Testeo Contador, contador BcO7SES PorTe PORT, Pulsador $a Desora_20ns PORTE, Pulsador $4 60, | :**** Denora #42 61, | Denora_2ons 2. novi 63. owt 64. | Repeticiont os. | novi os. | owt 67. | Repeticion2 a ects 69. | goto 7. ects n oto n.| return 2. | 7. | end ext contador, xs Contador? Ccontador2, 1 Repeticion2 Contador, 2 Repeticiomt 1 53 contador = Configuractén de puertos **** 4 Pasanos de fanco @ 2 Banco 2.- 5 RB7 como entrada y los demas cono satida. Paso del Banco 2 al Banco @ 3 Comienza en cero. } Testeanos si esto 0 1 Logica. 3 No, seguimos testeando.- ELiminanos Efecto rebote Testeanos nuevanente, Falsa Alarma, sequinos testeando.- } Se ha pulsado, incrementanos contador. 4} pasanos contador a W Lanonas tabla. 3 Carganos vator rectbide por Tabla en PORTE 5 Esperanos a que se suelte el pulsador -**- 3 No, PCL - 1, --> btfss PorTA, Pulsador. 3 ELiminanos efecto rebote. No, False olarma, volvenos @ testear a que se suelte 3 Inictanos contadort.~ Inictonos contador? +} Decrementa Contador? y si es @ sole.~ J Sino es @ repetinos ciclo. 3 Decrenenta Contador. } Sino es cero repetinos ciclo. 5 Regresa de la subrutina.- Una manera mas cémoda de escribir la tabla de instrucciones RETLW puede lograrse usando la directiva DT (Define Table) del ensamblador, la cual nos permite definir una tabla de datos que seré sustituida por una lista de instrucciones RETLW; asi, la tabla anterior puede quedar como sigue: Cécigo: ASN 1. | sco7ses: 2. adawt wv odie. com atlforosindex.php?PHPSESSI Pua 5 netlw b'gfedcba’ para display catodo comun 5 Se increnenta el contador del prograra. pvidhghqeu2reggbqkOSlgd004&acton=prinipagetopic=24720.0 ror0s: 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, | DT Ox3F, 0x06, 0x58, OXEF, OX65, Ox6D, 0x70, OX07, OXFF, OXF cirf Contador | retin ax3F Rutinas de Lectura de una Tabla en Memoria de Programa, sin importar donde esté ubicada (http://www-todopic.com.ar/foros/index.php?topic=12345.msg74300#msg74300) Aqui hay ejemplos de como trabajar para colocar una tabla en cualquier lugar de la memoria de programa. Control anti rebote: En el momento de presionar un botén pulsador o cualquier conmutador electromecénico es inevitable Que se produzca un pequefo arco eléctrico durante el breve instante en que las placas del contacto se aproximan 0 se alejan de sus puntos de conexién. (http:/img205. imageshack. us/img205/1919/antirrebote.jog) La duracién de este depende de la calidad de los switches y la velocidad de accionamiento, pero no dura ms de 20 milisegundos, Se adjunta simulaci6n.- Titulo: Re: Mis primeros programas, Manual PICL6F84A Publicado por: Suky en 05 de Febrero de 2009, 2: 7 Otra forma de crear una tabla. Direccionamiento Indirecto.- En la pragramacién de los micracontroladores PIC la mayoria de las instrucciones emplean direccionamiento directo, pero también es posible que operen en un modo de direccionamiento directo. Para el direccionamiento indirecto se emplean dos registros especiales: el FSR y el INDF (este ultimo no es un registro fisico). El registro FSR se emplea para "sefialar o apuntar” a una direccién de la memoria RAM cuyo contenido puede ser leido o escrito de forma indirecta empleando cualquier instruccién que use como operando al registro INDF. Esta forma de direccionamiento es particularmente util cuando se manejan tablas 0 arreglos de datos.- Directo vs Indirecto. Beige: ASM 2, |; orrecro: 2. |) Defintnos registro en Lo memoria de datos. 3. |Mymegistro equ @x1@—; Ubicodo en ox10.- a) 5. |; Corganos dato en et registro 6. | foviw oxta : 7.| now MyRegistre ——; Hyegistro = axa 8. |; Leones dato det registro s. | novfw MyRegistra ; Novemos eL valor que tenga Ayegistro @ W.~ 10. | fovnf PORTE 3 Por ejemplo, Lo carganos en PORTS. 43. | carganos dato en el registro. 1a. | sovlw @xt@ 15. | ow FSR 5 Direcctonanos Registro de datos ubtcado en ext0. 16. | novi @x88 v7. | sovwf IND; Cargawos registro direceionade con el valor Ox8A.- 18. | 19. |; Leemos dato en el registro. 2. | novin @x18; 2. | nowt FSR; Dinecetonanos Registro de datos ubtcado en @xt0.~ 22. | ovéw INOF —; Hovenos el valor que tenga el registro seleccionado @ W.~ 23. | mown PORTB 5 Por ejemplo, Lo carganos en PORTS. Utilizaremos el direccionamiento Indirecto para crear la tabla de control del Display. Aqui no ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 aint0s. 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A utilizaremos el pulsador, solo se hard el contador automético de 0 a 9.~ Al iniciar el microcontrolador cargaremos el cédigo de 7 Segmentos para controlar el Display en la memoria de Datos con direccionamiento indirecto. Luego, al realizar el conteo leeremos el cédigo correspondiente almacenado y lo enviaremos al PORTB.- AAqul utiizamos el registro STATUS nuevamente, pero para control de las operaciones aritméticas. Nosotros guardaremos el cédigo de 7 Segmentos del 0 al 9, en los registros 0x10 a Ox19. Si nuestro contador nos direcciona el registro ubicado en Ox1A, que seria el "10", lo reseteamos y direccionamos el “0%, 65ea registro 0x10, Esto lo hacemos realizando la resta del registro seleccionado y Ox1A, FSR - OxiA, y siel resultado es cero, reseteamos. EI bit Z (Zero) del registro STATUS, este indica si una operacién légica 0 aritmética realizada da como resultado cero, También tenemos el bit € (Carry) (0), que en instrucciones aritméticas se activa cuando se presenta un acarreo desde el bit mas significative del resultado, el bit DC (Digit Carry), que en operaciones aritméticas se activa si ocurre acarreo entre el bit 3 y bit 4.- Cédigo completo: Cécigo: ASM 1. |; "#9 Encabezado *#* 2. | List peter san 3. | #include PA6FBAA. tne 4. | CONFIG _CP_OFF & NOT_OFF & _PWRTE OW & _xT_oSC 5. |Jee¥* befinieton de variables +" 6. | Contador equ @x8C 5 SeLecetonanos postcién en Le menorie RAM (GPR) para guaraar 2| 5 registro utilizado pora denora. 8. |contadora equ ex@0 5 Registra utilizado en denora.- 8. |contador2 equ exe 48, | pulsador equ 7 DefAnimos Pulsador como el bit 6, en este caso serd ora PORTA a. a2. | a3. | Reser as. | ore 0x00 + Aqut comienza el micro. as. | goto Inicio 5 Salto a inicio de mi prograna.~ 46. | ;-*** programa principal “+++ a7. | 3**** configuracton de puertos **** ae. | Inicio as. | bsf STATUS RPA; Pasomos de Sanco @ @ Bonco 1. 20. | clef TRISB 5 PORTD coro sal ida a. | bef STATUS,RPO——; Paso del Bonco 2 al Banco @ 22. | call Config Tabla; Corgonos registros con Codigo de 7 segnentos. 23. | sovéw 1N0F 5 Leenos codigo de 7 Segnentos para el CERO. 2a. | sow PORTE 7 Nostranos el CERO. 2s. | ;*#** Testeo de Pulsador **** 26. | ucie v.| call Desora_190ns _; Denore pare visualizer Dtspley 28. | inf FSR,1 4 Increnentanos Puntero. 2. | novlw @xth } Consulanos si se pide codigo pare mostrar “10 30. | subwt FSR,0 1 sl es ast reseteanos FSR, apunta a 6x10--> *8".- a. | befes STATUS, 2 j St Ze2 =) OCA - FSR = 8.- 32. | goto Muestro Display ; Mo, nuestro display. 33. | sovlw x10 3 St reseteo puntero, 3a. | sow FSR : 35. | Muestro Display 36. | ovéw HOF 5 Leo Registro que apunta FSR.~ 37. | sow PORTE } Lo cargo en PORT. 38. | goto sucle 1 Continuo conteo. 20. | ae. | a1. | "0°" bonore = 42. | Denara_290n8 a3. | roviw ext 5 aa. | sow Contador jm 45, | Repetictont mnos contadort. wv odopic.com arlforasindex. php?PHPSESSID=pvi9ngkqeu2reggbak0Blgd0048action=prinipage;toic=24720.0 12108 71272020 4s. | sovlw a7. owt 48. | Repeticion2 3 ects se. | goto st. | ects 52. | oto 83. return sa. | 3+ corganos 85. | Config Tabla 56. | novi 37. | owt se. | sovlw 58. | sovwt oe. 3 ou since 62. sovlw 63. | nove 68 | eee 6s. | ince 66. sovlw 67 owt os. |; ©. | sncé 7e. | sovlw n.| nowt 22. | vo 2. | ince 7 sovlw 8. owt W8. | joes 7. | ince 78. | sovlw 2. #2. : a. | ince 22. | sovlw 83. | owt aa. 3. coe 85. | since as. | sovlw 97 nowt a8. 0. | since se. | sovlw 1. | owt 22. coe 93. inet oe. | nov 95. | sovwt 96. | 97. | ovlw se. | sovwt 99. | return 08. ve ae. end Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A xr : contador? 3 Inictanos contador? contador?,2 3 Decrementa Contador? y si es @ sole.~ Repeticion2 3 Sino es @ repetinos ciclo Contador, 1 3 Decrementa Contador Repeticiont 3 Sino es cero repetinos ciclo. } Regresa de La subrutina. tablo en memoria **** eae; Fse 4 Direcctonanos el registro @xi0 de La memoria RAM (GPR).- @x3F —_; Carganos el codigo para mostrar el CERO. INF; Lo quardanos donde apunto FSR ~-> 6x10. ~ FSR,1 5 Increnentamos FSR, ahora apunta a Oxt1, x86; Carganos codigo para uno NDF; Lo guardanos donde apunta FSR. ~ F5R,1 ; Incrementanos FSR, ahora apunta a @x12.- x58; Carganos codigo para 0s. INDF —; Lo guardamos donde apunta FSR. FSR,1 ; Increnentonos FSR, ahoro apunte 0 Ox13. ees} Carganos codigo para TRES.- NDF; Lo quardanes donde apunte FSR. ~ F5R,1 Increnentanos FSR, ahora apunta a Oxt4.- x66; Carganos codigo pora CUATRO. INOF —; Lo quardamos donde apunta FSR. FSR,1 ; Incrementanos FSR, ahoro apunte 0 Oxi5: x69} Carganos codigo para CINCO. NDF; Lo guardanes donde apunte FSR. ~ FsR,1 ; Increnentanos FSR, ahora gpunta a 6xt6.- x79 Carganos codigo para SEIS. IWOF —; Le guardanos donde apunta FSR. FSR,1; Incrementanos FSR, ahora apunta a @x17.- exe? Carganos codigo para SIETE.- INF; Lo quardanos donde apunte FSR F5R,1 _j Increnentonos FSR, ahora apunta a @xt8.- @XFF —; Carganos codigo para OCHO. INOF 5 Le guardanos donde apunta FSR. FSR,1 ; Increnentanos FSR, ahora apunta a @x19.~ exsk —j Carganos codigo para NUEVE.- INOF Lo guardomos donde apunta FSR. eae Fs Direcctonamos Registro del CERO. 43 Cargedo Los valores, retornanes.- ‘Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 21:45:32 Control de varios wv odopie.com atlforosindex.php?PHPSESSI play pvidhghqeu2reggbgkOSlgd004&acton=prinipagetopic=24720.0 tan0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Para el control de varios display la Idea es multiplexar la sefial enviada por el microcontrolador, con él administraremos el encendido de cada display y sus segmentos (Io cual se hace por pragrama). Para ejemplificar haremos un contador automético de 0 a 999 El hardware necesario es el siguiente: (http://img90. imageshack.us/img90/4061 /hard3displayiv2.omp) Diagramas de Flujo: (http://imad.imageshack.us/img4/9899/3displaymainev2.th.ipg) (http://imgd.imageshack.us/my.php? image=3displaymainev2.jpa) (http://img4.imageshack.us/img4/2979/3displayrutinafa2.th.jpg) (http://img4.imageshack.us/my.php? image=3displayrutinafa2.jp9) Se observa que el Puerto B se utiliza para enviar los datos a mostrar en cada display, mientras que por el Puerto A seleccionas el display que mostrara ese dato. Supongamos que quiero mostrar "231", pues muy fécil, pongo el puerto 8 en 0000110 (cédigo para el 1), y activo ahora el 3° transistor por un periodo de tiempo corto, desactivamos este transistor, cargamos el puerto B con 1001111 y activamos el 2° transistor por un tiempito, lo mismo hacemos para mostrar "L”. Repetimos esta misma secuencia mientras se quiera mostrar este valor. La secuencia es tan répida que el observador no nota el momento en que cambias de display. (http://img147. imageshack.us/img147/3754/3displaysiw2.jpg) Control de conteo: Para realizar el conteo incrementamos continuamente Unidad, cuando esté llega 2 10, las reseteamos a 0, e incrementamos en 1 Decena. La misma operacién se realiza con Decena, al llegar a 10 se lleva a 0 y'se incrementa Centena.- Géeigo: ASM 1. | tt Encabezado +++ 2, | ist pet6Fsea 3. | include PL6FBAA. ine 4, | CONFIG _CP_OFF & _WOT_OFF & _PWATE_ON & _xT_o5C 7. | decena ew exo 8. | centena equ exe 9. |Contadort eau exer; Registro uttlizado en demora.- xe. | contador? equ exe; Registro utilizado en denora.~ 11. | Contador eq @xt1__j Control de Refresco de Display. 2 a. equ 2 3 Para control del 1° Display 1 equ 1 5 Para control del 2° Display 1 eau ° Para control det 3° Display 16. 19. | org 8x00 ‘Aqui comienza el micro 20. | goto Tnicio Salto a intcto de mt prograna. a. 22. | 23. | =#** rablo de conversion aCD a 7 Segnentos **** 24, |; Se coloca al inteto para asegurar ubicacion en Pagina 25. | ore x05 Origen del eédigo de tobto. 26. | pcovses J retlw b'gfedcba’ para display catodo comun 27. | addut PCLa 5 Se increnenta el contador det pregrane 22. | DT @x3F, @x06, x58, Ox4F, X65, OX6D, 0X70, 0X07, OXFF, OKOF 29. 30. | :*+** prograna principal *+** a1. | **** Configuracton de puertos **** 32, | Inicio 33. | bsf —STATUS,RPE——; Posanos de Banco @ @ Banco 3a. | cir TRISA 4 PORTA cono salida 25. | elrfTRISB } oRre cono sala, 36. | bef STATUS RP; Paso del Bonco 1 al Banco @ 37. | elrf PORTA Desactivo todos Los Displays _wwtodopic.com arlfrosindex php?PHPSESSID=pvi9hgkqou2regabqk0Bigd0048acton=prinipage:topic=24720.0, arto: 71272020 a 43. | 4. | | | e | | | | ©. | | | 95. | | 8 99. | 100. | ‘wv odopie.com arlforosindex.php?PHPSESSI arf cart cart goto s+ resteo de pucle ine rovlw subwt brfss got crt inc ov sub betas goto cirf nef rrovln subst brfss goto crf Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A Unidad : Decena centena Actualizo_pisplay Pulsador **** Unidad, 1 5 a'10) : Unidad, @ : STATUS, : Actualizo Display Unidad 5 Decena,2 : are" : Decena,@ : STATUS, j ‘Actual ize Display becena : Centena,1 : a8 : centena, 2 STATUS, Z Actualizo pisplay Centena 3 3288 se multiplexan Los Display Actualizo Display rovlw rower Refresco nov call bet rove bst cal ov call bef owt bst call rove call bet rower bet all decfsz goto goto 20" Contador Unidad Bco7SES PORTA, Muestroc orre PORTA, Muestrou Desora Ses Decena Bco7seS PORTA,Muestrau ; orre PORTA, MuestroD Desara_Ses centena BcO7SES PORTA,MuestroD 5 Porre PORTA,Muestroc ; Desora_Ses contador, Refresco sucle “0 Denora **** Denora_Sns rovin rowit Repeticiont ov rowit Repeticion decfsz goto decfsz goto ox Contador exas, Contador? contador? 2 Repeticion2 contador, 1 Repeticiont /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, Comtenzo en cero --> 0 0 0. 3 Esta rutina multiplexa los disploys.~ Inereneto Unidad, Si es 40 reseteo e increnento Decena j no es 10 Increnenta Decena. Si Decena = 18, reseteo ¢ increnento Centena Increnento Centena Si, reseto 3 Cargo Contador = 20 5 Para repeticiones de visualizacton del misno valor durante 150 ms. 5 Obtengo codigo de 7 Segnentos para Unided.- ‘Avago Display de Centena, Se entiende al mirar rutina.~ Cargo unidad en PORT. Enciendo Display de Unidad. Obtengo codigo 7 Segmentos para Dece ‘Apago Display de Unidad. Cargo PORTB con Decena.- Fneiendo Display de Decena, - ‘Obtengo codigo de 7 Segnentos para Centena.- ‘Avago Display de Deceno, Enciendo Display Centena.- 5 Pregunto si ya se ha repetido 10 3 No, repito. 2st } Intctonos contadord. 3 Inictonos contedor? Decrenenta Contador? y si es @ sale.- 3 Sino es 0 repetimos ciclo. 5 Decrenenta Contador. } St no es cero repetinos cielo 151108 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, re. retura 43 Regresa de La subrutina se, 103. end En este ejemplo se mantiene la visualizacién de! mismo valor durante aprox. 300 ms, se puede determinar ya que utilizamos 3 demoras de 5 ms despreciando los ciclos utilizados en los comandos, ‘ue son aprox. 30 (30 us). Entonces por ciclo tenemos 15 ms, y por 20 repeticiones, 300 ms. Al final de este hilo se ha agregado un ejemplo de control de 3 display con el registro de desplazamiento 7aLS164, Ejemplo (http://www.todopic.com.ar/foros/index.php?topi -24720.msg213264#msg213264) Titulo: Re: Mis primeros programas. Manual PIC16F84A, Publicado por: Suky en 05 de Febrero de 2009, 21:46:41 Decodificador BCD. La otra posibilidad es utilizar un decodificador BCD como el 741847 0 el 7418249, 0 el CO45i1. Estos integrados disponen de 4 entradas correspondientes a un cédigo binario BCD, y 7 salidas que se conectan a un Display. (http: /img204.imageshack.us/img204/5091 /harddisplayconversorox1.bmp) Lo importante de este integrado, es que posee 4 pines de entrada y 7 de salida, mas unos cuantos de configuracién. El hecho es que, los 4 pines de entrada (A, B, Cy D) serén los que reciban el cédigo en binario enviado por el micro. Una ver recibido el dato, el integrado se haré cargo de decodificarlo y enviarlo por los pines ce salida (a, b, c, d, e, f yg) para mostrarlo en el display. Lo que nos falta saber, es que dato deberé enviar al decodificador. DCBA Valor que muestra el Display 000 o 001 oo10 ott 0100 o101 o110 out 1000 1001 Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 21:47:37 INTERRUPCIONES Una de las caracteristicas mas importante de los microcontroladores y que mencionamos al inicio del tutorial, es que tienen la posibilidad de manejar interrupciones, Se trata de un acontecimiento que hace que el micro deje de lade lo que se encuentra realizando, atienda ese suceso y luego regrese y continue con lo suyo. Hay dos tipos de interrupciones posibles, una es mediante una accién externa (es decir por la activacién de uno de sus pines), la otra es interna (por ejemplo cuando ocurre el desbordamiento de uno de sus registros) En el 16F84A hay 4 fuentes de interrupcién: + Por el pin RBO/INT, que regresa al PIC del modo SLEEP (interrupcién externa), + Por los pines RB4 a RB7, configurados come entrada y en caso de que alguno de ellos cambie de estado (interrupcién externa). + Por desbordamiento del registro TMRO, cuando este registro pasa de 255 a 0 en decimal (interrupcién interna). + Al completar la escritura de la EEPROM de datos (Interrupcién interna). ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 161108 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Cada fuente de interrupcién esta controlada por 2 bits. Un bit local de interrupciones (Terminado en E) de permiso 0 prohibicién de ejecucién. Si esta en 0 bloquears la solicitud de interrupcién, y si esta en 1 permitiré la ejecucién. Un bit que acta como sefializador (Terminado en F) el cual es activado (puesto 1) sise ha producido la interrupcién. Ademés existe 1 bit de control global, el bit GIE (INTCON <7>) el cual si esta desactivado bloquea todas las solicitudes de interrupcién Lo anterior descrito puede entenderse observando el diagrama légico de la siguiente figura: (http://img3 imageshack us/img3/4032/logicadeinterrupciones8 jpg) E! bit GIE se borra autométicamente cuando se reconoce una interrupcién para evitar que se produzca otra mientras se esté atendiendo a la primera y al retornar de la interrupcién con la instruccién RETFIE, el bit GIE se vuelve a activar poniéndose a 1. En cambio los bits sefalizadores o banderas de interrupeién deben ser puestos 2 cero por el tratamiento de la interrupcién realizada por el usuario (Programador) . Cuando una interrupcién est habilitada (su bit local de habiltacién esté activado, el bit GIE esté activade) y ocurre el evento que la activa, el valor de PC se quarda en la PILA y en éste se carga el (0x04 (nico vector de interrupcién). Es a partir de esta direccién que se debe colocar el tratamiento de la interrupcién, detectando por medio de los bits banderas cual de los eventos ha ocurrido y actuar segiin sea el caso, Nota: El tinico registro que se salva en la PILA es PC, para preservar algtin otro registro debe ser el propio programa de atencién a la interrupcién el que se encargue de salvar su estado al inicio de la rutina y de devolverlos al final del mismo. Resumiendo, las acciones que se realizan autométicamente el microcontrolador y las que el programador debe tener en cuenta en sus programas son las siguientes: + Cuando se activa una posible causa de interrupcién, el flag correspondiente se activa. Si el bit de Permiso correspondiente esté a 1 y el bit de habilitacién de todas las interrupciones (GIE) esté a 1, se produce la interrupcién. ‘+ Para evitar que se produzca otra interrupcién mientras se esté atendiendo a otra anterior, el bit GIE se pone a 0. El valor del PC se guarda en la PILA + EIPC se carga con el valor 0x04, que es el vector de interrupciones + El programador, debe comenzar la rutina de atencién a la interrupcién con un salto a la posicién de memoria donde se encuentra el programa, seguidamente se guardan todos los registros que puedan ser modificados por esta, seguidamente si estn habilitadas varias vias de interrupcién, se debe explorar el valor de las banderas para determinar la causa de la interrupcién + Dependiendo de la causa ce la interrupcién, la rutina de interrupcién se bifurca a la subrutina correspondiente. + Se deben devolver los valores que tenian los registros antes de producirse la interrupcién y se deben borrar por software las banderas que indican las fuentes de las interrupciones, antes del retorno al programa principal. + Cuando se llega a la Ultima instruccién de la rutina de interrupcién, RETURN, se carga el PC con el valor que se guardé inicialmente en la PILA y el bit GIE se pone automaticamente a 1 Bits utilizados. ‘+ INTF para RBO/INT, bit 1 de INTCON, si es 1 ocurrié interrupcién externa + RBIF para los pines B4 a RB7, bit 0 de INTCON, si es 1 por lo menos un pin cambio de estado + TOIF para TMRO, bit 2 de INTCON, si es 1 TMRO desbordado + EEIF para la EEPROM, bit 4 de EECON1, sies 1 se ha completade escritura + GIE, bit 7 de INTCON, si es 1 habilita todas las inte-rupciones + EEIE, bit 6 de INTCON, si es 1 se activa interrupciones de periféricos TOILE, bit 5 de INTCON, si es 1 int. TMRO activada INTE, bit 4 de INTCON, sies 1 int. Externa activada + RBIE, bit 3, sies 1 Int, Por RB4 a RB7 activada Todos estos bits al resetearse o iniciarse el micro se encuentran en 0. Primero debes quardar el contenido del registro W, el problema de mover W @ otro registro (haciendo uso de movf) es que esta instruccién corrompe la bandera Z, modificando el registro de STATUS. Seguin ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 s7H08 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, la hoja de datos otorgada por Microchip, en uno de sus apartados recomienda una secuencia de cédigo que permite guardar y restaurar los registros sin modificarles. Céaigo: ASM 2. |; Guardado de registro W y STATUS. 3. | Inteto TSR a | now W_Tenp ; Copianos W a un registro Teaporario.- 5. | swapf STATUS, W Invertinos Los nibles del registro STATUS. 6. | hovwf STATUS.Tenp _; Guardanos STATUS en un registro tenpora 7. | tse 9.3 anos os volores de W y STATUS 10, | Fin_tsk 11.) swapf STATUS Tenp,W Invertinos Lo nibles de x2. | ovuf STATUS a. | swapf WTenp, fj Invertinos Los nibles y Lo guardanos en et mismo regis 1a. | swape W Temp, Invertinos Los nibles nuevonente y Lo quardanos en W 15. |retfie 5 Salinos de interrupetén.~ Los registros W_Temp y STATUS_Temp son registros alternatives para guardar temporariamente sus valores correspondientes.~ ‘Titulo: Re: Mis primeros programas. Manual PIC1GF84A Publicado por: Suky en 05 de Febrero de 2009, 21:48:27 INTERRUPCION POR TMRO El Timer 0 es un contador / terporizador de 8 bits. El registro principal de este médulo es TMRO (0x01). Este registro se incrementa continuamente a una frecuencia seleccionable manejada por un preescalador y el rela} interno Fosc/4 (modo temporizador) o bien, por un preescalador y una sefial externa (modo contador). En la siguiente figura se muestra un diagrama de bloques de este médulo, en donde se indican los bits que afectan su operacién y la manera en que lo hacen, (http://img30 imageshack. us/img90/149/tmr0aa6.jpg) El modo Temporizador En el modo temporizador la sefial de reloj que controla el incremento del registro TMRO es la frecuencia Fey = Fosc/4, la cual puede ser dividida opcionalmente por el preescalador si asi se desea. Como se puede ver en la figura anterior, este modo es seleccionaco al limpiar el bit TOCS (OPTION_REG<5>), En este modo, el contenido del registro TMRO se incrementard a la frecuencia Fcy dividida de acuerdo al preescalador, sin embargo, si se realiza una escritura al registro TMRO, su incremento es inhibide por los siguientes dos ciclos de instruccién (Tcy) El modo Contador En el modo contador, la sefial que controla los incrementos del registro TMRO es una sefial externa que proviene de la patita TOCKI. En la figura anterior se puede ver que este modo se selecciona poniendo el bit TOCS en alto. Se puede seleccionar la transicién que provoca los incrementos mediante el bit “Timer Source Edge Select" TOSE (OPTION_REG<4>), limpiando este bit se selecciona la transicién de subida, mientras que al ponerlo en alto se selecciona la de bajada. Observacién: En este modo, la sefial conectada a TOCKI es muestreada durante los ciclos Q2 y Q4 del relo} interno, por ello es necesario que permanezca en alto al menos por 2 Tosc mas un pequefio retard de 20nseg y'lo mismo en bajo. (Es decir, sefiales demasiado estrechas (répidas) no podrén ser detectadas). El preescalador El preescalador es un divisor de frecuencia de médulo seleccionable. Como se puede ver en la figura anterior, el preescalador esta compartido entre el timer0 y el médulo Watchdog, sin embargo sélo puede conectarse a uno de los dos y esto se establece mediante el bit PSA (OPTION_REG<3>), asi, con este bit en alto el preescalador es asignado al reloj del Watchdog, mientras que con un nivel bajo en PSA el preescalador dividird la frecuencia que maneja al Timer 0 La seleccién del médulo (valor de divisién de frecuencia) del preescalador se puede realizar mediante los bits PS2,PS1,PS0 (OPTION_REG<2:0>) de acuerdo a la siguiente tabla: PS2 PS1 PSO Divisor 000 472 ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 181108. 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 001 va 010 18 on aie 100 4/32 101 1/64 110 1/128 ut 1/256 NOTA: Si se necesita el timer en 1:1 solo hay que asociar el preescaler al Watchdog. Titulo: Re: Mis primeros programas. Manual PIC16F84A, Publicado por: Suky en 05 de Febrero de 2009, 21:49:53 Ejemplo modo temporizador. Para calculer una temporizacién se necesita el tiempo de un ciclo de instruccién (es decir 1 microsequndo, si estas trabajando con un XT de 4 Mhz), el valor del Divisor de Frecuencia (el que Seleccionabas con los bits PS2, PS1 y PSO), y finalmente el complemento del valor cargado en TRO (es decir 255-TMRO). Entonces tenemos: Temporizacién = Ciclo de instruccién. (256-TMRO) .Divisor de Frecuen De este modo si queremos temporizar 4 ms con un divisor de frecuencia de 32, tencriamos: 4000us MRO = 256 - (——“ ° (= 32 TMRO = 131 \Vemos que la maxima temporizacién posible es con TMRO = 0, y Divisor de Frecuencia en 256, logréndose unos 65.5 ms aprox. Para ejemplificar el uso de esta interrupcién haremos titilar un led conectado al PIN RBO cada 200 ms, para ello haremos una temporizacién con TMRO de 50ms y contaremos 4 desbordes del mismo para lograr los 200 ms necesarios. Lo interesante de usar interrupcién es que con el micro se puede estar ejecutando cualquier tarea y no ocupar este tiempo en un bucle de demora, El hardware necesario es equivalente al primer ejemplo realizado. Diagrama de Flujo: (http://img7.imageshack.us/img7/6682/tmrOtemporizadorvat th. jpg) (http://img?.imageshack.us/my.php?image=tmrotemporizadorval.jp9) Céeiga: ASM 1, [5 "1°" encabezado **** 2, | List pe6F84a 3. | include PLEF8eA. ine 4. | __COWFIG _CP_OFF & _WOT_OFF & _PWATE_ON & _xT_osC 5. | #0** Definicton de variables **¥* n 8. °. | contador eq XC; Contador pora |W temp equ exe; Registro para guardar tenporalmente W |stavus_tenp equ ex@E —; Registro pora guardor temporalnente STATUS rectar 4 desbordes de TMR@.- 48. | Led eq ©; Defininos Led como el bit cero de un registro, en este ni. a2, | j*#** Inicio del micro **** 43. | Reset ae. | org x0 45 Aqui comenza el micro. as. | goto Inicio } Solto a inicio de mi prograna 16. | ;**** vector de Interrupcton **** v.| org axon Atiendo Interrupeton. as. | goto Tnicio 158 a1, | ** configuracton de puertos *** 22. | org x05 4 Origen del cédigo de progrona 23. | Inicio 2s. | bsf —STATUS,RPE—— Posonos de Banco @ @ Banco 1.~ _ ww todopic.com arlforosindex php?PHPSESSID=pvi9hgkqou2regabqk0Bigd004acton=prinipage:topic=24720.0, s9i108. 71272020 26. 3 39. | | 6. | | | | 3. | | | | 62. | | | 8 2. Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A ovlw '11111110 60 cono saltda.- owt TRISB movin b'g0aee1it’ —_; Se seLecciona THRO modo temporizador y preescaler de 1/255. ov OPTION_AEG bef STATUS,RP@——; Paso del Bonco 3 al Banco & bef PORTE, Led 3 EL Led comienza epagado. rovln 6x30 5 Cargamos 61 en TAR@ para Lograr aprox. Séns.~ ov TARE elrf Contador noviw '10109000" rrovitt — TNTCON sev pucle ** Inictanos contador. - Hobilitanos GIE y T6IE (interrupeién del TRO) bucle op goto Gucle Aqui et micro puede ejecutar cualquier otra torea sin necesided de utilizar tiempo en un bucle de denora.- j10*9 Ruting de servicto de Interrupcton **** j---> Aqui harenos copia de respaldo para mostrar como se hace aunque no es 4} necesario ya que el micro no hace otra tarea mientras tanto <-~ 5 Guardado de registro W y STATUS. Inieto_Isk nowt WTenp ; Coptanos W a un registro Temporarto. - swapf STATUS, HW Invertinos Los mibles del registro STATUS. ovat STATUS Temp; Guardanos STATUS en un registro temporal. 571" Interrupcion por TRA **** Isa btfss INTCON, Terr Consuttanos si es por THRO. goto Fin_tse 5 Na, entonces restauranas valores. - incf Contador rovlw 9x08 subs Contador, @ Si, Increnentanos contador Consultanos si se han praducido 4 desbordes ora obtener 260 ms. btfss sTaTUS,Z 5 goto Actualizo_T#R® jo, cargo THRO si salgo.- clrf Contador 3 Sl, reseteo Contador y controle Led btfss PORTS, Led 3 Sl esta apagado, prendo y viseverso.- goto Prendo_led bef PORTE, Lea 3 Apago Led. = Actualize_ The J Actualizo TAR@ para obtener una tenporizacion de 5@ ms. rovlw 6x30 5 a6 ovwt TARO bef INTCON,TOIF —_; orro bandera de control de Interrupcion. goto Fin TSR } Restouro volores. Prendo_led bef PORTS, Led 5 prendo Led. goto Actualizo_T#@ 5 Restauranes Los valores de W y STATUS. swap STATUS Tenp,W ; Iovertinos Lo mibles de STATUS Temp.- rovut STATUS swap WTenp, £ j Invertinos Los nibles y Lo guardanos en el misno registro. swapf WTenp,W j Invertinas Los nibles nuevanente y Lo guardanos en W.~ retfie 5 Solinos de interrupcisn, /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A Una ayuda adicional :wink: El programita presentado en el primer post, tiene una utilidad que nos ayudara en el calculo de! preescaler y valor inicial del Timer para obtener una temporizacién deseada, aparte de generar el cédigo. {http://img139, Imageshack.us/img139/8141/21115051.th.jpg) (http://img139.imageshack.us/my.php? image=21115051.jpg) ‘Titulo: Re: Mis primeros programas. Manual PIC1GF84A Publicado por: Suky en 05 de Febrero de 2009, 21:51:00 Ejemplo modo contador. El siguiente programa realiza el conteo del numero de veces que produce una transicién de bajo a alto en la patita TOCKI. El valor del contador se incrementaré una vez por cada dos transiciones, y al detectarse 10 camblamos el estado del Led conectado a RBO. (http://imgi32.imageshack.us/img132/6776/tmrocontadornm7.bmp) Diagrama de Flujo: (http:/img297.imageshack.us/img297/9327/tmrocontadorziS.th.jpg) (http:s/img297.imageshack.us/my.php?image=tmrOcontadorzis.jpg) beige: ASM 1. |: "8 encabezado *¥ 2, | List peter san 3. | include PA6F8AA. ine 4. | CONFIG _CP_OFF & NOT OFF & _PWRTE OW & _xT_o5C 5, | J#*" befinicion de variables *** 6. | Contador 1s BxBC__; Contador para detectar 4 desbordes de THRB.~ 7. |wtenp equ @x09 —; Registro para guardar tenporalmente W.- 8. |sTaTUS_tenp equ @x8E_—; Registro para guardor tenporalnete STATUS s. | ae. | Led eu 8 5 Defiminos Led cono al bit cero de un registro, en este caso PORTE. - a] a2, | j**9* rnicio del micro * a3. | Reset 14 ore ax00 1 Aqut comienza el micro as. goto Inicio 4 Salto a inicio de mi progrona.~ 46. | ;**4* vector de Interrupeton +++ v7. org @x08 4 Attendo Interrupcion.- goto Inicio 1s Rs . | 5 8° Prograna Principal **** 3204" Configuracton de puertos *** org x05, 5 Origen del cédigo de prograna. | Inicio bst STATUS,AP@——; Posomos de Banco @ @ Banco 1. noviw '11111118" 62 coso solida.- rovif — TRISE frovly '99180080' _; Se seLecciona THRO modo Contador, transicton positive ovuf OPTTONREG —;-y preescaler de 1/2.~ bef STATUS,AP@_——; Paso del Bonco 4 al Banco O bef PORTS, Led 5 EL Led comtenza opagado. - rovlw @xFS 8 Corgamos 251 en TWR® para contar 10 pulsos en RA4/TOCKT.. nowt TARO noviw b'19109000" ; Habilitanos GIE y T6IE (interrupcién del THRO) oviit — INTCON se pucle *** + | Bute op 5 Aqui el micro py goto sucle J sin necesidad de utilizar tiempo en un bucle de denora.- de ejecutar cuolquier otra tarea BURSESHES BESS RE BEE EES wv odopic.com arlforasindex. php?PHPSESSID=pvi9ngkqeu2reggbak0Blgd0048action=prinipage;toic=24720.0 2ut0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 23. | 40. | a. aa. | 45. | j---> Aqui harenos copia de respaldo para mostrar como se hace aunque no es 4s. |; necesarto ya que et micro no hace otra tarea mientras tanto <-~ a7. | 48. |; Guardado de registro W y STATUS.- 49, | Tnicio_T5R 38. | nowf W_Tenp ; Copianos W a un registro Temporario sa. | swapf STATUS, W _jnvertinos Los nibles del. registro STATUS. 52. | owwf STATUS. Temp; Guardanos STATUS en un registro temporal 83, | 7#*° interrupcton por Tana **** 54, | Tse 5s. | befss INTCON, TOF Consultanos s{ es por THRO. ss. | goto Fin_ISR ho, entonces restauranos valor 37. | bUfss PORTB,Led _— St, Controlamos Led.St este epagado, prendo y viseversa. 58. | goto Prendo_led 9. | bef PORTB,Led = Apago Led.~ 69, | Actual iz0_19R0 + Corganos 251 en THR@ para contar 10 pulsos en RA4/TOCKT 1. | ovin oxr8 3 a°2st" 62. | rovnf TARO 63. | bef INTCON, OIF Borro bandera de control de Tnterrupcton. a. | goto Fin ISR 5 Restaura valores 65. | Prendo_ted 6s. | bsf —PORTB,Led _—— prendo Led. 67. | goto Actualizo THe 68. |; Restauranos Los valores de W y STATUS.- 69. | Fin_tsk 7. | swapf STATUS Temp, ; Tnvertimos Lo nibles de STATUS Temp. n novuf STATUS n. | swapf —W_Tenp,W } Tvertinos Los nibles nuevanente y lo guardanos en W 7a. | retfie 3 Satinos de interrupctén.- 3. |; 16. | 7. | end Titulo: Re: Mis primeros programas. Manual PIC16F84A, Publicado por: Suky en 05 de Febrero de 2009, 21:52:09 INTERRUPCION EXTERNA, RBO/INT Para el control de la interrupcién externa se necesitan dos bits més, ellos son RPBU (OPTION_REG<7>), que activa o desactiva las resistencias Pull-Up internas del PORTB, en caso de que el dispositive conectado al puerto sea de colector abierto y el mas importante INTEDG (OPTION_REG<6>), si esta en 1, [a interrupcién se genera por flanco ascendente, y en 0, la interrupcién se genera por flanco descendente.- Para mostrar su uso haremos un ejemplo sencillo que muestre como se configura, el cual al presionar un pulsador conectado a RBO cambiard el estado de un led conectado a RBI, para ello configuramos que la interrupcién de genere por flanco ascendente: (http://imgs.imageshack.us/img5/1977/intrbomb7.bmp) Diagrama de Flujo: (http://imgd imageshack. us/img4/4408/rbOwx0.th.jpg) (http://img4.imageshack.us/my.php? image=rb0wx0.jpg) Céeiga: ASM io t+ 1. [5 009 encabe 2. | List p-16Faan 3. | include PL6r86n. Ane _ ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqou2regabqk0Bigd004Aacton=prinipage:topic=24720.0, anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A _£P_OFF & _WOTLOFF & _PHRTE_ON & _xT_OSC 5. |; befinicion de variables *=* equ equ 38" Inicio del Micro “= 3 #** Prograna Principal oxo Inicio 0x04 15k exec x00 e 3 pin R00 1 5 pin RBt } Aqui comienza el micro, 4 Salto a inicio de mt prograne. de Interrupcion **** 3 Atiendo Interrupcton.- 5°" Configuracion de puertos *** 2x05 4 Origen del codigo de programa. STATUS,RP®___; Pasanos de Banco 8 a Banco 1.~ branes’; R8® como entrada y RBI cono salida.~ ‘Rise brereeee%' 5 Config. Por FLanco Ascendente. (OPTION REG ‘STATUS,RP@ —; Paso del Banco 1 ol Banco @ PORTS, Led } EL Led contenze opagado. b'1e010000" —; Habilitanos GIE y INTE (interrupcién por RB) INTCON JA" pucle tnfinito "8 bucte [INTCON, INTF esora_2ans } Consultanos si es por RE®.- 3 No, 5 Conprueba si es rebote.- Salinos de interrupetén.~ PORTE. Pulsador Fin sR 3 Es rebote, entonces salinos. PORT, Led 3 St esta prendide, Lo apaganos: Prender_ted PORTS, Led 5 Apaganos Led Fin_15k Porrs, Lee 5 Encendemos Led INTCON, TNT 4 Linptanos bandera. - exer contador oxs contador? ccontador?, 1 4. | covers 6. | contadora 7. | contador2 8 | 9. | Pulsador 18. | Led uw. 2 33. | Reser as. | org as. | goto 4s. | 70° vector v7. | ore a8. | goto ws. 20. a. | 22. | ore 23. | Inicio 24 bet 2. sovlw 2s. | owe v.| sovlw 28. | owt 2. | bef 22. | bet ai. | sovlw 32. nowt 33. 34. | uct 35. | nop 36. | soto 37 BB. eee 398.5 a. |; an. | 15a a2. | bees 2. | retfie aa. | eal 45. betes as. goto a.) bees 43. | goto 2. | bef se. goto st. | Prender_Led 32. | bst 53. | Fin tse sa. | bet ss. | retfie 56. ecco 87. | j=" bonne = 58. | Denara_20m8 38. sovlw 0. | sovet 61. | Repeticiont 62. | sovlw 63. ove 64, | Repeticion2 os. | dectez os. | goto ‘wv odie. com arlforosindex.php?PHPSESSI Repeticion2 5 Salinos de interrupcién.- Inictanos contadort.- } Intctanos contador? 3 Decrementa Contador? y si es @ sale.- Si no es 0 repetinos « /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, 2anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, o7. | ects? Contadort,1 3 ecrenenta Contadora a. | goto Repeticiont 7 St no es cero repetinas ciclo. 62. | return } Regresa de la subrutina 70. | n.| end Titulo: Re: Mis primeros programas. Manual PICIGF84A Publicado por: Suky en 05 de Febrero de 2009, 21:54: 5 INTERRUPCION EXTERNA, RB4 a RB7 Aprovecharemos esta interrupcién para detectar cuando se ha presionado una tecla de un Teclado Matricial. Un teclado matricial es un simple arregio de botones conectados en filas y columnas, de modo que se pueden leer varios botones con el minimo nimero de pines requeridos. Un teclado matricial 4x3 solamente ocupa 4 lineas de un puerto para las filas y otras 3 lineas para las columnas, de este modo se pueden leer 12 teclas utilizando solamente 7 lineas de un microcontrolador, Para detectar la tecla presionada se utlizara el siguiente hardware: (http://img132.imageshack.us/img132/8633/hardwaretecladoar6.bmp) Configuraremos RBO a RB3 como salida y las colocaremos a nivel bajo. RB4 y RB7 configuradas como entradas, y en estado normal (sin presién de teclas) estardn a nivel alto. Al presionar una tecla se conecta una fila con una columna, se produce un cambio de nivel en alguna de las columnas (De nivel alto a bajo), y se genera la interrupcidn. Para detectar que tecla se ha presionado, se colocan RBO a RB3 a nivel alto, y se pasan a nivel bajo de a una por vez, detectando si se produce algiin cambio en las columnas. (http://imgi32.imageshack.us/img132/7404/tecladomatricialex4 jpg) Se utiliza una variable que se incrementa con la cuenta de las teclas revisadas, de este modo al detectar una pulsacién el valor de la cuenta serd el valor de la tecla presionada. Si al final no se presioné ninguna tecla la variable se pone a cero y la cuenta vuelve a comenzar. En nuestro ejemplo representaremos la tecla presionada en forma binaria con leds conectados al puerto A Diagrama de Flujo: (http://img4.imageshack.us/img4/39/tecladomatricialnu0.th jpg) (http://img4.imageshack.us/my.php? image=tecladomatricialnud.jpg) Céeiga: ASM 1 Encabezado **** | 2. | List p16F8ea 3. | include PLeFSaA. ine 4, | _LCOWFIG _CP_OFF & _WOT_OFF & _PWATE_ON & _xT_oSC 7. |W Temp equ @x®0_; Registro para guardar tenporatnente W. 8. |STATUS_temp equ &x@E_—_; Registro para guardar temporoimete STATUS ». | a0. | u.| 12, | ;24* micto det micro s#+° 13, | Reset 14. | org x0 5 Aqui comienza el micro 45. | goto Inicio } Solto a inieto de mi prograne as. | goto Inicio 15k a9. | ;**** programa principal. **** 20. | ;**** Configuracton de puertos **** 21. | Inicio 22.| bef STATUS,RPO_——_; Pasamos de Ganco @ @ Bonco 4 23. | care TRISA + PORTA cono Salid. 24, | movin 8'11110800' ible bajo como Salida y ible olto como Entrada. ~ 25. | ownf — TRIS® _wodopie.com arlfrosindex php?PHPSESSID=pvi9hgkqoureggbqk0B\gd004Aacton=prinipage:topic=24720.0, 240s 71272020 26. | bet 2. | cae 28. | bef 2. | sovlw 2. sovwt a. art 32, | 700 gucle o=0* 33. | Bucle 3a. op as. goto a6. |; puting de 37. | aa. | 5---> Agut harem 39. |; necesario yo 9 ae. | au. |; Guardado der 42, | Inicio Ise a nove aa. snapt as. | nove 45, | ;204 Interrupt a7. | 58 a. bees a. goto se. | all su. ovéw 32. owt 83. |; Restauranos Lo! Sa. | Fin 158 55. | swape ss. sowwt 37. snapt 58. | swap 58. retfie oo. o 62, | ;+0+* putings 63. | Rostrearos Tec 64, | Tecla_Presionada 6s. art 6s. | incl 67. | sovlw 8. | nowt 6. 0p 70. | Test_colusnas n.| befss n. goto n since ma bees 1s. goto 76. | inet n betes 7. goto 2. | sinc a.|; neste ai. |; brfss a2}; goto 83.3 nef ee. | 85. |ultina_tecla 86. ets a7. | goto wv odopie.com atlforosindex.php?PHPSESSI Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A STATUS,RP@ Paso del Banco 1 al Banco Porre TINTCON, RETF } Borranos bandera de Interrupeton. b'1eaei8' —_; Habilitamos GIE y RBIE (interrupcion Ré4 a RB7) -INTcON NTecla eucle servicio de Interrupcton *#=* 108 copia de respalde para mostrar como se hace aunque no es ue el micro no hace otra tarea mientras tanto < egistro W y STATUS Wtenp ; Coptanos W a un registra Tenporario. « STATUS, W Hnvertiqos los nibles del registro STATUS. STATUS Temp Guardanos STATUS en un registro temporal.- fon por THRO “H+ INTCON,RBIF —_; Consultonos si es por Ré4 a R87. Fin 15k No, entonces restauranos valores. Tecia_Presionads 5 Se detecta que tecla fue presionada Nrecla PORTA; Hostarmos en diplay tecla Presianada. 1s valores de W y STATUS. - STATUS Temp, Invertimos Lo nibles de STATUS_Tenp.- status Wemp, Invertimos Los nibles y Lo guardanos en el misno registro. ~ W Temp, w J Invertinos los mbles nuevanente y Lo guardanos en W.- 5 Satins de interrupetén, La presionada.— NTecla 3 Bora Numero de Tecla y Ntecla,1 J prepara Nreclo pora primer codigo. breqeeii1e —; Seca @ @ Lo prinera Fila Porre 5 de La Puerta 8 5 Para estabilizacion de sefal. Porte, 5 Primera coluana = @ suelta_tecla Sole si se ha pulsado tecta. Nrecla,1 3 St no tecla pulsada, incrementa n? tecla. Porre, S| 5 Segunda coluana = @ Suelta_tecla ; Sole si se ha pulsodo tecta. Ntecta,1 5 Si no tecla pulsada, incrementa n® tecla. PORTE. 6 5 Tercera coluana = 8 Suelta_tecla ; Sole si se ha pulsado tecta. Nteclay1 5 Si no tecla pulsada, incrementa n? tecla. caso no se Usa teclado 3x4, porre,7 3 Cuarta colunna = @ Sueltatecla _; Sale si se ha pulsado tecla. recta, 3 SL no tecla pulsada, increnenta n# Tecli PorrB, 3 3 Ya se revisaron todas Las filas? Null_tecls 3 Si, Falsa alarna, no se ha presionado ninguna. /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, sis 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 88. | bst STATUS, , seguinos con La sigutente.Pone @ 1 ait ¢ 39. | rif PORTB,2 5 ast la Fila 1 pasa 1 con Lo rotactén a izqda 20. | goto Test_Colunnas 93. | cirf —NTecla j Coloca vartable Tecla a @ (Winguna) oa, | bef INTCON, ROTF 3 Borranos bandera de Interrupeton.- 95. | eirt PORTE } Dejanos Puerto para recibir otra tecla 6. | return 2 y regresa 97. | 98, | Suelta_tecla 99. |; ahora se espera a que la tecla sea soltada para evitar rebotes 10. |; y reactivactones de tecta tet. | Esperat 102. | befss PotD, 3 Si no se suelta la tecta FILA 1 103. | goto Esperat 5 vuelve a esperar. 108, | espera? 10s. | befss poRTs,5 St no se suelta La tecla FILA 2 106. | goto Espera2 welve @ esperar. 107. | Espera3 108. | bers poate, 6 5 Si no se suelta ta tecta FILA 3 109. | goto Espera3 3 vuelve o esperar 110. | esperaé an. | bets poRTB,7 3 St no se suetta La tecla FILA 4 12. | goto Esperaa 3 vuelve a esperar. 13. | au, | bef TNTCON, ROT + Worranos bandera de Interrupeton.- us. | eirf PORT 5 Dejanos Puerto para recibir otra tecla.- us. | return j wielve at programa principal que hizo La LLanedo. a7. |; us. | end También con la variable NTecla (Numero de Tecla presionada) se puede utilizar como entrada a una tabla para codificar en ASCKIT la tecla presionada: Cécigos ASM a| novéw NTecla 2] call Tabla_thatrictal 3. | 5. | Tabla_rmatricial «| addwf PCL, 7 | or ‘Titulo: Re: Mis primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 21:56:49 Control del LCD Descripeién: La pantalla de cristal liquido © LCD (Liquid Crystal Display) es un dispositive iControlado de visualizacién grafico para la presentacién de caracteres, simbolos o incluso dibujos (en algunos modelos). En este caso dispone de 2 filas de 16 caracteres cada una y cada cardcter dispone de una matriz de 5x7 puntos (pixels), aunque los hay de otro numero de filas y caracteres. Este dispositivo esta gobernado internamente por un micracontrolador Hitachi 44780 y regula todos los parametros de presentacién, este modelo es el mas comunmente usado y la informacién que se adjunta se basaré en el manejo de este u otro LCD compatible. Conexién del modulo LCD al PICL6F84A mediante bus de 4 bits. (http://img90 imageshack. us/img90/8066/hardwarelcdal7.bmp) En este ejemplo haremos uso de dos directivas mas de ensamblador, Estas son #DEFINE y macro. ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 2en0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, #DEFINE es empleado para crear sustituciones dentro del texto del programa que lo simplifiquen. La forma correcta es #DEFINE NOMBRE TEXTO, con lo que, cada vez que el compilador encuentre la orden NOMBRE, la sustituird por el texto. El problema que se nos plantea es que, si bien es mas flexible que la directiva EQU, puesto que esta sdlo nos permitia asignar un valor, sdlo se nos permite con #DEFINE una linea de texto, y esta debe ser fija Céeigo: ASM a. | aEFINE Loo. Lcb_PoRT control E Este problema se soluciona mediante macro, Esta directiva tiene la sigulente forma: NOMBRE macro ARGUMENTOL, ARGUMENTO2, ETC TEXTO ‘TEXTO. endm De este modo NOMBRE seré sustituido como comando por la secuencia completa definida tras macro hasta endm, y los sucesivos argumentos seran, a su vez, sustituidos dentro del texto. En nuestro ejemplo lo utilizaremos para enviar un cardcter 0 un comando al LCD, de la siguiente Céeiga: ASM 1, |Leo_pute macro carae 2 | ovin Carae 3. | call LCo_Caracter 4. | ends 5. | Lc>_Putd macro Conan 6. | roviw conan 7.| call LCO_Conando 5. | ends Rutinas de Control: LCD_Config_puertos: Configura los puertos del PIC para el uso del modulo LCD, solo afecta a los pines utlizados.- LCD_Init: Inicializa e! médulo LCD para su correcto funcionamiento. Es necesario ejecutar esta subrutina al principio de los programas que vayan a utilizar la visualizacién mediante LCD. LCD_Bandera: Explora el estado de la bandera Busy (ocupado) del médulo LCD y espera que termine cualquier comando previo antes de volver a la rutina que le llamo.- LCD_Enable: Habilita el médulo LCD durante 2us para recepcién de datos o envio.- LCD_Comando: Configura médulo LCD para recibir un comando mediante rutina LCD_Envio_Dat: LCD_Caracter: Configura médulo LCD para recibir un cardcter mediante rutina LCD_Envio_Data.~ LCD_Envio_Data: Envia dato al LCD, Cargando el nible alto y luego el nible bajo Nota: Observar que las lineas de control y bus de datos es facilmente modificable en Declaracién de bits para control LCD y Declaracién de Bytes del LCD. Titulo: Re: Mis primeros programas. Manual PIC16F84A, Publicado por: Suky en 05 de Febrero de 2009, 21:58:36 Como ejemplo de aplicacién se muestra un ejemplo donde se visualiza un mensaje (“Todo Pic") éeiga: ASM | Leo Dato ew exec jregistro p. | Loop equ @x60 jregistro pora inictatizacion det 2. [5 1" encabezado **** 2. | List p-t6reca 3. | winclude °16F8«A. ine 4. | CONFIG _cP_OFF & _WoT_OFE & _pwRTE_ON & _xT_OSC 5. [7 M1, s | 8. ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 2rnos 71272020 ‘wv odie. com arlforosindex.php?PHPSESSI % 28. au 2. a. a4, 15. 16, v7, a8. a, 20. a, 2 23. 2% 25. 26. 27, 28. 29, 20, a1. 2 33. 4 35 36. a7, 38. 39. 40, a1. 42, 43 a8. 45 46. "7 48 49, se, 51. 52. 33 5a. ss 56, 37. se 59. 62, 61 62. 6 6, 6s. 66, 67. ea, 63, 7. n Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A | contador equ exe registro para denoras |contador2 eau exoF registro para denoras 320** Declaracton de bits para control LCD =*** fs eq ° aw eq a le equ 2 | ck, equ 3 ba equ 4 Js eq 5 | equ 6 | over equ 7 | s*7* Dectaracion de Bytes del LcD *#+* | Lco_port_controi eau 85; PORTA para control det Lo |Lco_porr_oata eau x05; PORIB para envio de Datos al LCD Lcb_TaIS_Contro eau exes 5 TRISA Lco_Tais.oata equ exes TaISe | s%9* conandos de Software para ta ico =*** |Leotinest eau oxo; in comtenzo Lineot |tcptineaz eau @xc@—_; Direccién comienzo Linea? Leocar eq exet _; Sora pantatla, cursor @ Inicto Lepinicto equ @xe2 ; Cursor a Inicio, ODRAM sin cambios | Lecor0e eau @x@6 5 Hodo increnenta cursor | Looe equ ex04 —; Modo decremento cursor | coon equ exec; PantatLa on | Lcoors equ exes; Pantata off | curson cau @x8E —_; PantalLa On, cursor On | cursorF eau exec 5 PantatLa On, cursor off CursBlink equ exer 5 PantalLa On, Cursor parpadeante cortzda equ exe; Mueve cursor a La tzquierda | curoecha eq ed 5 Mueve cursor a La derecha | pisteda equ @x18—_; Mueve Disploy o Le izquterda | pispecha equ @xac 5 Mueve Display o La Derecha Lepeus 42 eau 0x28; Gus 4 bits, 2 Lineas, 5x7 i7#* Definictones para el ensanblador **** | rocrane Lco_e L.cb_PoRT_Contret | oeFaNe co_Rs Lco_PoRT_Control RS | roerae «co_Aw Lcb_poRT_controt, Ri | roerane Lco_o4 {Teco_porr pata, 04 | soeraNe Uco_os co_PoRT_pata,05 | erie (co_os cb_PoRt_pava,os {#OEFINE LC0_07_0F Lco_PoRT_pata,07_8F sEFINE o_backtight Uco_pORT Control, BACK 5 Control Backliath.~ | sovlw Carac call Lco_Caracter ends | Lco_purd macro Conan | novlw Conan | call Lco_Conando | ente | LLL org exe goto Inicio | :**#* prograra principal **** | ore 0x05 | inicio call Leo Config.puertos _; Configuranos Puertos @ utilizar por L¢0. call Lco_tnit Inietolizenos 100. | bsf —_Lco_backlighe 5 Prendenos SackLight.~ | LCo_Putd CursBlink } Cursor Porpadeonte pvidhghqeu2reggbqkOSlgd004&acton=prinipagetopic=24720.0 anos 71272020 n. | Leo pute n.| Lco_pute 74. | Lco Pate 75. | co pute 76. | Leo Pate 7. | Lco pate ve. | Lco_pute 73. | Leo Pate 80. | ucte a op 22 goto 33. | a4, | 204+ subrutinas 5. | as. | 5-0" configurac 87. | LeD_Contig.puert 8. | bs 2. bef Sovides.- se. | bet on. | bet 2. | bef 93. | bet oe. | bef 95. | bet 96. | bef 97. | bef 8. | bet so. | bef 00. | bef x. | bef 122. | bef 103. | bef see, | bet as. | bef 166. | return 307. |; gee. | 3+ mmtctalia 409. | Leo_tnte ue. | bef an. | sovlw a2. | sovwt a3. | bse 8. | bse aus. |... se efecuta us. | bse aw. | eal ue. | bef ne. | eal x20. | ects a. | goto 122, |;.... Interfase x23. | bef 1a, | bse as. | call 126. | bef 27. | eal ae. |... sisters > us. | sovlw 130. | eal Bat. |)... Linto disp 132. | sovlw an. | call Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A Tv 3 Escrtbinos en LCD.- on pe we to Bucle 5 Bucle Infinite de Control s+ ‘ion de puertos **** STATUS, RPO 5 Selecctonanos Banco 1.- Lco_Rs } Colocanes todas Las Lineas de control y bus como co_Rw Loe Lco_ba Lco_ps Lco_bs .co_p7_oF Lico_backight STATUS, APO 3 Wolvenos an Banco @.~ cor Lco_Rw Looe co_pe Lco_bs Lco_ps Lco_o7_aF Lco_backight icion de ico **** STATUS, APO x03 Loop Lco_pa 3407 06 DS 4 = 9012. Lco_ps 3 veces el siguiente bloque .. Leo Dessra Ses Looe Desora_Ses Loop $5 Lco_oa 4507 D6 DS D4> = 0010. Leos Desara_Ses Looe Desora_Ses << Bus de 4 bits, 2 Lineas, 5x7>>. Lcosus_42 Lico_comande Lay y retorna al origen «+. coer Lico_comande 5 Aseguramos Banco 8. anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A 134. | return 435. 5 gas. | ;*"* Lee estado det Leo “+ 4137. | Lcb_sandera ae. | bef Low x30. | bef LORS 140. | bef Looe aa. bef Lobe aaa. bef Lco_ps 143. | bef Lc0_bs aaa. | bef Lc0_07_8F ass. | op 446. |bsf —LED_RW ; Modo Lectura. usr. | bef STATUS,APO sss. | bst Lcoo7 er as. bef STATUS,APO 150. bst Leos asi. | op 432. | verse LCOo78F 433. | goto 5-1 : ast. bef Loe 5 455. bsf —STATUS.APO ase. | bef coz ar; 457. | bef STATUS|APO ase. | return B59. feces eee eseeeseeeeeee 460. | :**** envio pulso Enable === 4st. | Lco_fnable 162. bef LOOe 163. 0p ast. | op 16s. | bef Looe 166. | return BT fee eee eee eeeeeeeeeeee aos. | :+*** envio dato al Lco **** 369. |;*"* Previomence canfigurado como 170, | Lco_Envio pata am. | owif Lcb_pato : 17. | i 3. | bet Lev_pa : a. | befse Lcopate.¢ vs. bst —Lco_pa v6. bet L005 : a7. | befsc Lco_bato,$ v8. | bst—Lco.0s 19. | bef Leb : 120. btfsc Lc0_bato,s aa. bst —Lco_06 a2. | bef cob? 133. | befse LC0_bato,7 asa, | bs tc0_07 6F sas. | call Lco_enable 136. | 5 87. | bef Lops z 128, btfse Leobate,e 5 189, bst bebe 00. | bef Leos : aa. | btfse LCo_bato,t 192. | bst Leos 193. bef Le0_06 : 134, btfse Lco_pato,2 19s. | bst —Lc0_06 ass. | bef Lever ‘wiv odie. com atlforosindex.php?PHPSESSI Bonco 1.- configura TRIS para recibir estado del LCD. Bonco 1. lee estado del LCD, 1-> Ocupado. Fsperanos a que se desocupe.- LcD_07/8F->0, seguimos adetante. Bonco 1.- Reconfigura TRIS para envio de Data. Bonco 1. ‘comando 0 como Caracter. - CARGAMOS NIBLE ALTO EN PUERTO. Cargamos un cero. Si es 2, modificanos a uno, sino segurinos. Habilitones Leb para recepcion de Data. CARGAMOS MIBLE BAIO EW PUERTO. Cargamos un cero. Si es 4, modtyiconos @ uno, sino seguinos /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 197. | befse Lo pato,3 198. | bst—LC0_07 BF 199. | call LCO_Enable _; HabiLitanos LCD pare recepeton de Dato 200. | return 2a. |; 202. | :*** Envie. Conando al LCD *** 203. | LeD_Conando 208, call LCb_Bandera Controta si el LCD esta en condictones de recibir un revo doto 20s. | bef LC0_Rw 5 Modo eseritura.- 206. | bef Ler Se enviara Conan. 207. | call LCO_Envio_pata_; Envio Conanda. 208. | return 209. |; aie. | ;**** envio Coracter al LcD =*** 211, | Leo_caracter 22, call L0_Bandera Controla si el LED esta en condictones de recibir un revo dato. 2. | bef Leo_RW 4 Modo escritura.~ 21. | bst —Leo_Rs } Se enviara Caracter.- 23s. | call 3 Envio Coracter 216. | return 27. |; 218. | j°*** Denora =" 219. | Denora_Sns 220. | roviw exc ; 200 2a. | owf contadort j Imictonos contadord.~ 222. | Repetictont 223. | sovlw 6x07 j 228. | ovif contador? j Inictonos contador? 225, | Repeticton2 xe. | decfs2 Contador2,1 4 Decrenenta Contadord y si es @ sole.- 227. | goto fepeticion2 } St no es @ repetinos ciclo. 228. | decfse Contador 2 3 Decrenenta Contadord.- 229. | goto Repeticiont 3 St no es cero repetinos ciclo.- 230. | return Regreso de Lo subrutina,- 2a. | 232. |; 233. | end Tengo que ser sincero, no logre simularlo con Proteus. Pero con elementos reales, lo probé en varias. configuraciones de lineas de control y bus de datos, por lo que deberia funcionar sin problemas.- Titulo: Re: Publicado por: Suky en O5 de Febrero de 2009, 21:59:: primeros programas. Manual PIC16F84A 7 Comunicacién RS232 EI RS232 es un estndar de comunicaciones propuesto por la Asociacién de Industrias Electrénicas (EIA) la cual define la interfase mecénica, los pines, las sefiales y los protocolos que debe cumplir la comunicacién serial. La velocidad se mide en baudios (bits/segundo) y esta normalizada @ 2400, 4800, 9600, 19200, 38400, etc. Y sélo son necesarios dos cables, uno de transmisién y otro de recepcién Todas las normas RS-232 cumplen con los siguientes niveles de voltaje: - Un "1" légico es un voltaje comprendido entre -5v y -15v - Un "0" légico es un voltaje comprendido entre +5v y +15 v (http://img26.imageshack.us/img26/7751/rs1ha7.jpg) Los puertos series son accesibles mediante conectores. La norma RS232 establece dos tipos de conectores llamados DB-25 y DB-9, machos y hembras. La norma R5232 se establecié para conectar un ‘ordenador con un modem, por lo que aparecen muchas patillas en los conectores DB-25 que en otro. tipo de aplicaciones no se utilizan y en las que es mas comin utilizar el conector DB-9 Cada una de las patillas de! conector RS232 tiene una funcién especifica. Patillas del DB-9: (http://img10.imageshack.us/img10/5564/db9Id3.jpg) ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 autos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Los pines que portan los datos son RxD y TxD los demds se encargan de otros trabajos, el DTR indica que el ordenador esta encendido, DSR que el dispositive conectado al puerto esta encendido, RTS que el ordenador al no estar ocupado puede recibir datos, al revés de CTS que lo que informa es que es el dispositivo el que puede recibir datos, DCD detecta que existen presencia de datos, etc. Formato de un byte: El protocolo establecido por la norma RS232 envia la informacién estructurada en 4 partes: = Bit de inicio o arranque (START). Es un paso de -12V a +12V, es decir de un "1" a un “0” légico en ta légica negativa de la norma RS232. = Bits de datos (Datas) Los bits de datos son enviados al receptor después del bit Start, El bit de menos peso LSB es trasmitido primero. Un caracter de datos suele consistir en 7 u 8 bits. = Bit de Paridad (Parity) Dependiendo de la configuracién de la transmisién un bit de paridad puede ser enviado después de los bits de datos. Con este bit se suele descubrir errores en la transmisién, puede dar paridad par o impar. =. Bit de Parada (STOP) Ia linea que @ -12V después del ultimo bit enviado, es decir queda “1” en légica negativa de la norma. El protocolo permite 1, 1.5 0 2 bits de parada MAX 232. En el mercado hay muchos circuitos integrados que permiten la conversién entre niveles TTL y niveles RS232. El mas destacado es el transceptor MAX232: (http://img25 imageshack. us/img25/5108/rs232sx1.bmp) Este convierte los niveles RS232 <+12 y -12> a voltajes TTL <0 y +5> y viceversa sin requerir mas que una fuente de +5V y un par de capacitores. primeros programas. Manual PIC16F84A Publicado por: Suky en 05 de Febrero de 2009, 22:06:14 Para ejemplificar el uso de este protocolo para establecer comunicacién con la PC, haremos un programita que reciba la data de la PC y se la reenviaremos inmediatamente. (http://img8 imageshack. us/img8/3884/hardwarers232td3.bmp) Para la recepcién de datos aprovecharemos la interrupcién externa por RBO, configurada en flanco descendente (Detectara cuando la PC envié un bit de Start). Deja pasar un tiempo una y media veces mayor que el periodo de transmisién para saltarse el bit de Start y lee el primer bit en su mitad. Lee el resto de los bits de datos, esperando un tiempo igual a la duracién del periodo entre lectura y lectura para testearlos en mitad del bit. Kbhit indica si ha llegado 0 no un dato desde PC. ‘<> Para el envio de datos se envia un "0" durante un tiempo igual al periodo de la velocidad de transmisién, Este es el bit de “Start”. Luego se envia el bit correspondiente al dato a enviar: Siva a enviar un "0" permanece en bajo durante el periodo correspondiente y si se va a escribir un "1 permanece en alto durante el periodo correspondiente. Al enviar los 8 bits de datos se envia un bit de Stop, nivel alto durante un periodo. <> Los pardmetros adoptados para la comunicacién son los siguientes: + Velocidad 9600 baudios + Dato de 8 bits + Sin Paridad + Lbit de Stop Para establecer comunicacién con el microcontrolador utiizaremos el software Siow (http://www. mediafire.com/file/jhrzmdnmozz/Siow.rar), es un monitor del puerto serie muy sencillo de usar, solo hay que configurar los pardmetros de comunicacién, (También se puede usar el Hyperterminal de Windows) (http:/simg23.imageshack.us/img23/7941/siowvj1. jpg) Céeigo: ASM a. [5 140 Encabezado ++ 2. | List petersca 2. | include P16F8«A. inc 4. | CONFIG _CP_OFF & _WOTLOFF & _PHRTE_ON & _xT_OSC 6. |; Registros * 7.| AS232.ContBits equ x0 8. | S232 Dato equ exo ». | Flags equ axe 10. | Contador equ 8xF u.| ww odopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0B!gd0048acton=prinipage:topic=24720.0 anos 71272020 ‘wiv odie. com atlforosindex.php?PHPSESSI Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A 42, | ;**** Definictones para el ensambladon *=** 113. | #OEFINE R5232_Rx PoRTs,@ 5 Linea por La que se reciben Los datos. 14, | #OEFINE RS232_7X orrs,1 j Linea por La que se envian Los datos. 45. | SOEFINE Kbnit Flags.@ } Indica si se ha recibido algun dato.~ 17 18. |Putreg. macro Registro as. | 704" befinietén de macros **** | Se envia La date de un registro o PC. vw. movfw Registro 2. call _85252_Enviapato 21. | ends 22. |; Se envia un Literal 9 PC. 23. |Pute macro. ACKTT 24. | rovin ACKIT 25. | call 85232 Enviapato 26. | ends 27. 28. | ILI 29. | ;*t4* Inicio del micro *#* 38. | Reset a | org 8x08 45 Aqui comtenza el micro. 32. goto Inicio 5 Salto a inicio de mi progrona.- 33. | *** vector de Interrupeton *#** 3a. | org 8xoa 45 Atlendo Interrupeion.- 35. | goto TSR 36. | 37. |; *#5* Prograna Principal **** a8. | :**** configuracton de puertos *** 3. org x05 4 Origen del codigo de prograna. 42, | Tnicio a. call 85252 Puerto; Se inicializa el puerto ¢ interrupcion para envion y recibir dotos 15932. aa, | 700" espera o recibir Dato." 43. | Bucle aa. betes xbhit 4 458 recibio Dato? as. goto $1 5 No, seguinos esperando a6. bef Kohut } Sl, borranos bandera. a Putreg 5232030; Envionos Lo quardado en 85232 Dato. a. goto sucle 5 sa, | j"*"" Ruting de servicio de Interrupcion “*** | sa. | ;**** Interrupeton por Ag0 **** | 52. |j Se Lee dato enviado por PC.~ 53. |; En este caso no es necesario hacer copias de respatdo de W y STATUS. 55. |} €L 19 bit rectbida se guarda en 85232 000,73 al rotarse 7 weces (Se rectbe el hyte conpleto) 56. |; este quedo en 85232 0ato,0 38. befss INCOM, INTF + Consultanos st es por RO. oe. | reteie jlo, Solinos de interrupetsn.- 1. | RS232_Leeroato 62. ova 47" 5 Minero de rotactones. 63. | ove R5232_Contbits ss. | call Desora 150us EL priner bit debe Leerlo un tiempo {gual 2 una 65. | ver y media el periods de transmision 66. | Leebit o7. bef 5282 pate,7 _; Ahora Lee el pin. fn principio supone que es @ oe. | befec 5232 8K 3 gealnente es cero? ©. | bsf 85232 Dato,7 5 Mo, pues condia o "2" 72. | ref RS232_Dato,1__; Rotanos para recibir el siguiente bit. n call Desora 2004s; Los siguientes bits Los Lee un periodo més torde n aects2 R232 ContBits,1 3 Conpruebo que es et dltino bit. n. | goto Leesit 3 No es el dltino, pasa a Leer et siguiente pvighghqeu2regabgkO8lgd004&acton=prinipagetopic=24720.0 anos 71272020 74. | %. 76, 7 na. | 7. | ae. | a1, 22 83. | aa. | 35. | as. | 37. | as. | 89, 92. s1. | 22. | 93. | 94, 95 96. | 97. | 8. | 99. | 100. |; 121 102, 103. 04, | 10s. | 106. | 107. 108. 109. 110. an. a2, 13. ana, us. us. aw. 118. 119. 120. aa. 12. | 123. | az | | | | as. 126. ayy a8. 1s. nae. | at. | 2. | i 13. wv odopie.com atlforosindex.php?PHPSESSI Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A bef —_RS232_Dato,7 _; Ahora Lee ultino bit enviado.Supone que es &. btfsc RS232_Ax 5 eRealnente es cero? sf RS232_Dato,7 jlo, pues conbia o "2". all —benora r9dus —_; Fspera un tiempo igual al bit de stop. bef Kohit 5 Se indica que ha Llegado dato. Fintsk 3 El dato recibido se guarda en <> INTCON, NTF 3 Linptamos bondera.- 4} Salinos de interrupetén. = ++ configure Los Lineas de salide y entrada **** RS232_Puerto bef STATUS, RPA st RS232_Ax. Esta Linea se configura como entrada. bef RS232_1K } Esta Linea se configura cono salida cirf —_OPTION_REG Config. Por flanco Descendente Interrupcion RBG. bef STATUS, AP@ bef -RS232_1x 5 Condicion de no transmision de datos. rovlw '10010000° 5 Habiitanes GIE y INTE (nterrupetsn por R68) row INTCON bef Kbhit 5 Borranos bandera. return st se envio Dato ***%+ j 1 se envia el 188, luego se va rotando a La derecha y se envian Los bits de mayor peso. S232_Enviabato novi R5232_Dato rovlw '8* novi — RS232_conceits bef —-R5232_1K call besora_100us Guarda et contenido del byte o transmitir. Ninero de bits a transmitin. Se genero bit de Start. enviaBit 5 Comienza a enviar datos btfss RS232pato,e@ (Es un “I" el bit a tronsmitir? bef RS232_1K 5 No, pues envia un "a btfse R5232Dato,@ —; Es un "I" el bit a tronsmitir? bst R5252_7x 3 Si, Transmite un "1" ref RS232_Dato,1 —_; Rota para envia siguiente bit. call Desora_100us 5 Este es el tiempo que estard en alto o bajo. Gecfs2 R5232_ContBits,1 3 Conprueba si es el ultino bit. goto Enviasit j No es el dltino bit repite La operactén. bst —RS232_1K } Envta bit de stop. call berora_100us return benora_100us rovly 4°31" nowt contador decfse contador goto $1 return Dewora_150us, rovlw 4°48" rowif Contador aects2 contador goto $1, return end /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, ‘Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Azicuetano en 22 de Febrero de 2009, 10: 0 Felicidades Suky! ‘Seguro que los compafieros que empiezan agradecen mucho tu trabajo :mrgreen: Un saludo desde Alicante, Titulo: Re: Mis primeros programas. Tutorial PIC1GF84A Publicado por: Suky en 22 de Febrero de 2009, 13:24:00 Gracias!!! La idea fue exponer lo que necesitaba cuando yo comence con los micros. Teoria y un ejemplo de aplicacién. Cuando tenga un poco de tiempo voy agregar alguna que otra cosita, Saludos desde Bariloche! ‘Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Veguepic en 22 de Febrero de 2009, 18: Coincido con Azicuetano, muy completo el aporte. Le he colocado una chincheta y espera que sigas agregando mas. Saludos Hugo Titulo: Re: Mis primeros programas. Tutorial PIC1GF84A Publicado por: ema en 01 de Marzo de 2009, 17:37:56 Wow :shock: excelente. Felicitaciones por aportar tanto esfuerzo a la comunidad ‘Titulo: Re: Mis primeros programas. Tutorial PIC16F84A Publicado por: Chrisbaf en 01 de Marzo de 2009, 18:04:04 gracias por este excelente tutorial , sigue adelante Titulo: Re: Mis primeros programas en ASM. Tutorial PICIGF628A/648A, Publicado por: Suky en 05 de Marzo de 2009, 23:34:45 PIC16F628A/648A Haré una Introduccién a los micros y realizare ejemplos para los médulos que no trae el PICL6F84A. Caracteristicas principales Conjunto reducido de instrucciones (RISC). Solamente 35 instrucciones que aprender a utilizar + Oscilador interno de 4MHz + Opera con una frecuencia de reloj externa de hasta 20 MHz (ciclo de maquina de 200 ns) + Memoria de programa: 2048 locaciones de 14 bits + Memoria de datos: Memoria RAM de 224 bytes (8 bits por registro) + Memoria EEPROM: 128 bytes (8 bits por registro) + Stack de 8 niveles + 16 Terminales de 1/0 que soportan corrientes de hasta 25 mA + 3 Temporizadores + Médulo de comunicacién serie (Usart + Médulo CCP (captura/comparaclén/PWM) + 2 Comparadores analégicos, una referencia de voltaje programable ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 sis 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Nota: Los médulos descriptos para el PICL6F628A son idénticos a los del PICI6F64BA, lo Unico que varia entre ellos son las siguientes caracteristicas: + Memoria de programa: PIC16F648A-4096 locaciones de 14 bits + Memoria de datos: PIC16F648A-Memoria RAM de 256 bytes (8 bits por registro) + Memoria EEPROM: PICIGF648A-256 bytes (8 bits por registro) De aqui en adelante me reflero al PIC16F628A pero los ejemplos son aplicables al PICL6F648A haciendo el cambio de encabezado: Céeigo: ASM a. | 5 t¥4 Encabezado * 2. | dist pet6f649a ——; List directive to 3. | include processor specifi (http://img7.imageshack.us/img7/6121/pindiagram.png) Puertos Los PIC16F628/648A cuentan con dos puertos PORTA y PORTB, algunos pines de estos puertos de entrada/salida son multiplexados con una funcién alternativa de los periféricos del dispositivo. Cuando un periférico es activado el pin no puede ser usado para propésitos generales de e/s, El PUERTO A es un puerto de entrada de 8 bits. Todos los pines, excepto RAS, pueden ser configurados como entrada o salida con la respectiva configuracién del registro TRISA. El pin RA4 esta multiplexedo con la entrada de reloj TOCKI y como salida se comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd, Fl pin RAS es un disparador Schmitt solo de entrada y no cuenta on controladores de salida, segiin la configuracién puede ser usado como Mclr (Reset externo), ¥ ademas sirve también para entrar en el modo de programacién cuando se aplica una tensién igual a Vp (13,4V minimo). Los demas pines del puerto trabajan de entrada como disparador de Schmitt Trigger y como salida Iégica CMOS. Los pines RAQ-RA3 sirven de entrada para el comparador analégico. Importante: Si se utiliza en puerto A como 1/0 Digital, se debe deshabilitar los Comparadores ‘Analégicos, cargando un 0x07 en CMCON. E| PORTB es un puerto bidireccional de 8 bits, del cual por software se pueden habiltar resistencias de pull-up internas. El PORTB es multiplexado con interrupciones externas, tales como deteccién de flanco por RBO, cambio de nivel por RB4 a RB7, USART, el médulo CCP y el reloj de entrada/salida TMR1. Otros pines + VDD: Pin de alimentacién positiva. De 2 a 5,5 Vcc + VSS: Pin de alimentacién negativa. Se conecta a tierra oa 0 Vec + MCLR: Master Clear (Reset). Si el nivel légico de este terminal es bajo (0 Vcc), el microcontrolador permanece inactivo, Este Reset se controla mediante la palabra de configuracién del PIC ‘+ OSC1/CLKIN: Entrada de oscilador externo + 0SC2/CLKOUT: Salida del oscilador. Dependiendo de cémo se configure puede proporcionar una salida de reloj por medio de este pin Organizacién de la memoria, EI PIC16F628 posee un contador de programa de 13 bits, capaz de direccionar un espacio de memoria de 8Kx14, Sin embargo, tinicamente los primeros 2Kx14, desde 0000h hasta O7FFh, estén implementados. Los vectores de reset e interrupcién estén en las direcciones 0000h y 0004h, respectivamente. La pila (stack) es de 8 niveles, lo cual significa que puede soportar hasta 8 direcciones de retorno de subrutina, (http://img10.imageshack.us/img10/7742/memorg.jpg) El PIC16F628 posee un espacio de memoria RAM de datos de 512x8, dividido en 4 bancos de 128 bytes cada uno, Sin embargo, solo estén implementados 330 bytes, correspondiendo 224 al area de los registros de propésito general (GPR) y 36 al drea de los registros de funcién especial (SFR). Los restantes 70 bytes implementados son espejos de algunos SFR de uso frecuente, asi como de los Ultimos 16 GPR del banco 0. Por ejemplo, las posiciones OBh, 8Bh, 10Bh y 18Bh corresponden al registro INTCON, de modo que una operacién hecha en cualquiera de ellos, se refleja automaticamente ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 ens 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, en los otros. Se dice, entonces, que las posiciones 88h, 10Bh y 18Bh estén mapeadas en la posicién OBh. Esta caracteristica agiliza el acceso a estos registros, puesto que no siempre es necesario especificar el banco donde se encuentran. La seleccién del banco de ubicacién de un SFR o un GPR particular se hace mediante los bits 6 (RP1) y 5 (RPO) del registro STATUS. (http://img14 imageshack. us/img14/8660/memprog jpa) Interrupciones: Registros utlizados: INTCON: Registro de lectura y escritura que contiene varios bits de sefializacién y habilitacién para el desbordamiento del TMRO, cambio sobre el puerto RB e interrupcidn externa en la patilla RBO/INT. 0, RBIF: Indicador de interrupcién por cambio de estado RB4-RB7 1. INTF: Indicador de interrupcién externa 2. TOIF: Indicador de interrupcién por desbordamiento de Timer 0 3. RBIE: Habilitacién de interrupcién por cambio de estado RB4-RB7 4, INTE: Habilitacién de interrupcién externa 5. TOIE: Habilitacién de interrupcién por desbordamiento de Timer 0 6. PEIE: Habilitacién de interrupcién de periféricos 7. GIE: Habilitacién general de interrupciones PIR1: El registro PIRI contiene los bits de sefalizacién individual de las interrupciones de periféricos 0, TMRIIF: Indicador de interrupcién por desbordamiento de Timer 1 1. TMRZIF: Indicador de interrupcién por desbordamiento de Timer 2 2. CCPLIF: Indicador de interrupcién del médulo de Captura/Comparacién, 2) Modo Comparador: Coincidencia entre TMR1 y CCPL b) Modo Captura: Ha ocurrido una captura de TMR1 3. No implementado. 4, TXIF: Indicador de interrupcién de fin de transmisién USART 5. RCIF: Indicador de interrupcién de llegada de datos USART 6. CMIF: Indicador de interrupcién por cambio de estado de alguna de las salidas de las comparadores. 7. EEIF: Indicador de interrupcién de fin de escritura eeprom interna, fegistro que posee los bits de habilitacién individual para las interrupciones de periféricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitacién de cualquier interrupcién de periférico. 0, TMRIIE: Habilitacin de interrupcién por desbordamiento de Timer 1 1, TMRZIE: Habilitacién de interrupcién por desbordamiento de Timer 2 2. CCPIIE: Habilitacién de interrupcién del médulo de Captura/Comparacién/PWM. 3. No Implementado. 4, TXIE: Habilitacién de interrupcién de fin de transmisién USART 5. RCIE: Habilitacién de interrupcién de llegada de datos USART 6. CMIE: Habilitacin de interrupcién por cambio de estado de alguna de las salidas de los comparadores. 7. EEIE: Habilitacién de interrupcién de fin de escritura eeprom interna, Ligica de Interrupciones: (http://img3.imageshack.us/img3/4549/logicadeinterrupciones6 jpg) Titulo: Re: Mis primeros programas, Tutorial PICL6F84A Publicado por: Suky en 05 de Marzo de 2009, 23:36:59 Palabra de Configuracién Los PIC16F628A/648A han sido construidos con caracteristicas tales que se pueden configurar para funcionar en mados de operacién que no necesitan componentes externos tales como el circuito de reloj © de reset. Esto implica que es necesario configurar su mado de operacién a través de una palabra de configuracién La palabra de configuracién se encuentra mapeada en la direccién 2007h de la memoria de programa y solo puede ser accesada durante la programacién de dispositivo. (http://img7.imageshack.us/img7/5917/configz.jpg) CP1:CPO:Bits de proteccién de cédigo Los bits 13-10 encargados de proteger la memoria de programa. ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 arnos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, CPD: Bit de proteccién para cédigo de datos 1 = Proteccién deshabilitada de la memoria de datos. 0 = Proteccién habilitada en la memoria de datos. LVP: Habilitacién de la programacién por voltaje bajo 1 = LVP habilltado, la terminal RB4/PGM tiene tal funcién, 0 = LCP: deshabilitado, RB4/PGM es una terminal I/O. BODEN: Bit de reset por voltaje de alimentacién bajo 1 = Reset por BOD habilitado 0 = Reset por BOD deshabilitado MCLRE: Habilitacion del terminal de reset 1 = Terminal de reset en RAS. 0 = MCLR conectado internamente a Vdd, RAS es un pin 1/0. PWRTEN : Bit de habilitacién de temporizador al energizar PWRT habilitado. PWRT deshabilitado. de habi 1 = WOT habilitado 0 = WOT deshabilitado. acién de Watch-Dog its de seleccién del tipo de oscilador (http://imgi89.imageshack.us/img189/7517/configosciladores.jpa) ‘Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Suky en 05 de Marzo de 2009, 23:41:49 El Médulo del Timer 0. Idéntico al del PICI6F84. El Médulo del Timer 1, El Timer 1 a diferencia del Timer 0 es un contador / temporizador de 16 bits. El conteo es realizado por dos registros de 8 bits: (TMR1H (OFh) y TMRAL (Eh) ), estos dos registros son tanto leibles como escribibles, Asi, el registro TMR1 se incrementa de 0000h a FFFFh y en la siguiente cuenta se reinicia en O000h y asi sucesivamente, al reciclarse se activa (en alto) la bandera TMR1IF (PIR1<0>), la cual puede ser utilizada para generar una interrupcién, o bien, para ser consultada por poleo, teniendo las mismas precauciones que ya se explicaron antes para la bandera TOIF, En la siguiente figura se muestra un diagrama de bloques de este médulo, en donde se indican los bits que afectan su operacién y la manera en que lo hacen. (http://imgB imageshack us/img8/9830/timert0 jpg) Modo temporizador En este modo el Timer se incrementa (si no se considera preescalador) en cada ciclo de instruccién (a la frecuencia Fosc/4). Este modo se selecciona limpiando el bit TMR1CS (TLCON<1>) El preescalador que se puede intercalar entre el reloj Fosc/4 y el registro TMR1 puede tener sélo uno de 4 valores: 1/1, 1/2, 1/4 y 1/8. En este caso la temporizacién de calcul Temporizacién = Ciclo de instruccién. (65536-TMR1) -Divisor de Frecuenci \Vemos que la maxima temporizacién posible es con TMR1 = 0, y Divisor de Frecuencia en 8, logréndose unos 524.3 ms aprox. Modo contador El Timer 1 también puede operar como contador, en este Ultimo caso, la entrada a contar se toma dela patita externa RB6/TLOSO/TICKL. Configuraciones: El Timer 1 posee un bit para habilitacién / deshabilitacién, este es el bit TMRLON (T1CON) y habilita en alto. ‘Ademés, el Timer 1 posee una entrada interna de RESET, el cual puede ser activado por uno cualquiera de los médulos CCP que. A continuacién se describe el principal registra relacionado con el Timer 1 y todos sus bits, excepto los que tienen que ver con el modo contador: Registro TICON (10h) ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, (http://img9.imageshack.us/img9/1343/timer11.jpg) bits 5:4 TACKPS1:TACKPSO.- Bits de seleccién del valor del divisor de frecuencia del preescalador: 11 = divisor 1/8 10 = divisor 1/4 0.1 = divisor 1/2 0.0 = divisor 1/1 bit 1 TMRICS.- Bit de seleccién de la fuente de reloj 1 = Modo contador (fuente de reloj: patita RCO/TLOSO/T1CKI) (0 = Modo Temporizador (fuente de reloj Fosc/4) bit 0 TMR1ON.- Bit de habilitacién / deshabilitacién del Timer 1: 1 = habilita Timer 1 0 = Deshabilita Timer 1 ConfigPIC traé una herramienta adicional que nos ayuda a seleccionar el preescaler y valor inicial del Timer para obtener una temporizacién deseada: (http://img139. mageshack-us/img139/8141/21115051.th.jpg) (http://img139.imageshack.us/my.php? Image=21115051 jpg) Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Suky en 05 de Marzo de 2009, 23:45:00 Para ejemplificar haremos un simple ejemplo donde Io utilizamos como temporizador, Se hard titilar un led conectado al PIN RBO cada 300 ms. Como se puede ver es idéntico al ejemplo realizado para Timer 0 del PICI6F84A, solo que en este caso no necesitaremos un registro adicional para lograr la demora deseada. Hardware: (http://imgt7 imageshack. us/img17/5300/tmr1.bmp) beige: ASM a. | 5 #884 encabezado “4 2. | list prist6264 jist directive to define processor 2. | ‘include ; processor specific variable definitions “ CONFIG _CP_OFF & _WOT_OFF & _BODEN_ON & _PNRTE_OW & _INTOSC_OSC_NOCLKOUT & _paTA_COTBFF & UP OFF & _HCLRE_ON s.| 7. | sper ine Led PORTB,@ 5 Led ubicado en Puerto B, bit @.- 8 | 8. | S/MIIIIUIIIM ILI ore 0x00 5 Aqui comienza el micro goto Inicio 5 Salto a inicio de mi progrona. | | aa, |; vector de Interrupeton *#** 1s. | org 8xoa 45 Atlendo Interrupeton.- 16. | goto TSR v7. a8. |; *#5* prograna Principal **** as. | +++ configuracion de puertos *** 20. | org ox, 4 Origen det cédigo de - 21, | Inicio 22. | bef STATUS,RPO_—_; Pasomos de Banco @ a Bunco 1 23. | novi B'1n1111108' —; RE cono soLida.~ 24. | rovnf TRISB 2s. | bef STATUS,RPA— Banco 28. | ovlw b°06110001' Se seLecciona THR, preescaler de 1/8, modo tenparizodor ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 27. | rovnf TCON 28. | bef Led 45 EL Led comtenza apagado.- 29. | rovim @xs0 5 Carganos 28635 en THEI para 38. | own —TARIH 3 Byte alto de THR a1. | ovin oxda 22. | rnowwf — TARIL 3 Byte bajo de THR x. | bsf —STATUS,RP@—— Banco 1.~ 34. | bst TH 5 Activar interrupein por THe 35. | sf INTCON,GIE __; HabiLtacton general de interrupciones 36. | sf INTCON, PELE; HabiLitacton de Interrupcton por perifericos.- 37. | bef STATUS RP; Banco 8 38. | ;**** Control de Led **¥* 39. | Buete 2. | op } Aqui el micro puede ejecutar cualquier otra tarea a1. | goto Bucle 3 sin necesided de utilizar tiempo en un bucle de denora. a2. | a. | 4a, | :240* nutina de servicio de interrupcion *#** 4s. | terrupcton por THRI **** aa. | retfie 1 No, salinos de interrupeton.~ «9. | befss Led 3 Si, Controtonos Led. Si esta apagado, prendo y viseversa.~ 0. | goto Prendo_led sa. | bef Led 3 Apago Led. 52. | Actual izo_TR1 5 Actualizo THEA para obtener una temporizacton de 300 ms 33. | roviw 9x60 } Corganos 26036 en THR sa. | rovuf —TARIH 45 Byte alto de TARI.~ ss. | rovin @x84 36. | own TARIL 4 Byte bajo de THRs 7. | goto Fin tSR festouro valores. 58, | Prendo_ted 5. | bst Led 3 - 60. | goto Actuatizo TA 61. | Fin_tsR 62. | bef PERL, TMRIIF _; Borro bondera de control de Interrupcion.~ 63. | retfie 7 Solinos de interrupetén. 6a. |; 6s. | 6s. | end 67. | Titulo: Re: Mis primeros programas. Tutorial PICI6F&4A Publicado por: Suky en 05 de Marzo de 2009, 23:47:57 El Médulo del Timer 2. El Timer es un temporizador (sin opcién de trabajar como contador) de 8 bits. Su registro principal denominado TMR2 (11h) es un registro de 8 bits que se incrementa continuamente ala frecuencia seleccionada de Fosc/4 divicida por un preescalador. En la siguiente figura se muestra un diagrama de bloques del médulo del Timer2. (http://img10.imageshack.us/img10/1640/timer20. jpg) El preescalador La frecuencia que incrementa al registro TMR2 puede ser dividida por un preescalador por un factor de 1/1, 1/40 1/16, seleccionable por os bits T2CKPS1:T2CKPSO (T2CON<1:0>) EI Registro de comparacién o de Periodo En operacién, el contenido del registro TMR2 se compara continuamente con un registro de periodo denominado PR2 (92h) cuyo valor podemos establecer por software. Cada vez que la cuenta de TMR2 es igual a PR2, se reinicia el conteo en TMR2 desde cero, y ademas se genera una sefial de salida, Ia cual es tratada por un postescalador, para poder generar una sefial TMR2IF (PIR1<1>) que puede ser usada para solictar una interrupcién, o para ser leida por poleo, El Postescalador wv odie. com atlforosindex.php?PHPSESSI pvighgkqeu2reggbgkO8lgd0048acton=printpagertopie=24720.0 ans 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, El postescalador divide la frecuencia con que ocurre una activacién de la bandera TMR2IF, es decir, si el valor del postescalador es 1/1, esta bandera se activard cada vez que TMR2 se reinicie, en cambio, si es 4/16 (por ejemplo), TMR2IF se activaré cada 16 reinicios de TMR2. En forma similar 2 los otros dos Timers, esta bandera debe ser limpiada previamente, si se quiere detectar su activacién, esto puede ser hecho en la rutina de atencién a a interrupcién, o bien en la rutina que la detecta por poleo. El valor de divisién del postescalador puede establecerse por software mediante los bits T2OUPS3:T2OUPSO (T2CON<6:3>). En este caso la temporizacién de calcula: Temporizacién = Ciclo de instruccién. (PR2-TMR2) .Divisor de Frecuencia Pre. Divisor de frecuencia Post \Vemnos que la maxima temporizacién posible es con TMR2 = 0, y Divisor de Frecuencia Pre en 16, Divisor de frecuencia Post en 16, lograndose unos 65.5 ms aprox. A continuacién se describe el principal registro relacionado con el Timer 2 y todos sus bits. Registro T2CON (12h) (http://imgi4 imageshack us/img14/8921/timer21 jpg) bits 6:3 T2OUPS3:T2OUPSO.- Bits de seleccién del valor del divisor de frecuencia del postescalador, de acuerdo a la siguiente tabla: 0000 = divisor 1/1 0001 = divisor 1/2 0.0.10 = divisor 1/3 vii. divisor 1/16 bit 2 TMR2ON.- Bit de encendido del Timer 2 1 = Enciende (energiza) el Timer 2 0 = Apaga (desconecta) el Timer 2 bits 1:0 ‘T2CKPS1:T2CKPSO.- Bits de configuracién del valor del preescalador de acuerdo a la siguiente tabla: 0.0 = divisor 1/1 0.1 = divisor 1/4 1x = divisor 1/16 Ejemplo de configuracién para lograr una temporizacién de 20 ms: Céaigos ASM 1. | bef STATUS RPA: Banco 8 2. | noviw '01020110) Se selecctona T#R2, preescaler de 1/16, postescaler 1/8.- 3 | rovuf T2CON 4. | se STATUS RPA Banco 1. 5. | rovin 8x90 5 Carganos 157 en PR2 para Lograr 20ms.- 6. | own PR2 7 | bsf PIER, THRAIE —; Activar 4 (49243; por THR? 8. | sf INTCON,GIE_; HobiLitecton general. de interrupciones 3. | bef IWTCON, PETE; HabiLitacton de Interrupcton por pertfericos 10. | bef STATUS APB; Bonco Control de interrupeién: Céaigo: ASM 1. [tse 2 | befss PIRI TURAIF—; ConsuLtonos = es por THR2 a | 5 Si, rutina de interrupeton 5. 6 | 7. | Hints 8 | bef PIRL,TWRIIF __; Borro bandera de control. de Tnterrupcton. ». | retfie Satinos de interrupcion. ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, ‘Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Suky en 05 de Marzo de 2009, 23:52:08 La USART del PIC16F628/648A La USART puede configurarse como sistema asincrono -full diplex-, que puede comunicarse con dispositives periféricos como ordenadores personales u otros microcontroladores, o puede configurarse como sistema sinerono -half daplex-, que puede comunicarse con periféricos tales como circuitos integrados converti¢ores A/D y D/A, EEPROMS serie, etc La USART del PIC puede ser configurada para operar en tres modos: + Modo Asincrono (Full duplex, transmisién y recepcién simultaneas) + Modo sincrone Maestro (Hald duplex) + Modo sincrono Esclavo (Hald duplex) Aqui solo trataré el modo asincrono Modo Asincrono. En este modo la USART usa un formato esténdar NRZ asincrono, el cual para la sinecronizacién usa: 1 bit de inicio (I), 8 0 9 bits de datos y 1 bit de paro (P). Mientras no'se estan transmitiendo datos la USART envia continuamente un bit de marca. El modo asincrono se selecciona limpiando el bit SYNC del registro TXSTA (98H). EI modo asincrono es deshabilitado durante el modo SLEEP. Cada dato es transmitido y recibido comenzando por el LSB. E| hardware no maneja bit de Paridad, pero el noveno bit puede ser usado para este fin y manejado por software. médulo Asincrono de la USART consta de 3 médulos fundamentales: El circuito de muestreo El generador de frecuencia de transmisién (Baud Rate) El transmisor asincrono El receptor asincrono. El circuito de muestreo: El dato en la patita de recepcién (RB1/RX/DT) es muestreado tres veces para poder decidir mediante un circuite de mayoria, si se trata de un nivel alto o un nivel bajo. El Generador de Baud Rate (BRG) Este generador consiste de un contador/divisor de frecuencia de 8 bits controlado por el registro SPBRG (99H). De tal manera que la frecuencia de transmisién se calcula de acuerdo a la siguiente tabla: (http://img8 imageshack, us/img8/2130/usart0.jpg) En esta tabla X=valor de 8 bits en el registro del divisor, SPBRG. El bit BRGH corresponde a TXSTA<2>. En el datasheet del PIC16F628/648A hay tablas donde se muestran algunos valores baud esténdares, el divisor necesario (X=SPBRG) bajo diferentes frecuencias Fosc y el error producido en porcentaje, El transmisor asincrono En la siguiente figura se muestra el diagrama de bloques del transmisor de la USART. (http: //img7. imageshack.us/img7/9805/usar1.jpg) El corazén de este médulo es el registro de corrimiento TSR y la Unica manera de acceder al registro TSR es a través del registro TXREG (19H). Para transmitir un dato, el programa deberd ponerlo primero en el registro TXREG, En cuanto el TSR termina de enviar el dato que tenia, enviando el bit de paro, se transfiere el dato contenido en TXREG (si hay alguno). En cuanto el dato de TXREG es transferido al TSR el TXREG queda vacio y esta condicién se indicada mediante el bit bandera TXIF (PIR1<4>), el cual se pone en alto. Este bit NO puede ser limpiado por software, solamente se borraré cuando un nuevo dato se cargue en el registro TXREG. Si se escribe un dato seguido de otro a TXREG el primero se transfiere inmediatamente a TSR y el otro tiene que esperar hasta que el TSR termine de enviar el bit de Stop del primero. Durante esta espera TXIF permanece en bajo. Mientras el bit indicador TXIF sefiala el estado del registro TXREG, otro bit, TRMT (TXSTA<1>), muestra el estado del registro TSR. El bit de estado TRMT es de lectura, y se activa cuande el registro TSR est vacio, Ninguna interrupcién est unida a este bit por lo que TRMT est pensado para ser consultado por “poleo” (sin usar interrupciones) Para habilitar el médulo de transmisién es necesario poner en alto el bit TXEN (TXSTA), mientras no se habilite el médulo, la patita de transmisién (RB2/TX/CK) se mantiene en alta impedancia. Si TXEN es deshabilitada a la mitad de una transmisién, esta sera abortada y el transmisor sera reseteado, Para seleccionar una transmisién a 9 bits, el bit TX9 (TXSTA<6>) deberd activarse, y el noveno bit deberé escribirse en TX9D (TXSTA). El noveno bit se escribir antes de cargar los 8 bits de datos en el registro TXREG. Esto es necesario, porque al escribir un dato en el registro TXREG puede tener lugar una transferencia inmediata del dato al registro TSR (si TSR esta vacio). En este caso, se habré cargade un dato incorrecto de nueve bits en el registro TSR. De acuerdo a lo anterior, la inicializacién del médulo de transmisién consiste en los siguientes pasos: ww todopie.com arlfrosindex php?PHPSESSID=pvi9ngkqoureggbqk0Bigd0048acton=prinipage:topic=24720.0, aanos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Iniclalizar baud rate escribiendo al registro SPBRG el divisor adecuado y opcionalmente al bit BRGH. Habilitar comunicacién asincrona limpiando el bit SYNC y poniendo el bit SPEN. Si se van a usar interrupciones, poner el bit TXIE (PIE<4>), Poner el bit TX9 si se desea transmitir datos de 9 bits Habiltar transmisién poniendo el bit TXEN, lo cual pondrd el bit TXIF. Colocar el noveno bit del dato en TX9D si se estan usando datos de 9 bits. Cargar el dato al registro TXREG (inicia la transmisién). El receptor asincrono EI médulo de recepcién es similar al de transmisién, en la siguiente figura se muestran los bloques que lo constituyen. (htep://www.todopic.com.ar/foros/index.php?action=dlattach;topic=24720.0;attach=10359) Una vez que se ha seleccionado el modo asincrono, la recepcién se habilita poniendo en alto el bit CREN (RCSTA<4a>) El dato es recibido mediante la linea RB4/RX/DT y se conduce hasta el bloque Data Recovery (Recuperacién de dato), la cual maneja un registro de corrimiento de alta velocidad (16 veces el Baud rate) El corazén del receptor es el registro de corrimiento RSR. Este registro no es accesible por software, pero al capturar del bit de STOP el dato de RSR es transferido automaticamente al registro RCREG (Aah) si éste est vacio y al mismo tiempo es puesto en alto la bandera de recepcién RCIF (PIR1<5>). La Gnica manera de limpiar la bandera RCIF es leyendo el/los datos del registro RCREG. El RCREG es un registro de doble buffer (una FIFO de dos posiciones). Si las dos posiciones del registro RCREG estén llenas (no han sido lefdas) y se detecta el bit de Stop de un tercer dato de recepcién, lo cual ocasiona un transferencia automatica del dato recibido a RCREG, esto destruiré el primer dato recibido y activard el indicador de desbordamiento OERR (RCSTA<1>). La Gnica manera de limpiar el bit OERR una vez que ha sido activado es reseteando el médulo de recepcién (limpiando CREN y volviéndolo a poner). Si el bit OERR esté en 1, se inhibe la transferencia desde el registro RSR hasta el registro RCREG, por lo que es vital borrar el bit OERR, si estuviese activado, El error de concordancia FERR (RCSTA<2>) se activa si un bit de STOP se lee en nivel bajo. Tanto este indicador como el noveno bit RX9D se memorizan en el mismo canal que el dato recibido, de manera que al leer RCREG se actualizan FERR y RX9D con nuevos valores, por lo cual estos bits deberdn ser leidos antes de leer RCREG para no perder su informacién. De acuerdo a lo anterior, la inicializacién del médulo de recepcién es como sigue: 1, _Inicializar el baud rate escribiendo al registro SPBRG el divisor adecuado y opcionalmente al bit BRGH 2. Habilitar el puerto serie asincrono limpiando el bit SYNC y poniendo el bit SPEN. 3. Sise van a usar interrupciones, poner el bit RCIE (PIE<5>).. 4. Sise desea recepcién de datos de 9 bits se debers poner el bit RX9 (RCSTA<0>). 5. Habilitar la recepcién poniendo el bit CREN (RCSTA<4>) 6._El bit RCIF se pondra cuando la recepcién de un dato se complete y se generaré una interrupcién si RCIE esta puesto 7. Leer el registro RCSTA para obtener el noveno bit (si se estén recibiendo datos de 9 bits) o para determinar siha ocurrido un error de recepcién, 8. Leer los 8 bits del dato recibido leyendo el registro RCREG. 9. Si ocurrié algin error este se limpia al limpiar el bit CREN, el cual deberé volver a ponerse si se desea continuar la recepcién ConfigPIC permite seleccionar algunos parémetros para configurar el médulo USART del pic, y generar el cédigo de ayuda ;) (http://img139.imageshack.us/img139/2733/80990777.th.jpg) (http://img139.imageshack.us/my.php? image=80990777 jpg) ‘Titulo: Re: Mis primeros programas. Tutorial PICL6F84A Publicado por: Suky en 05 de Marzo de 2009, 23:54:52 Ejemplo: En este caso usando el médulo Usart del PICIGF628A y la interrupcién que genera ef mismo al recibir un dato haremos un ejemplo donde esperamos dato desde PC, lo recibimos y lo reenviamos inmediatamente. Hardware necesario: ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A (http://img9 imageshack. us/img9/7292/hardrs232.bmp) Céeigo: ASM 2. dist peisfez8a =; List directive to define processor 3. | ‘include 5 processor specific variable definitions “ CONFIG _CP_OFF & NOT_OFF & BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATALCOLDFF & _L0P_OFF & _PCLRE_ON 5 | 6. | ;**4* befinieton de variables **+* 7 DATARS232. eau 20; Dato recibido desde PC. a | Flags equ eat 5 9. | ;20%* veFinietones para et ensanbladar *=** 20, | woer INE xohit Flags.e Indica si se ho recibido algun dato. a1, | :***" pefinicién de macros *** 42. |; se envia La data de un registro 0 PC. 13. |Putreg macro Registro a novtw Registro a3. call 85232_frviapato 36. ends a7. |; Se envia un Literal 0 PC. 18, |Pute macro ACKIT vw. sovlw —ACKIE 22. call 85232 Enviapato 21. | ends 22. | 23. | 2a. | SIIIIIIILIIILITILLIUILULTLLT 25. | ;*#* Inicio del Micro **=* 26. | Reser 2. org exe 5 Aqut comienza el micro. 2. goto Inicio 5 Salto a inicio de mi programa. 23. | 38. | ;**** vector de Interrupeton *#** a1. | org ox0a 45 Attendo Interrupeton.- 22. goto TSR 33. a4. |; #45 Prograna Principal **** 3s. | ore 0x05 36. | Inicio 37. | bst —STATUS,APB—; Bonco 2 38. | sovlw 6x02 20. | sovwf TRISB 45 Configuo pines para Usort.~ 4. sovlw 6x04 a. rovnf TXSTA 43 Configura modo asincrano, baud rate de alta velocidad a2. | novlw 6x19 5 Configura velocided a 9600 baudios con cristal de 4 Mhz a. | owt SPORG aa. | bef PIEL,RCIE _—_;-HabiLita intenrupcion de puerto serie para recepcio 4s. sf INTCON,GIE__; HabiLitacion general. interrupciones 46. sf INTCON, PETE ; HabiLitacion de interrupctones por perifericos 47. |; Activar recepeion, transmision.- as. | sf TXSTA,THEN ——;-HobiLito transmiston 2. | bef STATUS,RPB 5 Bonco 6 se. | sf RCSTA,SPEN —_ Habit itacton puerto serie si. | sf RESTA,CREN 5 Hadilito recepeion sa. | bef kbhit 5 Limpionos bandera 33. 58. | Bucle ss. | betes kbhit 5 eSe recibio Dato? 56. | goto $-1 3 No, seguimos esperando. 37. | ber xbnit 45 Si, borronos bandera. - se. | Putreg DATARS232 ——; Envianos Lo guardado en DATA RS232. wv odopie.com atlforosindex.php?PHPSESSI /ngkqeu2reggbakO8lgd004&acton=prinipagetopic=24720.0, anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 33. | goto aucle 3 oe. 3 1. | ;-04* Ruting de servicio de Interrupcion **=* 62. | ;**** rnterrupcton por Usart (Recepcton de Dato)**** 63. | 15k a. | befss PIRI, RCIF 3 Consultanos si es Usort 6s. | retfie 5 Mo, Salinos de interrupetén.~ 6s. | rovtw ACRES 5 Lego dato, Lo guardanos en un registro. 67. | rnowwf DATA_RS252 os. | bstxbnit 4 Indiconos que ha LLegado Oato.- 69. | Fin_tsk 70. | bef PIRI, REI + Limptanos bandera n.| retfie 3 Solinos de interrupcten n. |; 73, | "0" putinas ¢*° 74, | ;2*4* se envia Dato **** 75. | RS232_Enviabato 76. | bsf STATUS, Ra Bonco 2 7. | btfss TASTA,TANT —; chequea st esta listo 7. | goto. $-1 3 Esperanos a que se desocupe. - 7. | bef STATUS,APB_—; Bonco @ 30. | owt TxREG 2 envie Dato a1. | return 32. |; 2. | end aa. | Titulo: Re: Mis primeros programas. Tutorial PIC16F84A Publicado por: Suky en 05 de Marzo de 2009, 23:58:53 Médulos de comparacién analégica y tensidn de referencia EI Médulo Comparador Dispone de dos comparadores analégicos C1 y C2 cuyas entradas pueden ser seleccionadas entre los pines RAO a RA3 y cuyas salidas pueden utlizarse para lectura digital interna o bien conectarse a dos pines de salida: RA4 y RAS, También podria ser posible emplear un nivel de tensién configurable y generado por atro bloque, el denominado Médulo de Referencia de Tensién El multiplexado para la seleccién de las entradas a comparar y las salidas a generar depende del registro de control de comparacién CMCON (Ox1F). Existen 8 configuraciones posibles de entradas y salidas de comparacién que se seleccionan con los 3 bits menos significatives (CM2-CM1-CMO). En ese mismo registro se pueden leer los estados en la salida de cada uno de los comparadores C1 y C2 y si se desea invertiro no la légica del resultado de la comparacién que aparece a la sada Registro CMCOM (http://imgt0 imageshack us/imgi0/7134/comanalogico.jpa) Bit 7 C2OUT: Bit de salida del Comparador 2. Cuando C2IN Si C2Vin+>C2Vin- = 1 Si C2Vin+C2Vin- = 0 Si C2Vin+C1Vin- Si C1Vin+C1Vin- Si ClVin+ = 001 1 = CiVin- conectado a RA3 0 = CiVin- conectado a RAO. Cuando CM<2:0> = 010 1 = C1Vin- conectado a RA3 C2Vin- conectado a RA2. (0 = CiVin- conectado a RAO. €2Vin- conectado a RAL. Bit 2-0. (CM<2:0>: bits de seleccién de configuracién de los Comparadores, (http://img3.imageshack.us/img3/5291/comanalogico2.jp9) Modo de Trabajo de los Comparadores + Sila entrada analégica VIN+ es mayor que la entrada analdgica VIN-, entonces la salida del comparador seré un estado digital alto + Sill entrada analégica VIN+ es menor que la entrada analégica VIN-, entonces la salida del comparador seré un estado digital bajo (http://img3.imageshack.us/img3/6232/comanalogico3 jpg) Las reas sombreadas de la salida del comparador en la figura representan la incertidumbre debido a tensiones de desviacién y tiempo de respuesta Referencias de Comparacién La referencia de tensién para la comparacién puede ser: Externa: se conectaré a cualquiera de los pines de entrada externos del comparador y esa tensién deberd estar comprendida entre VDD y VSS Interna: se puede emplear una referencia de tensién generada a nivel interno por parte de un médulo interno especifico presente dentro del micracontrolador cuando se configuran los bits CM<2:0> con la combinacién 110 Médulo de Referencia de Tensién para Comparacién Se trata de un divisor resistivo a partir de Ia tensién de alimentacién del microcontrolador. Registro VRCON (9Fh) (http://img9. imageshack.us/img9/5961/comanalogicoS jpg) (http://img3.mageshack.us/img3/3337/comanalogico4 jpg) VR<3:0> Seleccién de la tensién de referencia: SNR ik < 30> Vdd Vref = a ‘Si VRR = 0: “ id . 1) VR<3:0> Vad Vref = (vaa ) nr Interrupciones del Médulo de Comparacién E| médulo de comparacién puede generar una interrupcién por activacién del flag CMIF (Flag de Interrupcién del Comparador) presente en el registro PIRI. El flag CMIF se pondré a 1 si se produce un cambio en la salida de cualquiera de los dos comparadores (COUT 6 C20UT) desde la ditima lectura que se realizé del registro CMCON. El flag debe ponerse a cero por software pero ademas debe realizarse previamente una operacién de lectura (0 escritura) del registro CMCON para que deje de darse la discrepancia entre el valor actual y el ww todopie.com arlfrosiindex php?PHPSESSID=pvi9hgkqoureggbqK0Blgd004Aacton=prinipage:topic=24720.0, 4605 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, valor lefdo. Para que se produzca la interrupcién deben encontrarse activadas la mascara particular (CMIE en PIE2), la de periféricos (PEIE) y la global (GIE). Caracteristica especial del Médulo Comparador Si un comparador se encuentra activo y se sitda al microcontrolador en modo de bajo consumo (SLEEP), el comparador permaneceré activo y las interrupciones si estén activadas mediante sus mascaras seran funcionales y podran sacar al micro de su modo de bajo consumo si cambia la salida de alguno de los. comparadores desde la ultima lectura. ConfigPIC permite seleccionar la configuracién del médulo comparador analégico y tensién de referencia, generando el cédigo de configuracién (http://img15.imageshack.us/img15/8679/18884242.th.jpg) (http://img15.imageshack.us/my.php? image=18884242.jpq) Titulo: Re: Mis primeros programas. Tutorial PIC16F84A Publicado por: Suky en 06 de Marzo de 2009, 00:01:51 ‘A modo de ejemplo conectaremos un potenciémetro al comparador 1, fijando una tensién de referencia interna a 3.59 Volt e invirtiendo la salida del comparador. Cuando la tensién sobre el pin RAO (C1Vin-) sea mayor a 3.59 Volt haremos titilar un led 10 veces a modo de alarma. Hardware necesario: (http://img14.imageshack.us/img14/9623/companalogico.bmp) Diagrama de Flujo: (http://img8.imageshack.us/img8/7638/flujocomp.jpa) Céaigo: ASM a. | 5 "8 encabezado ***= 2. | list 66284 =; List directive to define processor 2. | include _; processor specific variable definitions 4 CONFIG _CP_OFF & _WOT_OFF & _BODEN_ON & _PHRTE_ON & _INTOSC_OSC_NOCLKOUT & DATALCELGFF & _IVP_OFF & PCLRE_ON Be 6. | :*#** eFinicion de vartables **** 7. |Contadort equ ex20-—; Registro utiLizado pare demora.- 8. |contador2 equ.» 0x21; Registro utilizado pore denora.- 9. | Loop eq oz: ae, | ;2*% befiniciones para el ensamblador **** 11, | #OEFINE Led PORTS, ; Led ubicado en Puerto 8, bit 8. 32. | MATL 13. | ;*¥*" Inicio det micro 14. Reset 1s. | ore x00 5 Aqui contenza el micro.~ 16. | goto Inicio 5 Salto a inicio de mi prograna a9. | ore 8x04 1 Atiendo Interrupe 20. | goto Tsk a.) 22. |; **** programa Principal *** 23. | org x05 24, | Tnicto 2s. | oviw ext? i ionanos 2 conparadores con Vref interna 26. | 3 GAVin- -> RAB, C2Vin- => RAd 27. | } Saltda de conparador 1 inverttda 28. | rowuf cMCON 2. sf STATUS,AP® > Bonco 2 30. | oviw 9x03 5 RAO y RAT como entrada. a1. | rovuf TRISA 22. | care TRIS® 3 PORTE cono sali. 3. | fovim oxaF 5 Wef activado, Lov, VRc3:6>=15 (vref=3.59 Volt). 34. | rovnf — VRCON ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 arnos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A . bef STATUS, RPA; Banco 8.~ cirf PORTE ovf —CHCON, # 5 Operacton de Lectura bef PUR, CHF 5 Linpianos bandera.- - st STATUS,RP@—; Banco 1.- bef HEL, CHIE ; HobiLitanos interrupcion por comparadan anaLogico. bsf INTCON,PEIE _; HobiLitacion de Interrupcion por perifericos. bsf INTCON,GIE—; HabiLitacion general de interrupctones.- bef STATUS, RPA Bonco 8. bucle op goto aucle j1t0* Rutina de servicto de Interrupcton **** 8%" Interrupcton por Conparador Analogico**** | ESR befss PIR, cHIF 3 Interrupeton por Comparador? - retfie 4 No, salinos de interrupcion. = btfss CHCON,CLOUT _; ConsuLtanas estado del conparador. goto Fin ISR } SL es @ salinos de interrupeton.~ : call Alarna 3 Si es 1, indicanos una alerna.- Fin_1sk novf —CHCON, # 5 Operacton de Lectura bef PUR, cHIF 5 Linpiamos bandera.- retfie pat" Rutinas “= | Alarm rovlw x0 4 Hacenos titilor 10 veces el Led. nowt Loop . bst Led call bezora_150ns bef Led call beeora_sens decfs2 Loop goto $-5 retura 5. | Denora_asans rovln @xFF ; nowt contadort 3 Inictanos contadort.~ . | Repeticiont ovln 6xc3 A . ov contador? 3 Inictanos contador? Repeticion2 decfs2 Contador2,1 _; Decrenenta Contador? y si es @ sate. goto Repeticion2 —; Sino es @ repetimos ciclo.- decfs2 Contadora,1 + Decrenenta Contador goto Repeticiont —_; Sino es cero repetinos ciclo. return 5 Regresa de La subrutina. ena Titulo: Re: Mis primeros programas. PIC1GF84A y PIC1GF628A/648A Publicado por: Suky en 06 de Marzo de 2009, 00:23:28 Médulo CCP Introduccién wv odopic.com arlforasindex. php?PHPSESSID=pvi9ngkqeu2reggbak0Blgd0048action=prinipage;toic=24720.0 ans 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Los microcontroladores PICL6F628A/648A disponen de un modulo de Captura/Comparacién/PWM que en conjunto con los temporizadores, permite realizar en forma sencilla las tareas de medicin de tiempo y frecuencia, y generacién de sefiales digitales. El modulo CCP tiene 3 modos de funcionamiento, que se describen a continuacién: + Modo captura: Permite capturar el valor que tiene en registro TMR4 cuando ocurre un evento especial en la terminal RB3/CCP4, + Modo comparacién: Permite comparar el valor de 16 bits del TMR4 con un valor previamente definido en los registros CCPRL1H y CCPR1L + Modo PWM: Permite generar sefiales digitales moduladas en ancho de pulso A continuacién se da un breve resumen de los registros relacionados con cada médulo: El registro principal de este médulo se compone de dos registros de 8 bits, cenominados CCPRIH (46h) (parte més significativa) y CCPRAL (15h) (parte menos significativa). La operacién del médulo se controla mediante el registro CCPLCON (17h) y el disparo de evento especial, el cual es generado al alcanzarse la igualdad en un registro de comparacién reseteard el Timer 1 Seleccién del modo de operacién: La seleccién del modo en que trabajara el médulo CCP se realiza mediante los cuatro bits menos significativos del registro CCP1CON, es decir, mediante los bits CCP1M3:CCP1MO (CCPICON<3:0>) de acuerdo a lo siguiente: 0000 Captura/Comparacién/PWM deshabilitados 0100 Captura cada transicién de bajada 0101 Captura cada transicién de subica 0110 Captura cada cuarta transicién de subida 0111 Captura cada 16 transiciones de subida 1000 Comparacién, pone salida cade coincidencia 1001 Comparacién, limpia salida cada coincidencia 1010 Comparacién, genera interrupcién cada coincidencia (Se setea bit CCPIIF, salida inalterada) + 1011 Comparacién, dispara evento especial (Se setea bit CCPIIF , resetea TMRI(TMRIIF inalterado) ) + Lixx Modo PWM. EI Modo de Captura En el modo de captura el registro CCPR4 (CCPRAH:CCPRIL) captura el valor de 16 bits registro TMR4. ‘cuando ocurre un evento en la patita RB3/CCP4. El evento en cuestién puede especificarse previamente como alguno de los siguientes: + Cada transicién de bajada + Cada transicién de subida + Cada cuarta transicién de subida + Cada dieciseisava transicién de subida ‘Ademds de que el valor de TMR1 es capturado, la bandera de solicitud de interrupcién CCPAIF es activada, la cual deberd ser limpiada por software para poder detectaria si se esta consultando por poleo. El tipo de accién que se desea detectar en esta patita se configura mediante los bits de control CCP1M3:CCP1MO (CCP1CON<3:0>). Si ocurre otro evento de captura antes de que haya sido leido el registro CCPR1, el valor capturado anterior se perderd, ya que con la nueva captura este registro es reescrito. En la figura siguiente se muestra un diagrama de bloques en donde se ilustra la manera en que trabaja el médulo CCP en modo de captura: (http://img9.imageshack.us/img9/1541/ccp6280.jpg) El valor del preescalador se configura mediante los bits CCP1M3:CCP1MO. Sin embargo, al realizar un ‘cambio en la configuracién del preescalador se puede generar una interrupcién falsa, para evitar lo anterior se deberé apagar el modulo CCP (limpiando el registro CCP1CON) previamente al cambio de valor del preescalador. Este preescalador es independiente al preescalador del Timer 1 (el cual puede usarse como ya se explicé con sus posibles divisores de 1/1, 1/2, 1/4, 18), ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 4an0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Configuraciones: ‘+ Se debe configurar el CCP1 como entrada a través del registro TRISB + El Timer debe estar en modo temporizador 0 modo contador sincronizado + Al cambiar el modo de captura hay que tener inhabilitadas las interrupciones y borrar el flag para evitar interrupciones espureas. + Siel pin RB3/CCP1 es configurado como salida, se deberé tener en cuenta que una escritura al puerto B puede causar una condicién de captura: Titulo: Re: Mis primeros programas. PICL6F84A y PIC1GF628A Publicado por: Suky en 31 de Marzo de 2009, 18:22:51 Ejemplo: Para ejemplificar el uso del modulo CCP en modo captura vamos 2 realizar la medida del periodo de una onda cuadrada para asi determinar su frecuencia. La forma de trabajar va a ser a siguiente Configuramos CCP modo captura con cada transicién de subida del pin RB3/CCP1 con Timer1 modo temporizador 1/1 Al llegar un flanco ascendente, reseteamos Timer y esperamos al siguiente flanco ascendente, en el cual se guarda el valor capturado y lo enviamos a la PC para poder determinar la frecuencia de la sefial. Lo que hemos capturado es la cantidad de ciclos de relo} transcurridos en un ciclo de la sefial a medir. Con este valor y el Tose al cual trabaja el microcontrolador podemos determinar el periodo de la sefial CCPRI Periodols] = | Soynmz Frecuencia[lt”] = 55> ‘eriodo Con un cristal de 20 MHz podemos medir desde aprox. 77Hz hasta los SOOkH2, claro que a mas frecuencia més error en las mediciones. Por ejemplo, con algunos ensayos que he realizado a ikHz se tlene un error de +-1Hz, 10kHz +-5Hz, 1OOkHz +- 0.5kHz, 200kHz +- 2kH2z, ete. Para determinar la frecuencia adjunto un programita hecho en Visual Basic que toma 10 valores enviados desde el microcontrolador, calcula un promedio del periodo y determina la frecuencia. Se hace de este modo para reducir el error cometido a altas frecuencias. (http://img10.imageshack.us/img10/347/frecuencimetro jpg) Hardware necesario: (http://img16.imageshack.us/img16/5455/hardrs232ccp-png) éeiga: ASM 2, List p16 F628 5 List directive to de 3. f definitions a CONFIG _CP_OFF & MOT_OFF & _BODEN_OW & _PURTE_ON & _HS_OSC & _DATA_CP_OFF & _LVP_OFF | | | #include ; processor specific variab| | | ew eae: ew ext enviar por R5232 s. | Contadort eau oxa2 10. | Contador2 eau ox23 u.|; tones para et ensambLador **** x. | 33. | :9¥9" befinicion de macros *** 45. |Putreg macro Registro 16. | sovfw Registro wv. | call 85232_Enviapato 18. | ends ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 santos 71272020 as. | 20. 21. 22. 23. | 24. | 25. | 26. 2. 28. | 28. | 38. | a. | 22. | 33. | 34 35. 36. | 37. | 38. | 2. 4. a. a2 a a 4s. 46. a. a 2. | se. | si. | 2. 33. 5a. 55. 56. 3? 1. | 76. | 7. | n. ., 30. | a1. | wiv odopie.com arlforosindex.php?PHPSESSI Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A LLL ptt" Inicio del Micro *** Reset. org goto x08 Inicio 5 18°" Prograna Principal **** 5 Aqui comienza el micro.- 3 Salto a inicio de mi programa. org 2x05 Inicio bse STATUS,RP@——; Banco 1 noviw b'90e1018" —; RBI entrada, R62 salida, RO3 entrada, rovif —TRISE novln 0x04) nova TXSTA 5 Configura modo asincrono, baud rate de alta velocidad rovlw xa 5 Configura velocidad a 9680 boudtes con cristal de 20 Mhz owt SPORG bsf —TXSTA,TXEN, —_;-HabiLito transmision bet STATUS,RP®—; Banco 0, bst RCSTA,SPEN ; HlabiLitacton puerto serie ovlw '90080081' _; Se seLecciona TMRI, preescaler de 1/1, modo tenportzador.- ov —TACON novlw b'99080101' —; Se configura CCP modo capture cada Flonco de subida. nowt ¢CPICON bucle bet PIRL,CCPLIF —_; Borranos bandera btfss PIRL,CCPIIF ; Testeanos bandera. goto $1 } Si no se active seguimes esperando bet PIRL,CCPLIF —_; Se activo, La borranos.- cart TwRaH 5 Sorranos Timert.- ear TaRAL : btfss PIRL,CCPIIF —; Voluenos a testear bandera.- goto $1 j No se active, seguinos esperando.- rovfw CCPRIL 5 Copianos el volor capturado. owt sb rovfw CCPRIH nowt sb Putreg. sb 3 Envianos Lo guardado en el registro Msb. Putreg. Lsb 1} Envianos Lo guardado en el registro Lsb. e211 bexora_3ons goto aucle j sate? Rutinas 9° i1#0* se envia Dato *#** s232_Enviabato bet STATUS,RP@ 5 Banco t btfss TASTA,TAMT ; chequea si esta Listo goto $-1 3 Esperamos a que se desocupe. bet STATUS, RPE; Banco O ovat TAREG 5 envia Dato.- return Denora_30ms novlw OXF row Contadora Repeticiont rovlw @xC3 ov Contador? Repeticion2 decfsz contador?,1 goto Repeticion2 pvidhghqeu2reggbqkOSlgd004&acton=prinipagetopic=24720.0, 4} Inictonos contadora. - } Inictamos contador? 5 Decrenenta Contador? y si es @ sale.- 3 Si no es 0 repetimos ciclo. sut0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, 22. | dects2 Contadort,1 4 Decrenenta Contador a3. | goto Repeticiont 5 Sino e at. | return a5. |; as. | end Titulo: Re: Mis primeros programas. PIC16F84A y PIC16F628A Publicado por: Suky en 31 de Marzo de 2009, 18:27:05 EI Modo Comparador En el modo de comparacién el registro de 16 bits CCPR1 (CCPR1H:CCPRIL) se compara constantemente con el valor del registro de 16 bits TMR2. De manera que cuando sus valores coinciden ademas de activarse la bandera para solicitar interrupcién CCP1IF (PIR1<2>), puede ocurrir en la patita RB3/CCPI (previa configuracién) alguna de las siguientes acciones: + RB3/CCPI Se pone en alto + RB3/CCPI Se pone en Bajo + RB3/CCP1 no cambia La accién que ocurra en esta patita se configura mediante los bits de control CCP1M3:CCP1MO (CCPLCON<3:0>). En la figura siguiente se muestra un diagrama de bloques en donde se ilustra la manera en que trabaja el médulo CCP en modo comparador (http://img15.imageshack.us/imgi5/6833/ccp6281.jp9) Configuraciones: + El pin RB3/CCP1 debe configurarse como salida limpiando el bit TRISB<3> + El Timer 1 debe estar corriendo en modo temporizador (o en modo contador sincronizado) + Allimpiar el registro CCPLCON el latch de salida de la patita RB3/CCP1 se forza a su valor “default” de cero. + En el modo “interrupcién software” no se realiza ninguna accién en el pin RB3/CCP1. + El modo "Special Event Trigger” ocurre inmediatamente al igualarse el par de registros TMRIH, TMRIL al par de registros CCPRIH, CCPRIL. El par de registros TMR1H, TMRIL no se resetean hasta el préximo flanco ascendenté del clock de Timer. Esto permite que el registro CCPR1 sea Un registro de periodo programable para el Timer Ejemplo: En este programa se hace uso del modo de comparacién para realizar la conmutacién de una sefial cada vez que transcurre un tiempo, el cual se ajusta al oprimir un pulsador de incremento 0 uno de decremento. Hardware necesario: (http://img37.imageshack.us/img17/9763/comparacionhard.png) (list) Céeigo: ASM a see 2.| ist pri61620A _; List directive to define processor 3. | include j processor specific vartable definitions 0 CONFIG _CPOFF & MOT_OFF & BODEN_ON & _PURTE_ON & _HSOSC & OATA.C?_OFF & _LVP_OFF 4 _wcuneow 5. | 5. | incre equ 1} Putsador para increnentor periods 2. | 10. | n.| a2. | a. | ore x00 5 Aqut comtenza el micro ae. | goto Inicio 9 9 inicio de mi programa. as. | ww odopie.com arlfrosindex php?PHPSESSID=pvi9hgkqoureggbqk0Blgd0048acton=prinipage:topic=24720.0, 2105 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A a6. |; +5 Programa Principal **** v.| ore exes 48. | Inicio 1. | sovlw 6x07 4 Para deshabilitar comperadores enatogicos.~ 2. | ove CACON 2. | bse STATUS,RP@ + Banco 1 22. | bef TRISA deere; Como entrada. 23. | bse TRISA, incre; Cono entredo 24. | bet TR1S8,3 4 RBB como Salida 2s. bef STATUS,RP@——;- Banco @.~ 27, | rovuf TICON 22. | sovlw 6xt0 3 Inicta pertodo de conparacton a mitad de rango. 2. | owt CCPRIH 22. | sovlw 6x00 a1. | sow CCPRIL 2 ovlw p'89901080' _; Se configura CCP modo comparacion, setea salide con ov CCPACON arf TaRIH 3 Conenzanos generacton de sefal.~ arf TwRIL bucle bet PIRL,CCPLIF _; Gorranos bandera btfss PIRL,CCPIIF —; Testeanos bandera. goto $1 3 Sino se activo seguinos esperando - bet PIRL,CCPLIE —j Se activo, La borranos novlw '90080001' |; Invertimes uLtino bit, para pasar de setear a resetear.. xorwf €CPICON,1 3 0 viceversa, : cirf —TARIH 5 Reseteanos cuenta Ti eirf TaRAL : btfsc PORTA,decre —_; Testea pulsador pare decrementar periodo.~ call becrerenta btfse PORTA,incre ; Testea pulsador para incrementar pertodo. call Increrenta goto aucle : sane pubins oe Decrenenta . ect CCPRIL,1 5 Decrementa parte baja.~ conf CCPRIL,W 5 Carga el negado a W, si CCPRIL-@xFF -> W-Ox00.- btfss STATUS, SI N@x0@ decrementaros parte alta. decf —ccPRIH,1 Decrenenta parte alta retura Increnenta : incf —CCPRIL,1 5 Incrementa parte bajo. btfss STATUS,Z 5 cepRaL-0x00? retura 3 No. incf —CCPRIH,1 5 Si, incrementa parte alta return end ‘Titulo: Re: Mis primeros programas. PIC16F84A y PIC16F628A Publicado por: Suky en 31 de Marzo de 2009, 18:32:44 Modo PWM (Modulacién de Ancho de Pulso). Con este moda de trabajo se consiguen impulsos légicos cuya anchura del nivel alto es de duracién variable, que son de enorme aplicacién en el control de dispositives tan populares como los motores y wv odopie.com atlforosindex.php?PHPSESSI pvidhghqeu2reggbgkOSlgd004&acton=prinipagetopic=24720.0 sas 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, triacs. El pin RB3/CCP1 esta configurado como salida y cambia entre los niveles 0 y 1 a intervalos de tiempos variables, logrando un pulso cuyo nivel alto tiene un ancho variable dentro del intervalo del periodo de trabajo: (http://img23.imageshack.us/img23/5449/ccp6283 jpg) La base de tiempos es el Timer2 mas dos bits adicionales para tener los 10. El periodo se determina con el registro PR2, ya que cuando TMR2=PR2 + Se borra el TMR2 + Se pone a1” el pin CCPi + Se pasa el valor del CCPRIL al CCPRIH (para evitar glitch) (http://img14.imageshack.us/img14/9973/ccp6282.jp9) De esta manera, de acuerdo a la figura anterior, el siguiente valor de comparacién para TMR2 en el comparador de 10 bits es el Ciclo de Trabajo, el cual al alcanzarse limpiard la patita CCP1. El ciclo de trabajo se determina con el contenido del CCPRIL y los dos bits de CCP1CON (CCPLX y ccPly). Periodo del PWM PeriodoPWM = (PR2 + 1) - 4+ Tose - TMR2Preescaler 1 FrecuenciaPW™ — FrecuenclaPWM = 5 SdoP WA Ciclo de Trabajo del PWM El ciclo de Trabajo se especifica escribiendo un valor de 10 bits al registro CCPRAL (los & bits mas, significativos (msb)) y los dos bits menos significativos (Isb) a CCP1CON<5:4>, CTPWM (CCPRIL ; CCPICON < 5: 4 >) « Tose - TMR2Preescaler Como se puede ver en la figura anterior, el valor que determina la duracién de C.7. del PWM no es el cargado en CCPRiL, sino en CCPRIH, el cual sélo se actualiza en el momento en que TMR2 alcanza el valor de PR2 (es decir, cada vez que Se completa un periodo). Por ello, aunque CCPRIL puede ser escrito en cualquier momento, el Ciclo de Trabajo solo se actualiza hasta que termina el periodo que estd en transcurso. No hay otra manera de escribir al registro CCPRIH, ya que este es un registro de sélo lectura. El nimero de divisiones que se pueden tener en un Ciclo de Trabajo seré 5h fonde n es el numero de bits usados, por lo tanto su duracién maxima sera: TPWM = 2" - Tose « TMR2Preescaler Sin embargo, dependiendo cel valor de Ciclo de trabajo maximo (CT_PWM) deseado, no ser posible realizar las 5 divisiones y por lo tanto no se podrén usar los n bits de resolucién, 0 al revés, si se elige una resolucién deseada n no ser posible tener cualquier Ciclo de Trabajo maximo (CT_PWM) Deseado. De la ecuacién anterior se puede despejar cual es la resolucién maxima: ie ie ResolucionPWM = selnenitieesa) Veamos con un ejemplo, si fijamos PR2 en 100 y usamos preescaler 1/4 con un oscilador de 20 MHz, tendremos un PWM de periodo 80.8us. E! ciclo de trabajo no puede superar este valor por lo que despejando de las ecuaciones anteriores, CCPRIL:CCPICON<5:4> no puede ser mayor a 404, Aqui se ve claramente que no se pueden usar los 10 bits de resolucién, sino "8,66" bits. Caso contario el pin RB3/CCP1 nunca serd reseteado, En la siguiente tabla se resumen diversas elecciones de resolucién n y la correspondiente frecuencia F_PWM maxima, asi como el valor de PR2 con el que se logra (para un frecuencia del cristal de 20 Mhz). (http://img11.imageshack.us/img11/2681/ccp6284.jpg) _ ww todopic.com arlfrosindex php?PHPSESSID=pvidngkqoureggbqk0Bigd004Aacton=prinipage:topic=24720.0 405 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Secuencia de configuracién del PWM ‘A continuacién se resumen los pasos para realizar la configuracién inicial del PWM + Establecer el periodo del PWM escribiendo al registro PR2. + Establecer el Ciclo de Trabajo del PWM escribiendo al registro CCPRIL y a los bits CCPICON, + Configurar como salida el pin CCP1, limpiando el bit TRISB<3> + Configurar el preescalador del Timer 2 y habilitar el Timer 2, escribiendo al registro T2CON. + Configurar el médulo CCP1 para operacién PWM, Poniendo en alto los bits CCPLCON <2:3>. Titulo: Re: Mis primeros programas. PICL6F84A y PIC1GF628A Publicado por: Suky en 31 de Marzo de 2009, 18:34:33 Ejemplo: Como ejemplo generaremos dos frecuencias distintas seleccionables mediante la accién de un pulsador conectador a RBO. Una de las sefiales serd de S0OH2 y la otra de 2kHz, con ciclo de trabajo de 50%. Con oscilador de 4MHz y preescaler 1/16 tendremos: Sefial de S00Hz PR2: Sefial de 2kH2 PR2: 24 (0x7C) CCPRILA2bIt: 0 (Ox1E) CCPRILE2bIt X3E & 2bits: XOF & 2bits: -250(OxFA) CCPR1I 62 (0x3E) CCPRII Hardware necesario: (http://imgi7.imageshack.us/img17/9135/pwm.png) Beige: ASM 2. | 5 #*** Encabezado **** 2 | list prisf620d ; List directive to define processor 3. | Binclude ; processor specific variable definitions “| CONFIG _CP_OFF & _WOT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATALCOTOFF & _LVP_OFF & _PCLRE_ON 5. 7.| Flags eau @22; Registro para guardar banderas 3. | . Selec equ ° 3 BIE para indicar seleccton(Selec=1->500H?; Setecad->2eH2) ae. iciones para el ensambladar **+* u. | define Signal Flags, Selec 22.) 23. | 38, | IIIT 45, | ;2*" Inicio det micro * 16, | Rese v7. | ore ex00 5 Aqui comtenza el micro. 18. | goto Inicio Solto a inicto de mt prograne. 21. | ore exes 24. | bst TR1S8,0 3 Como Entrade 2s. | bet R1S8,3 5 RB3 como Salida. 26. | bet STATUS,RPE —; Banco 6. 27. | noviw p'099e0110" ; Se selecciona TMR2, preescaler de 1/16. 28. | rownf T2CON 2.) bst STATUS,AP@ 5 Banco 1 30. | rovin ex7C 4 Inicte pertiogo de Sees. a1. | row —PR2 x2. | bef STATUS,RP® —; Banco @.~ 33. | bst signal _ ww todopie.com arlfrosindex php?PHPSESSID=pvi9hgkqou2regabqk0Bigd0048acton=prinipage:topic=24720.0, sos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A 38. | novlw x3 3 Cielo de trabajo Sox 35. | owt ccPRIL 36. | bef ‘cepacon, ccPax 37. | bet ‘ccPacoN, CcPILY 38. | bef CePaCON,cCPLNS ; Configure modulo CCP modo Put 28. | bse ‘ceracon, ccPuse 40. | Bucte a. | befss PORTE, 5 Testea si se quiere conbior de Frecuencio. a2. | goto $1 3 No se quiere conbian. 43. | befss signa 5A cual conbiar? aa. | goto Carbiarseetz 45. | Conbiaraiaia 4s. | bef STATUS,RP@ 5 Banco 1 a.) sovlw OxtE as. | ssowt RZ a. | bef STATUS,RP® 5 Banco 0 se. | bet signal 5 Seal. de 2kiz su. | sovlw 6x0 3 Ciclo de trabojo 50x 2. | owt CCPRIL 53. | goto Bucle se. | 55. | Canblarseoie ss. | bst STATUS,RP@ ——; Banco 1 37. | novlw 0x76 } Inieta periodo de 500k. 58. | owt PR? 4 Sefial de 560 hz 0. | bef STATUS,RP@——; Banco 8. oe. | bse Signal a1. | sovlw se 5 Ciclo de trabajo sex 62. | ove CCPRIL «3. | goto sucle 68 eee 5. | end Titulo: Re: Mis primeros programas. PICL6F84A y PIC16F628A Publicado por: Suky en 34 de Marzo de 2009, 18:37:34 Otro ejemplo: En este se fija la frecuencia de PWM en 2 kHz y se varia el ciclo de trabajo con 2 pulsadores de control conectados a RBO y RBI. Solo se modifica en byte alto cel CT, dsea el registro CCPRAL con lo que CT se varia de 4 en 4. Hardware necesario: (http://img9.imageshack.us/img9/2410/pwm2.png) Céaigo: ASM 1. | 5 #9 encabezado *** 2 list pe16f6284 =; List directive to define processor “| CONFIG _CP OFF & _WOT_OFF & BODEN _ON & _PRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATALCOTBFF & _LVP_DFF & _PCLRE_ON 5. | 6. | :*#* pefinicton de voriables **** 7 | Contador? eau eve: 8. | Contador2 eau ear; 2. | 10. | decre eau @ 5 Pulsador para decrenentar Cielo de Trabajo a. | incre eau 15 Pulsador para tnerenenter Ciclo de Trabajo 22. 23. | 44. | IIL a5. |:***" Inicio det micro **** wv odopie.com atlforosindex.php?PHPSESSI pvidhghqeu2reggbgkOSlgd004&acton=prinipagetopic=24720.0 se0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A 46. | Reset. v.| ore x00 5 Aqut comienza et micro. ae. | goto Inicio 5 Salto a inicio de mi prograna. as. | 20, | 45° Prograna Principal **** 21. | ore 0x05 22. | Inicio 23. | bse STATUS, Re; Banco 1 24. | bse TRISB, incre Cono Entrada. 2s. | bst TRISB,decre Como Entrasio.- 26. | bet TaIs8,3 3 R83 como Salida. 2. | bet STATUS,RP@ ——; Banco @.~ 22. | movlw b'e09¢6118" —; Se seLecciona TNR2, preescaler de 3/16. 23. | ssovwt T2cON se. | bse STATUS,RP@ 5 Banco 1 at. | novlw @xtE 5 Seal de 2hie 32. | owt °R2 a. | bef STATUS,RP@ 5 Banco @ 38. | eine ccPRIL 3 Cele de trabajo 0% 35. | bef ‘cepacon, ccPax 36. | bef ‘cepacon, ccPiy 37. | bse CEPACON,CCPLIB_; Configure modulo CCP modo PH. 38. | bst ‘ccpacon, ccPame 39. | bucle ae. | befse PORTB,decre Testa si se quiere reducin Cr.~ a. | goto Decresenta a2. | befse PORTB, incre; Testea si se quiere aumentar CT.~ a3. | goto Incresenta aa. | goto Bucle 45. | increnenta as. | inc CCPRAL,2 a7. call Desora_ Sons as. | goto Bucle 49. | Decrenenta se. | dec CCPRIL,A si. | call Derora_ sens 2. | goto aucle 53. | sa. | ss. | mora = 56. | 37. | ore i se. | Contador 1 Inictonos contadort.~ 59. | Repeticiont 2. | novlw 6x40 5 1. | owt Contador? } Inictonos contador? 62. | Repeticion2 3. | decfs2 Contador2,2 + Decrenenta Contador2 y si es @ sole.- ee. | goto Repeticion2 5 St no es @ repetinos ciclo. os. | decfsz Contadort,2 + Decrenenta Contedort os. | goto Repeticiont St no es cero repetinos ciclo. 67. | return 5 Regreso de Lo subrutina.- a. | ve 69. | end Titulo: Re: Mis primeros programas. PIC1GF84A y PIC1GF628A Publicado por: WillyP en 31 de Marzo de 2009, 19:02:30 Excelente Suky, vaya que te has tomado trabajo y dedicacién con este aporte. :) Te felicito wv odopie.com atlforosindex.php?PHPSESSI pvidhghqeu2reggbgkOSlgd004&acton=prinipagetopic=24720.0 srnos 7272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A548A, Titulo: Re: Mis primeros programas. PIC16F84A y PIC16F628A Publicado por: Suky en 31 de Marzo de 2009, 19:03:05 Mas info: + Generacién Automatica del cédigo de configuracién, PICIGF84A/PICL6F628A/PICLGFE4BA (http://www.todopic.com.ar/foros/index.php? topic=25660.0) + Mas ejemplos en Asembler para PICISF84A (http://ww.todopic.com.ar/foros/index.php? topic=12345.0) + Comunicacién con Teclado PS/2 en asm (http://www.todopic.com.ar/foros/index.php? topic=24517.0) + Médulo de conversién Analégico/Digital (http://waw.tedopic.com.ar/foros/index.php? topic=27929.0) + Rutinas Bus I2C (nttp://www.todopic.com.ar/foros/index.php?topic=24307.0) + Rutinas para compartir (http://mww todopic.com.ar/foros/index. php? topic=23812.msg191686#msg191686) + Pequefios proyectos (http://wmw.todopic.com.ar/foros/index. php?topic=24397.0) + Base de tiempo de 1 seg. muy exacta (htto://www.todopic.com.ar/foros/index.php? topic=24381.0) Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: marvicdigital en 11 de Abril de 2009, 02:27:09 ‘Suky..muchas gracias por tu valioso aporte a la comunidad, estoy mur agradecido contigo...de verdad {ue si pudiera te envitaba a un buen par de cervezas..como se nota que trabajes para ensefiar..trabajas mas que le registro W_:mrgreen: Saludos y de nuevo mil gracias, Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 11 de Abril de 2009, 2: car [ce verdad que sl pura te envtaba a un buen par de converas Venga, venga! :D :D :D Saludos!!! Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: gasparin en 13 de Abril de 2009, 00:30:11 ‘Suky te has mandado con este excelente y completo tutorial Mi reconocimiento a gran esfuerzo de tu parte Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: gegiron en 18 de Abril de 2009, 22:56:56 ‘Suki, y demas participantes del foro, muchas gracias por este tutorial; para mi que estoy empezando es una buena forma de ser guiado paso a paso. Les animo a que sigan compartiendo la Informacién y los conocimientos, que ya nos llegaré el momento, 2 los que somos nuevos, de compartir y ensefiar. Guido. ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: kaneda en 30 de Abril de 2009, 19:05:55 Muy buena info sobre los perifericos del PICL6F628A... queria saber si tienes idea de cuanto es el valor maximo de tension que soportan las entradas analogicas del pic para usarlo como comparador. supongo que es vdd pero no estoy segura. muchas gracias Titulo: Re: Mis primeros programas en ASM. PIC1GF84A y PIC16F628A/648A Publicado por: Suky en 30 de Abril de 2009, 19:58:26 Muy buena ino sobre ls perfricos dol PICIGF629A.. quata saber sl eves dea de cua es al valor maxima de tension ave Isoportan las entradas analleas del pic para usarlo como comparador. Supengo que es Vad pero a estoy Segura, Muchas QY3C3s Si exactamente, entre Vss y Vdd. Fijate en el datasheet del micro que internamente tiene 2 diodos en serie que limitan la tensién de entrada entre -0.3V y 5.3V... Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F628A/648A Publicado por: acervantes en 09 de Mayo de 2009, 14:01:59 Muy buen aporte para personas como yo que estan empezando en esto de los PICs, gracias por tu aporte. Solo que tengo la siguiente duda, Encontre el siguiente programador PIC JDM, creen que funcione para un 16F628A? o hay que modificar algo para que funcione bien? (http://ima1 1 imageshack.usyimg1 1/3193/diagramajdm.ipg) Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 09 de Mayo de 2009, 16:42:55 Al principio de! hilo, donde esta el indice, deje un comprimido con un JOM mas general. Te conviene armarte ese ya que tiene casi los mismos componentes y vas a poder grabar mayor variedad de micros (Para el futuro). :wink: Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: acervantes en 10 de Mayo de 2009, 03:41:02 fx principio det hio, donde esta eile, deje un comprmido con un JDM mda general Te convene acmarte aa ye Que Wane Gaal oe nismas earponeniesy vas a poder grabar mayor varied de Mizos (Para el fluro). nk Gracias por responder. En efecto armare el programador que tu tienes ya que lo tienes probado para un 16F628A-1/P, tra duda: éCrees que funcione de igual forma si le pongo el sustituto de los Transistores? Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: Suky en 10 de Mayo de 2009, 03:59:59 ‘A que sustituto te refieres? Igual no creo que haya problemas. Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: Suky en 17 de Mayo de 2009, 01:24:21, Control de Displays con 7418164 ‘Aqui realizo un nuevo ejemplo de manejo de varios displays de 7 segmentos. En este caso realizaremos el control de 3 displays con la ayuda del registro de desplazamiento 74LS164, Las ventajas que conlleva el uso de este CI es que no necesitaremos multiplexar la sefial enviada a los displays, algo que limita mucho al microcontrolador, ya que debe refrescarlos continuamente. Y la desventaja es que ww todopie.com arlfrosindex php?PHPSESSID=pvi9ngkqeu2reggbqk0Bigd004Aacton=prinipage:topic=24720.0 santos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A necesitaremos un 74LS164 por cada display. Hardware: (los pines 7 y 14 del 74LS164 van a GND y SY, y se debe agregar una resistencia a cada linea que une el 7418164 con el display) (http: //img206.imageshack.us/img206/451/74Is164displays.th.png) (ttp://img206.imageshack. us/my-php?image=741s164displays.png) Con este circuito se pueden manejar 3 displays + los 3 puntos. El primer bit que ingresa serd empujado por los demas. Ejemplo para enviar 12.7: (http://img526 imageshack. us/img526/1757/001hvs jpg) Céaigo: ASM a. [5 1% encabezado **** 2, | List petorsea 3. | #include PI6FBAA, ine 4. |_CowrrG _¢>_OFF & _WoT_OFF & _pWRTE ON & _xT_oSC 5, | Fee" eftnicion de variables **** 6. | displays equ @x8C j Valor que luego de convertido se enviara al Display 1 7. | bisptay2 equ exe; Valor que Luego de convertido se enviara al Display 2 8, | displays equ @x@E 5 Vator que luego de convertido se enviara ol Display 3 9. |oatatnviar equ @xOF —; ato convertido a codigo 7 Segnentos a enviar 10. | contaits eau @xt2 _; Para controtar el envio de bits a. | 12. | bese ew ° 4 Defininos Pulsador descendente. - 13, ase eau 1 3 Defininos Pulsador ascendente. 44. | clock ew ° 5 Pin retoj del 7415164 415. | Boats eq 1 5 Pin data det 7415164 16. | preset eau 2 Pin Reset del 7415164 17. | Pro eau e 45 Bit punto, Con este indicamos si se muestra punto. 18. | 4p, | Resett ore exe 45 Aqui comtenzo el micro.~ 20. | goto Inicio 5 Salto 9 inicio de mi prograna.- 21. 22, | *#** rablo de conversion 8CD a 7 Segnentos *#** 23. |; Se coloca al intcto pura asegurar ubtcacton en Pagin 24. | ore 2x05 } Origen del cddigo de table. 25. | sco7ses: J retlw b'abcdefg@' para display catoda addwf PCL, Se tnerenente et contador det prograna DT @xFC , @X62, @XOA, OxF2, O66, OxBG, OXBE, EXER, OXFE, OxFS 38" programa principal **** +9 configuracion de puertas **** nicto bst STATUS,RP®___; Pasamos de Sonco 8 a Banco 1. oviw °11111000" _; R87 como entrada y Los denas como salida. rovef TRISE bet STATUS,RP2 Paso del Ronco 1 al Banco | | | | | | | | | | clef pisplays | clef Display? | clef Displays | | | | | | | | I - bst PORTS, Reset; HabiLitanos 741 S164. bet PORTE, Boat bst PORTB, Clack; Seteamos Clock. 41, 2 goto Actualizovisplays a3. 44, | j240* Testeo de Pulsador “*** 45, | Testeo 48. btfss PORTA,Desc —;Testeanos si esta 0 1 Logico, a7, goto Descender 2 No 8. beéss PORTA, ASC J Testeanos st esta a 1 logico.- pvidhghqeu2reggbgkOSlgd004&acton=prinipagetopic=24720.0 ean0s 71272020 as. | goto se. | oto su 32. sa. | Sa. | ;204* putings s+ 55. | Descender 56 betes 57. ‘oto se. | deck 9. | revi oe. | subet o. | betes 2. | goto 63. | rovin a nov 65. ect 6. | sovln o7. | subet os. | bees 6. goto 7. rovlw n.| nove 22. | ect 2. | roviw 7. | subset 75. | bess 7. | goto 7. sovin ns. sown 2. | soto 88. eee a1. | Ascender 82. betes 83. oto se. | snc as. | rovlw 26. | subet a7. | betes 88. | goto 29. | clef 9. snef s1. roviw 92. | subset 93. | befss a. | soto 9. clef 56. snc 97. | novln se. | subset 8. | bees 100. | goto ae. | clef 102. | oto 303. |; vote eteteeeneees 04. | Actual izooisplays aes. | sovtw 106. | call 167 count 08. cal 109. rovta ue call wv odie. com atlforosindex.php?PHPSESSIE Ascender Testeo : PorTA,vese —; sa Displayt.2 41255" 3 Displayt.e@ status, 2 : Actual izoDssplays. as Display : Display2,2 255" : Display2.e@ STATUS, 2 : ActualizoDisplays a3 Dispiay2 : Display3.2 4255" : Display3,0 STATUS, Actualizopispiays as Displays : Actualizobisplays PorTA, Ase : sa Displayt.2 are" 3 Displayt.e@ STATUS, 2 : Actual izoDssplays. Displays : Display2.2 are" : Display2,o STATUS,Z $ Actualizopisplays Display2 Displays... a8" : Display3,0 sraTus,7 ActualizoDisplays Displays Actualizopisplays Displays aco7se6 Datatnviar Enviagato Display2 Bco7se6 pvighghqeu2regabgkO8lgd004&acton=prinipagetopic=24720.0 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A } Esperanos hasta que se suelte. becrenenta Display2 Si paso de @ @ 255. decrenento Display? 5 no es 255 St, cargo 9, Decrenento Display2. Si paso de 9 a 255. decrenento display3 No es 10 Si, cargo 9.- Decrenento Displays. Si paso de 0 a 255. St, cargo 9.- 3 Esperanos hasta que se suelte. Increneto Display2 Si es 10 reseteo e increnento Display2 5 no es 18 Increnento Display2.. Si Decena = 10, reseteo e incremento Displays St, reseteo, Increnento Display3. 5 No es 16. 3 St, reseto 5 Convertimos BCD 9 codigo 7 Segnentos } Carganos dato a enviar devuelto x 45 Convertinos BCD a codigo 7 Segnentos.- eutos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, | covet Datakaviar + Corgones dato @ enviar devuelto x acorses.- a2. | bst Datatnviar,Pto 5 A ejemplo unto @ enviar. - 13. | call Enviadate aa. | sovfu Displays us. | call sco7Se6 Convertinos ACO 0 codigo 7 Segnentos.- 20. | sovwf DataEnviar } Corgones dato « envior devuelto x corse. - a7. | call Envianato us. | goto Testeo us. | envia Doto @ tos registros de desplazomiento **** 120. | - - - aa. | 2, luego se va rotando a La derecha y se envion Los bits de mayor peso. 124, | sovly 08 3 Nnero de bits « tronsmitir 125. | rovwf ContBits 126, | enviasit } Comienza @ envier datos a7. | Dataknviar,@ gs un “I” el bit 0 transmivir? 128. | onTe, noses 3 No, pues envia un “6 129. | DataEnviar,@; c&s un “I” el bit o transmivir? a2, | 133. | PoRTa, clock 5 Clock-3.~ 134. | Dataénviar,1 —; Rota pura envia stgutente 13s. | contaits, 1 3 Comprueba st es et dttino bt 136. Enviasit No es el iltino bit repice 137. | return } Retornanos Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: ing_alqa en 20 de Mayo de 2009, 18:51:13 Gracias, muchas gracias. Literaimente aplaudi al finalizar de leer las primeras aplicaciones con el PICI6F84A, Saludos desde Colombia. A propésito, sabes donde puedo encontrar informacién para iniciarme en las comunicaciones PIC-Ethernet? Gracias de nuevo. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Suky en 20 de Mayo de 2009, 18:56:49, En este mismo foro hay mucha informacién, mira aqui (htto://www.google.com.ar/search? dlient=firefox-a&rls=org.mozilla%3Aes- AR%3Aofficial&channel=s&hI=es&q=site%3Awww.todopic,com.ar%2Fforos%2F+-printpage+- bookmark +Ethernet&meta=&btnG=Buscar++con+Google). Saludos! Titulo: Re: Mis primeros programas. PIC16F84A y PIC1GF628A Publicado por: acervantes en 21 de Mayo de 2009, 10:56:54 (Gka.de: Suby on 31 da Marzo do 2009, 18:37:34 fotro ejempio: Jem este se isl frecuencia de PWM en 2 kHz vse varia el ilo de trabajo can 2 pulsdores de control conectados 8 RBO y RBA, Solo [se moatnea en byte alto del Ci, é5ea al repsiro CCPRIL con lo que CT se varia ce 4 en herdware necessr: (hto:/imgs.imageshack us/img9/2410/pwm2.png) fcéaica: asm ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 e205 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICI6FS4A y PICTBFE2BAI648A ae. | SINLUILLUNLUILUOILUTLULLLL PS ovine 58, negetictont a. rovlw ox 62, Repetictonz wv todopie.com arlforosindex.php?PHPSESSI 2 ist prl6¢G2ak List 6irective to define processor 2 MInelude ———-pueFEaas.tne> ; processor specific variable deftnitions x Contadort equ one; 8 coneador? equ oat 8. éecre equ © 5 Pulsador paro decrenentor Ciclo de Trobajo 2, one exwe ‘gut cartense ek were 18 goto Inicio 4 Salto o inicio de mt programe 2 bse SstaTus,A°@ —; Sonco 2 2 bf shise, incre; Cone frtrode 2 fovim 'eeoseite* —; Se selecctona TH2, preescaler de 1/16.~ a, vovlw one 1 Sef 2h a cine ccrme 4 Ciclo de trabajo 0& 36 bee cenicoy,coo1Y », bet cePIcoN, crim; Configure nodule CCP modo Pt 38. bucle 4 oto Decrenenta 2. befse PORTB,snene > Toston si s0 gene cuenta 2. goto Inerenenta 46 goto sucle a” a0] senora sons sa cept 2 fuels pvidhghqeu2reggbqkOSlgd004&acton=prinipagetopic=24720.0 eas 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, En este ejemplo éle frecuencia que estas utilizando es de 4Mhz, lo que es lo del osciledor interno.? Tengo una pregunta: éPuedes cambiar la frecuencia de oscilacion a 48khz? ; processor specific vartable definitions 4. | CONFIG _CP_OFF & _WOT_OFF & _SODEN_ON & _PHRTE_ON & _INTOSC_OSC_NOCLKOUT & _OATA.CP_OFF & Tive_orF © _#ciRe_oW 5.5 6. | Contador equ 6x20 ; co) 7. | wTemp equ 0x21 ; fe: 8 8. ador para detectar 4 desbordes de THRE. stro para gu STATUS_Teap equ 0x22 ; Registre para quardar Cemporalm« 20, |Led equ © ; Defin ono el bit cero de un registro, en es tra cosa que debes tener en cuenta cuando migras un cédigo del PICL6F84 al PIC6F628 es la configuracién de los comparadores analégicos, para utllizer los pines RAO-RA3 como 1/0 digitales debes colocar: Céeig: ASM a. | movin @x07 2 frowirt CHCON Mientras se este en el banco 0. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: hellser en 18 de Junio de 2009, 23:52:45 ah gracias Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: OTSELECTRONICSEIRL en 28 de Junio de 2009, 20:50:31 Hola. Deseo saber si esta afirmacion que expusiste es correcta: Reset-El PIC 16F84A posee un temporizador interno conectado al pin de reset, que funciona cuando se da alimentacién al microcontrolador. Esto hace que al encencer el sistema el microcontrolador quede en reset por un tiempo mientras se estabilizan todas las seftales del circuito. Gracias. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PICL6F628A/648A Publicado por: OTSELECTRONICSEIRL en 28 de Junio de 2009, 22:12:40 Fe de Erratas: Dice: Memoria de programa: 2048 locaciones de 14 bits Debe decir Memoria de programa: 1024 locaciones de 14 bits Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F628A/648A Publicado por: Suky en 28 de Junio de 2009, 22:39:29 (ka de: OTSELECTRONICSEIRL en 28 de Junio de 2009,20:50:23 Deseo saber siesta afrmacion que expusist os correcta pvighgkqeu2reggbgkO8lgd0048acton=printpagertopie=24720.0 esis wv odopie.com atlforosindex.php?PHPSESSI 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Reset. ic 15F84A pasee un temporizador interno conectado al pin de rest, que funciona cuando s2 ca almentacén al Inicrocortrolador sta hace gue al encender el sistema el micracontraladorquede en reset por un tempo mientras se estabitzan fodas las sofoles del ercuito Es cuando se habilta el fuse Power-up Timer, este mantiene resteado el PIC durante un tiempo, y permite que se estabilice la tensién, de: OTSELECTRONICSEIRL en 28 de Juno de 2009, 22:12:40, Fe de Errata: Memoria ae programas 2048 locaciones de 14 bits bebe dec: Memon ce programa: 1024 locacones de 14 bis Error, El pic 16F628 es de 2048 words: Mirando el Datasheet: (http://img33.imageshack.us/img33/4910/caractes.jpg) primeros programas en ASM. PICLGFS4A y PIC16F628A/648A uel valdivia en 06 de Agosto de 2009, 14: Titulo: Re: Publicado por: HOLA Suky SABES QUE COMPILE EL PROGRAMA TUYO DEL EJEMPLO DE PWM CON EL MOTORCITO Y LO HICE EN PROTEUS (TENGO 7.5) Y NO HACE NADA , ME PUEDES AYUDAR PARA SABER QUE HAGO MAL SALUDOS DE CHILE :-/:+/ :-/ :D Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 06 de Agosto de 2009, 17:24:48 Por favor no escribas en maydiscula, en un foro es elevar el tono =x Después, he leido que la versién 7.5 tiene problemas para simular el PWM, puede ser eso, Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: miguel valdivia en 07 de Agosto de 2009, 10:17:48 disculpame suky porfavor por las mayusculasn , no lel las regias del foro , no fue un improperio. pero porque este proteus genera este problema, fosea que en el proto me deberia funcionar saludos primeros programas en ASM. PICLGF84A y PIC16F628A/648A 9 Titulo: Re: Publicado por: Suky en 07 de Agosto de 2009, 10: (Che de: sigue valivia en 07 de Agasto de 2009, 10:17:48 spare suk ptavor por ls maysculesn pero porque este proteus genera este problema, lasea que en el proto me deena fundonar fstodos No deberia dar problemas, en vez de colocar un motor (el cual necesita driver de potencia) prueba colacando simplemente un led y prueba como varia su luminosidad. Saludos! Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F628A/648A Publicado por: cristiandb en 25 de Agosto de 2009, 12:49:21 ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 esos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, hola! muy buen tutorial para empezar....pero tuve un problema, no me anduve el ejercicio del led tildando...nose que pasa....pero el led se queda prendido...no prende y apaga, que problema puede ser. muchas gracias! del programador 0 algo que puedo estar haciendo mal? Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F625A/645A Publicado por: Suky en 25 de Agosto de 2009, 13:15:03 ben 25 de Aoosto de 2009, 12:49:21 hot Jnuy buen tutorial para empezar...perotuve un problema. no me onde el eed de led tdando.-nose ue pose.” pere a led se queda prendido..no pends y ape Jzue orobleme puede ser...del programador alge que puede estar Raciengo mal? [muchas racist Como estas realizando las pruebas? Si es un protoboard asegurate que las conexiones estén bien fijas, Que el pin Mcir este a Vcc mediante una resistencia, que el oscilador este con sus capacitores lo mas préximo al microcontrolador, etc Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: beto1234 en 26 de Agosto de 2009, 10:14:03 COMUNICACION IR - PICL6F628 Y PIC12F629 Hola amigos PICLISTEROS, voy a explicar como hacer la comunicacién de dos PIC por medio de infrarrojo. En este ejemplo voy a codificar la sefial con el picl2#629 y lo decodificaré con el pict 6F628a, la codificacién de pulsos que puse es muy facil pero eficiente ya q no detecta otros controles IR. Al comprobar q el cédigo es el correcto hacemos titilar un led 10veces. INFORMACION DE INTERNET: http://heli.xbot.es/fd/inhtm (http://heli.xbot.es/fd/irhtm) http://r-luis.xbot.es/sensores/ir.html (http://r-luis.xbot.es/sensores/irhtml) HERRAMIENTAS QUE USE: Soft-MPLAB IDE VB.X (http://www.microchip.com/stellent/ideplg? IdcService=S$_GET_PAGE&nodeld=1406&dDocName=en019469&part=SW007002#P140_5618) MCE PDX USB 080609 (Programador y Debugger Express) (http://www.mcelectronics.com.ar/pdx/) Soft Pickit 2 Develooment (http://www.microchip.com/stellent/ideplg? IdcService=SS_GET_PAGE&nodeld=1406&dDocName=en023805) EMISOR IR. Nombre de los componentes Importantes: PIC12F629 (http://www.datasheetcatalog.org/datasheet/microchip/41190c.pd") Transitor 8C337 (http://www.datasheetcatalog.org/datasheet/fairchild/8C337.pdf) LED EMISOR L-53F3BT (http://www.datasheetcatalog.org/datasheets?/85/85702_1.pdf) (http://pet0123456789.webcindario.cam/emisor.jpg) Céeigo: [Selecionae ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 ernos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, imi Pag Pe RECEPTOR IR Componentes Importantes PICL6F628A (http://www.datasheetcatalog.org/datasheet/microchip/40044b.pdf) LED RECEPTOR(Fototransistor) ~ LS1P3C (http://www,datasheetcatalog.org/datasheets2/59/59198_1.pdf) (http://beto123456789,webcindario.com/receptor.jpg) beg: [Selecionae] ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 eas i 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, imi Pag Pe ss (nttp://beto123456789.webcindario.comy/IR.jpg) (nttp://oeto1 23456789 webcindario.com/IR2.jp9) ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos i 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, ‘Salu2 BETO ROBLEDO SANCHEZ- Estudiante de la UTN - Facultad Regional Resistencia - 1.Q Titulo: Re: Mi Publicado por: Suky en 26 de Agosto de 2009, 10: primeros programas en ASM, PICLGF&4A y PICIGF626A/648A 1 Blenvenido al foro beto1234! (http://img222.imageshack.us/img222/387 1/yb641 gif) Muy buen proyecto! Te animo que crees un nuevo tema en el subforo proyectos con PIC para presentarlo : wink: Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: beto1234 en 27 de Agosto de 2009, 01:24:13 Hola muchas gracias. A ver si puedo presentar algun proyectivo con MATLAB y un PIC, ahora pronto no creo pera mas adelante seguro. Estoy metido con el matlab en el tema de procesamiento de imagenes y de audio. Estoy tratando de darle uso mas industrial a esto... pero no tengo drama en presentarlo aqui. 2D. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Pts en 06 de Septiembre de 2009, 19:38:15 Una pregunta gente, me baje el ejemplo en proteus isis del lec titlando, mi pregunta es si desde RBO/INT puedo poner mas de un led, 0 sea que en el proteus funciona perfecto agrego mas led y titilan todos, pero quizas halla problema en la practica, recien estoy empezando agradeceria su ayuda, Titulo: Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A Publicado por: jim_17 en 06 de Septiembre de 2009, 23:32:02 Pts, colocando una resistencia, un transistor (NPN) y los leds en paralelo en el colector con su respectiva resistencia deberia funcionar. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: picnew en 19 de Octubre de 2009, 15:17:44 Buenas tardes, tratando de compllar un programa muy sencillo en MPLAB me he encontrado con este problema: Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "Carrito.asm’ /W'Carrito.\st® /e"Carrito.err® /o*Carrito.o" Warning[205] C:\DOCUMENTS AND SETTINGS\USUARIO\ESCRITORIO\CERCO KEROMUCHI\PROGRAMAS\CARRITO.ASM 1 : Found directive in column 1. (LIST) Werning[205] C:\DOCUMENTS AND SETTINGS\USUARIO\ESCRITORIO\CERCO KEROMUCHI\PROGRAMAS\CARRITO.ASM 3 : Found directive in column 1. (include) ‘Skipping link step. The project contains no linker script. BUILD FAILED: Mon Oct 19 13:38:33 2009 Lo cual no me permite simular el programa, es MPLAB 7.50, ‘Aca tambien envié el programa que descargue de un tutorial: include "P16F84.INC" CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 rans 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Resultado EQU Ox10 ;Define la posicién del resultado ‘org 0x00 Vector de Reset goto Inicio (org 0x05 Salva el vector de interrupcién Inicio moviw 0x07; Carga Ler. sumando en W addiw 0x06 Suma el 2° sumando movwf Resultado | ;Almacena el resultado nop ;Poner breakpoint de parada nop END ;Fin del programa fuente De antemano muchas gracias Titulo: Re: imeros programas en ASM. PICIGF84A y PICL6F628A/648A Publicado por: pienew en 19 de Octubre de 2009, 15:39:45 hermanos ya consegui |a respuesta disculpen mi ignorancia, me hacia falta agregarle un archivo de link correspondiente al modelo de pic a usar, caramba hace unos 10 afios utilice MPLAB pero si mal no recuerdo no habia que agregar ese archivo de link, o estoy errado? De antemano, muchas gracias nuevamente Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 19 de Octubre de 2009, 15:50:06 lo, no es necesario. En Project/Select Lenguaje Toolsuite selecciona MPASM Toolsulte y verifica que las rutas" de los archivos estén correctamente. Luego al hacer Build All si aparece una ventana preguntando absolute o reloacatable coloca absolute. Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: picnew en 19 de Octubre de 2009, 1: 8 Nuevamente yo..... espero disculpen ahora superade el primer inconveniente surge otro al tratar de simular, me Indica lo siguiente: CORE-E0002: Stack under flow error occurred from instruction at 0x00000a Agradeciendo nuevament su ayuda. Saludos Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Suky en 19 de Octubre de 2009, 19:26:53 ‘Simular donde? En el mismo MPLab,Proteus u otro? Titulo: Re: Publicado por: primeros programas en ASM. PICLGF84A y PIC16F628A/648A uel valdivia en 02 de Diciembre de 2009, 1 Hola suky , encontre un problema en tu programa de cambio de ciclo de trabajo: en el bucle de testeo del puerto b 6 y 7 se esta preguntando si esta e BTFSC , pero en tu esquematico ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 rin0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, estos pines estan a masa entonces deberia ser BTFSS 0 me equivoco otra cosa el retardo no sera muy poco porque lo estoy probando y todavia no me funciona saludos desde chile Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F625A/645A Publicado por: Suky en 02 de Diciembre de 2009, 13:30:59 No, fijate que al pulsar la tecla, el pin del PIC pasa a I (SV). Y en el test de estos pines se testea si es cero, salta a consultar por el otro, si este también es cero se salta al bucle nuevamente. La demora es para que al mantenerlo presionado se note el cambio gradual, y capaz si sea demasiado poco :tongue: Pero si es el caso veras que pasa de 0% a 100% (Ciclo de trabajo) casi sin poder controlar. Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: kapotik en 13 de Diciembre de 2009, 20:47:03 Buenas a todos! ‘Suki quisiera saber si me podrias ensefiar como recivir un caracter 0 una cadena de caracteres por rs 232 y luego poder tratarla, o sea hacer alguna comparacion, por ejemplo si recibio en el caracter n° 23 una "p" que aga tal cosa. Es pero haber sido lo mas claro posible, ya que enviar desde el pic al pc me sale muy bien pero no se como recibirlo y tratarlo. Espero me puedas ayudar y sino todo bien igual Un saludo desde Mendoza Argentina para todos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 13 de Diciembre de 2009, 20:58:38 Hola kapotik! Para recibir una cadena puedes usar el direccionamiento indirecto como para guardarlo en un rango de la memoria. Para comparar datos podes hacerlo de la siguie éeiga: ASM 1. |; Se rectbe un cardcter y se guarda en RData por ejemplo 3.) movlw “3 1s en Wen asctt a 4 subw? ROata,@ ; Restanos W-RData y Lo guardanos en Wi 5. | btfse STATUS,2 ; Consultanos st La operacion a resultado @ 6. | goto SHESA ; Si es A. 7. | goto WoESA No es A. Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: kapotik en 14 de Diciembre de 2009, 10:36:31 Gracias suky por contestar tan rapidamentel! disculpa mi ignorancia pero podrias mostrarme como recibir la cadena de caracteres. La comparacion si ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, me quedo bien claro. Saludos Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: micronet3 en 19 de Enero de 2010, 19:48:56 wow amigo suky, que locura, hace tiempo que no toco el assembler, pero igual jamas he llegado a tocar varios temas en assembler, que bien amigo. muchas gracias por tu esfuerzo, esto es mejor que un libro de assembler Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: beto1234 en 22 de Febrero de 2010, 13:24:40 USO DE LA LIBRERIA MATEMATICA + - / * Bueno amigos voy a tratar de explicar como poder multiplicar, dividir, sumar y restar usando una libreria. matematica muy util. Para crear esta libreria, abrimos el bloc de notas de windows que se encuentra en el mend accesories. Copiamos el cédigo de la libreria que mas abajo la dejo, y lo guardan con el nombre "Matematica" y la extensién "INC" Cécigo: [Salaccianar} ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Double Precision Multiply ( 26a > 32 ) ; (nurstnina => Mi Rests) 32 BEE output with high word An acco ( Minin L } and low nord in ACCE { AESVANRESUAL ). fatespaicar results 4m ACCD(36 mab's) and ACCe(S6 188") ‘ectsz tempat, 1 jl0op until all bits checkee fF “Goubde Precision Divide ( 36/16 => 16 ) ; (Conneaynuna <> MUM with ronzinger in RESUL ) 5 26 bit output with quotione in mae (WMIMGAUMEL} and Renatncer in RESUD (RESUIMRESUIL) 2 mneratovthna) iv greater than benoinator). 2 ‘robwf — RESUIH, 2 dst Starusje shift a 2 Unto b (result) ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 rans 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, MODO DE USO Para probar solamente abran el MPLAB => File Registers , y van a ver los resultados en el registro TRISA 6 TRISB asi también como cada registro usado por la libreria RESTA cio: [Selcctonar) OOH MURIL) —CUMEH, NUL) = (RESUIMRESUIL) lwctuoe ~c-, sUMA cia: [Selecionar) Soman) = Quan) = (UME NUEIL) ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 rsn0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. wctuce *c:\s..\watena PICIBFBAA y PICTEFE2BA48A MULTIPLICACION écigo: [Salecionar) SEMOH,WUNL) = CUMRH,NUMDL) = ( RESLAM,RESUAL ) lnctupe v2... Watanatiea. ne DIVISION igo: [Setecionae} sored lnctuoe “24... Watansttea. me HOON AURIL) /“CUROHLMUL = (SUNDIAL) , resto an ( RESUIMYRESLAL ) wv odopie.com atlforosindex.php?PHPSESSI pvighgkqeu2reggbgk08lgd004&acton=printpagertopie=24720.0 ren0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 22 de Febrero de 2010, 13:29:20 Excelente aporte Beto! :-/ Una libreria muy util :P Saludos! Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: chicho en 11 de Abril de 2010, 00:19:56 Hola Suky y gracias por este tutorial, esta muy bueno, Yo recien estoy dando mis primeros pasos en este tema de los Pic y queria hacerte una pregunta, como ejemplo te digo que estoy probando con el pic 16f84 al cual conecte 2 leds, 1 en RBO que enciende cada ves que oprimo el pulsador y el otro led en RB1 el cual quiero que prenda despues de haber oprimido el pulsador una determinada cantidad de veces, No se si se entiende lo que digo: el led en RBO enciende siempre que oprima el pulsador y el led en RBL cuando el pulsador fue oprimido por ejemplo 5 veces. ‘Como hago para ir contando las veces que se oprimio el pulsador? Desde ya muchas gracias por tu ayuda Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F628A/648A Publicado por: Suky en 11 de Abril de 2010, 09:29:03 Puedes utilizar una variable (Un registro de la RAM) para contar cuantas veces a sido pulsado, esperando que el botdn se presione y suelte. Luego comparas este valor con un literal para saber si se ha pulsado N veces. Saludos! Titulo: Re: Mis primeros programas. PICL6F84A y PIC16F628A Publicado por: etarrita en 03 de Mayo de 2010, 16:10:15 ka de: Suky on 21 de Marzo de 2009, 18:37:34 [otro ejempio: en este se af roca lee modinca en byte a ia. de PWM on 2 Kiev se varia el ciclo de trabajo con 2 pulsadores de control conectados @ RBO y RB. Selo del Cr, data el replstrd CCPRIL con fo que CT se varia Ge 4 en Herdware necesaro: (hto:/fimes.imegeshack us/ings/2410/pwm2.9n9) lcsaigas Asm 8 contador? age ean; ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd004acton=prinipage:topic=24720.0 ros 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, hola suky, gracias por todos tus aportes, me interesa este codigo pero lo usare para controlar la velocidad de un motor mediante puente h, etc. tengo entendido que la frecuencia del pwm deberia ser 20khz para que el motor no haga ruidos audibies por el humano, me podrias ayudar??? wv odopie.com atlforosindex.php?PHPSESSI pvighgkqeu2reggbgkO8lgd0048acton=printpagertopie=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, gracias. Titulo: Re: Mis primeros programas en ASM. PIC1GF84A y PIC16F628A/648A Publicado por: MINDFIELD en 22 de Mayo de 2010, 14:33:18 Hola SUKY exelente tu aporte !!, me interesaria saber como se programa una eeprom ! , estoy ‘empesando de 0 de nuevo jeje con esto de assembler ! y no encuentro info sobre el tema ! saludos ! Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: MINDFIELD en 22 de Mayo de 2010, 14:45:50 Jaja olvide de escribir la pregunta principal que queria hacer | :o0ps: jeje queria preguntarte tambien si onoces mikropascal y si es asi !? que te parece para programar micros ? gracias por tu tiempo y tu ayuda en otros momentos y espero que estes bien amigo ! saludos ! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: O7ERO en 10 de Junio de 2010, 22:56:06 En el contador de 0 - 999 Quiero colocarle dos pulsadores uno INICIO/STOP y otro PAUSE. Como hago para colocar pulsador de INICIO/STOP yo le puse el pulsador para inicio y lo simule en elk proteus y funciono fino pero he tratado de que el mismo pulsador despues de haber iniciado el conteo automatico lo detenga y no he podido, el va 2 hacer que vuelva a cero y que haga falta volverlo a apretar para que inicie de nuevo. Para inicio yo coloque btfss perguntade por el estado del pulsador para iniciar y luego volvi a pregunta bifss por el estado de pulsador pare el stop, y que va, cuando lo simulo no funciona, a veces hasta se guina el conteo, Titulo: Re: Primer Programa Publicado por: jhony85 en 11 de Junio de 2010, 08:34:08 a dS an 5 Ebr da 200 217.06 [Comenzando con la creacion de nuestro cédigo: [x continuacén vamos a desarolarcuestro primer programa. Considero que se uene conocimiento del lenguaje Assembler, ino 05 lsi se puede teor st utori ASM desde Cero (nttp:/www.todopiccom.ar/forosindex.php?lapic=23625.0) de este mismo este activa un led conectado a RB0 siempre que el interrupter conectade 2 RAO este cerrado, Para elo varios @necestar figuiente ecto: (oxep/ing217-smagesnack.usyimg217/282/naréeantralledjao.bmp) Jen RAO tenemos conectado un pulsador de forma que cuando lo pulsemas se introduca un caro Iélco en ol sn y cuando nolo puisemas se introduzca un uno logic. Tenemos un Led con su correspondiente resilencisImvtadora de covrente eel ph RO. tagrama de Flujo: (hetp:img1.ssmageshaceus/ime19/7125/conrlletea pa) lmero que nada debemos especticar fedaigo: Asm 8 que micracentrolador estamos trabajando, esto lo realzamos es as des primeras Ineas: en et archive PLEFB4A.Inc se encuentran las defnicines de las drecciones de ls registro expecifcns, los bts uilzados en cas feats y los fusibles cl micro. Iconfiguracién de tusbles, Hay clrtos aspectos del PIC que han de ser activates 0 desactivados mediante hardware 31g hora de lrooramarlo. Esta quere dec que no se pueden voWer 9 cambiar hasta Que el chp no #2 rearograme de nuevo, cl PLCASresA [lepone de uses os modelos superar tienen més) Caca se acveo desea se opin de funearerieto, ls manerasdistintas, depencience de fa velocidad y del tipo de creuito oslader emmplaacor [wots Yamoso “perro guarclan” del PIC se configura agu. Esta es Una capacidad Gel microconrolador de autoresetease. _ ww todopie.com arlfrosindex php?PHPSESSID=pvi9hgkqeureggbqk08igd004Aacton=prinipage:topic=24720.0 anos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, activames este fuse, lo que conseguimes es que se genere un retardo en la incilzacién del microcontrolaco. lop: Activando este fuse tendremos Ia gaantia de que # tiga que escribamos en al PIC no pueda ser lel por otra persona, para lave na noo canen, mecitquen, ete, (Code Protection}, Esto no impide que el PIC funeione como siempre, m que novre pueda [Zobrescrbir su contenido fesaigos asa Dennicién de variables que utilzaramos en nuestro proyecto. En este caso solo defnramos bits, por ejemplo Led y Pusader, para organtzar nuestro programa lo estrucuraremos cela sigulante manera INvel" Directive Operences ; Comentarios [ceaigo: Asm Iconfiguracién de puertos Paral coniguracén necestomos os siguentesregistros: |staTUS > ox03; PORTA > 0x05; PORTS > 0x06; TRISA > Ox86 y TRISB > Ox86. ror defacto tos puerto auedan coniguredos como entradas de dates ys se quiere cambla hay que conigurarles. Esto se reliza con los resists TRIS y TRIS, tenienda en vento que sae aigna un cero (0) 8 um pin, quedaro como sada ys se signa un uno (1), Javecara como entraca, en nuestro caso se necesita colocar TISA gual 2 11111 (0 se puede dejar por defaut) y TRISS 11121210. Ahora bien, cuando el Pic rrones se encventr en el Bonco 0, TRISA y TR'SB se encvertren en of Sanco 1, entances debemos combior de Banco. Est se Jeaiza con of it RPO cel ragisto STATUS, si este Se pone un care 9 RPO, estaremes an el anes O.Si'seesloca Un uno, estaremes lcsaico: asm ha contguraco nuestro PIC, vamos realzar la rutia que ejecutara lcdaigo: as 2 ot tome 5 Este at Logico, Apaganos Led 7. Apagar bef PoRTB, Led oagonos Led lagu solamente en un bucl infinite testeamas continuamente el estado del pulsador,y seouin su estado se encenderd o apagaré el hola buenas , estoy intentando montar este primer circuito y quisiera saber si se puede sustituir el cristal por una red RC y cémo iria ésta colocada. Saludos, Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Deckblank en 17 de Junio de 2010, 03:37:39 ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 ean0s 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, shock: :shock: Quiero llorar quiero llorar .,. muchas gracias Suky ... con mas personas asi la electronica en sudamerica seria otra cosa :D me lel de corrido todo hasta los led ... en cerca de 2 horas ... tu tuto es una pasta :-/:-/ :-/ rafro: Sos un grosso Titulo: Re: Mis primeros programas en ASM, PICLGF84A y PICL6F628A/648A Publicado por: Suky en 17 de Junio de 2010, 19:07:11 Muchas gracias por los comentarios! ;~ Jhony85, se puede hacer lo que necesitas, primeramente debes indicarselo al microcontrolador ‘configurando adecuadamente la palabra de configuracién (FUSES). Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: Hormiga en 22 de Julio de 2010, 02:31:56 Hola suky la verdad que no he podido realizar comunicacién serial con pic 16f84a a 115200BPS, lo otro me puedes explicar por favor como recibir RX tramas fous Gracias Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Suky en 22 de Julio de 2010, 11:16:11 (cto de: Hormigg en 22 de lo de 2010,.02:31:56 ota suky la verdad que na he podide realizar ComunlcBGan Se7al Con plc TETRA @ TIS2OUBPS, Wo Ola Pe puedes Explcr par favor Prueba con un microcontrolador que tenga médulo UART, sino muy dificil... Saludos! Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC1GF628A/648A Publicado por: JebusITO en 28 de Agosto de 2010, 20:41:29 buena stardes, soy nuevo en el foro y estoy intentado segir paso a paso este tutorial, peor tengo varias dudas, la primera: Como simplificas esta formula: Toub = 2+ 1+ 1+ (OXMX)ML +1 + (OXYY- 1)*(1 +2) +24 142] 4 [1414 (OXVY- 1) +2) 4 24242) ciclos Lo cual se puede simplificar como sigue Tsub = [OxXX=((OxYY - 1)*3 + 7) + 5] Tey segundo, en el mplab ide y el proteus usando el codigo para hacer titilar el led funciona: # Demora_150ms # moviw OxFF ; # movwf Contador! ; Iniciamos contadori.- ww todopie.com arlforosindex php?PHPSESSID=pvi9hgkqoureggbqk0Bigd0048acton=prinipage:topic=24720.0 evtos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, # Repeticioni # movlw OxC3 ; # movwf Contador2 ; Iniciamos contador2 # Repeticion2 # dectsz Contador2,1 ; Decrementa Contador? y si es 0 sale.- # goto Repeticion2 ; Si no es 0 repetimos ciclo. # dectsz Contador1,1 ; Decrementa Contadort.- # goto Repeticiont ; Si no es cero repetimos ciclo.- + return ; Regresa de la subrutina.- # # end pero si deseo aumentar el tiempo por ejemplo a FF en ambos contadores, el proteus me dice lo siguiente al inicar la emulacion: PICL6 Load: Program or eeprom data has a invalid adress (2000) hasta el 2003 for this device y luego el wathdog comienza el reseteo del micro cada poco mas de 0.5seg gracias por entenderme :) Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Suky en 28 de Agosto de 2010, 21:23:37 (cua de: JebustTO en 26 de Agosto de 2010, 20:41:29 Tardes, oy nuave en elforay estoy mtentado Ser paso © paca ete GAOT], peor tango varias Gudas, a anmeT come simplifias esta téemola [aes 2t 242+ (oooorts +a (Oo. aye +2) +24 142) (Led 4 (OMY HR +2) +24 2+ 2] oes [Tsub = [Oxxx"((Ox¥Y ~ 1)*3 + 7) + 5] Tey Hay que sumar los 1 y los 2. :mrgreen: Para lo segundo, no deberia de haber ningin problema con cambiar solamente el valor de los contadores, revisa con calma para deterninar si no cambiaste otra cosa. :? Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: JebusITO en 29 de Agosto de 2010, 00:47:21 (cea de: Suby en 28.60 Agosto de 2010, 21:23:57 fcita ce: JsbustTo an 28 de Appste de 2010, 20-41:29 come simptieas esta térmua: frsub = 2+ 14 1 Coxmw)efs + 1+ (Oxy -aye{d +2) 42414 AIH [LHL (OHI A}MLE +2) +2424 2) ces Le cual se puede simpliicar como sigue [sub = (osocet(owr? = 10347) = 5) Tey hey que sumarlos 1 ylas 2. seorgren: pvighgkqeu2reggbgkO8lgd0048acton=printpagertopie=24720.0 ens wv odopie.com atlforosindex.php?PHPSESSI 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, para to segundo, no deberia de haber ningin problema con camblar solamente el valor de ls contadores, revise con calma para Jseternnar sino‘cambiaste oro cosa, |sataost Gracias por responder, pero igual sigo con dudas, al sumar los "1 y los 2° obtengo la siguiente formula: 4+ (OxXX)*[(OXYY-1)*(3)+7]+[(OXYY-1)*(3)+8) muy diferente ala que tu muestras, [0XX* ((OXYY = 1)*3 + 7) + 5] Tey y en cuanto a la rutina de retardo, no no modifico sino el segundo contador, ya que descargue las simlaciones que amablemente compartiste con nosotros y sige con lo mismo asi cambie al siguiente numero hexadecimal me genera el mismo error, 0 si le resto a OxC2 sigue con el problema :S. Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Suky en 29 de Agosto de 2010, 11:30:08 Es cierto :oops: Si simplificamios a esa ecuacién, con simple matematica se llega 2 Sub = [(OxXX+1)*((OXYY - 1)*3 + 7) + 5] Tey El problema es que falta un -1 en la original, debe ser: Toub = 241+ 1+ (OxxX-4)*[1 + #24242) ciclos (OxvY - 1)*(1 +2) #24142) 4 (141+ (OxVY- 41 +2) Y es0 sida Sub = [(OxXXx)*((OXYY - 1)"3 + 7) + 5] Tey Que es lo correcto. Lo otro, tiene que ser problema del simulador, no veo otro problema, Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: JebusITO en 01 de Septiembre de 2010, 20:19:55 Todo funcionando bien :D Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: Suky en 13 de Septiembre de 2010, 14:41:39 (http://img412.imageshack.us/img412/4624/0106.gi*) 100.000 vi fast :/ Este 16F84A sigue rompiendo records!!! Pero con ayuda del 16F628. :mrgreen (nttp://img84.imageshack-us/img84/3881/bangef gif) :D :D Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: solapower en 15 de Septiembre de 2010, 14:33:41 suki: Estoy siguiendo este tema atentamente pero me encuentro que al instalar el ConfigPic_me dice que mehace falta el .NET Framework V 1.1.4322 y cuando accede a internet para descargarlo entra en una pagina donde no esté la version mencionada, he instalado versiones superiores de Net, pero el setup sigue con el mismo mensaje. ww todopic.com arlfrosindex php?PHPSESSID=pvi9hgkqeureggbqk0Bigd0048acton=prinipage:topic=24720.0 extos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Alguna idea ? Saludos Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: Suky en 15 de Septiembre de 2010, 15:52:59 a de: solapomer an 15 de Septiembre de 2010, 14133:41 lstoy sguiendo este tema atentamente pero me encuentro que alnstalar el ConfigPic me cice que menace falta el NE" Framework V 1.14322 y cuando secede a internet pare descargar entra en una pagina donde no est a version meron instlodo versiones superores de Nek, pero el setup sigue con el misma mensaie Irisuna ies ? Si ejecutas en .exe (dentro de la carpeta bin) ocurre lo mismo? Intento compilarlo con VB.NET para probar. Saludos! Titulo: Re: Publicado por: solapower en 16 de Septiembre de 2010, 0! primeros programas en ASM. PICLGF84A y PIC16F628A/648A 5:59:45, Gracias por tu respuesta Suky: Ejecutando el exe desde la carpeta bin funciona perfectamente. Gracias de nuevo Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: zaratustra_x en 01 de Octubre de 2010, 19:44:05 Saludos Suky Muchas gracias por tomarte el tiempo de hacer este post: Quiero felicitarte por tu trabajo y agradecerte por el todo el esfuerzo que has hecho. Habia estado buscando tutoriales para aprender a programar pies y me topé con tu post. Gracias por comentar tu trabajo tan detalladamente para que los novatos podamos entender el mundo de los microcontroladores. Sigue adelante. Saludos desde México. Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: bryan394 en 15 de Diciembre de 2010, 00:18:28 hola necesito ayuda en esto!! por favor!! nesecito resolver esto pero nose como hacerlo sin usar ninguna funcion de division... solo restas 0 Elaborar un programa (fuente) en lenguaje ensamblador para el PICIGF84A que reciba informacién binaria de 5 bits en el puerto Ay devuelva en un visor de siete segmentos la letra P indicando que el nimero recibido es primo, caso contrario el visor muestra la letra H indicando que no es primo, ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 eos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, bueno solo necesto la parte de Elaborar un programa (fuente) en lenguaje ensamblador para el PICLGF84A que reciba informacién binaria de 5 bits y determine si es binario o no... por favor!! necesito ayuda urgente!! :( Titulo: Re: Busco informacion para configurar PICA6F84A en modo timer Publicado por: MARTINMARCELO_PER en 28 de Diciembre de 2010, 12:08:08 Hola. Conazco poco del tema, en realidad soy ingeniero agrénomo, disculpen mi ignorancia en el tema. Pero requiero informacién sobre el tema ya que estoy disefiando un experimento, con "cangilones" donde debo registrar pulsos en el tiempo, que deben ser guardados por un lapso de tiempo (datalogger), y cargados a la computadora Viendo este foro he aprendido algo. y me he enganchado con el tema, Mi pregunta es: écuando armo el circuito, cuales serian los pasos para configurar el PIC, de forma de generar y registrar los imputs de interes (Pulsos y tiempo entre pulsos)? Tambien quisiera saber como configurar el reset, y el ahorro de energia ya que solo registrara durante las lluvias. Un millon de gracias. y disculpen mi ignorancia Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICI6F628A/648A Publicado por: ¢@Lic_O en 09 de Febrero de 2011, 12:13:49 (kp de: pnand06 on 15 de Dilembre de 2010, 00:18:28 mola necesita aya en esol! por Favor lnesect resolver esta pero nose come hacerlo sin usar ringung funcon de Avision. sla rests o sums etorer un program (fuente) en lenguaje ensamblador para el PICIEFO4A que recibainformacién binara Ge 5 bs en el puerto Ay Jsevuclva en un vsor de sete segmentos a letra P incieando que el numero recbido es prime, caso contra el visor muestra a ets leno sole necesto a parte de elasorar un programa (fuente) en lenguaye ensamblador para al PICYGFSAA que recibaInformaciénbinara de 5 bitsy determine si es binaro-o noe por favor! neces ayuda urgentelt Pues mira si solamente son 5 bits como maximo llegaras al numero 32, como entre entre el 1 y el 32 no hay demasiados numeros primos (seran unos 10 numeros primos) puedes utilizar tablas para guardas los numeros primos comprendidos entre este rango, una vez que tengas tu dato binario de 5 bits simplemente lo comparas con tu tabla y verificas si es primo o no :-/ :~/, bueno esa la forma mas sencilla :D :D ahora si tu dato binario tiene mas de 5 bits eso ya es otra cosa y ahi si ya tienes que usar divisiones sucesivas para hallar si el numero es primo 0 no :P :P Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: falflores en 27 de Febrero de 2011, 02:37:25 Hola zuky, excelente material, sumamente didactico, muchas gracias por compartirlo, queria preguntarte éSabes programar en C, basic o algin otro software de alto nivel? Titulo: Re: Mis primeros programas en ASM. PIC1GF84A y PICL6F628A/648A Publicado por: Suky en 28 de Febrero de 2011, 11:39:52 Hola! Muchas gracias por los comentarios. Si, se programar en C y algo de C++. En el foro hay un par de tutoriales y librerias, igualmente por aqui puedes encontrar casi todo lo compartide: www.micros- designs.com.ar Saludos! Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F626A/648A Publicado por: zaratustra_x en 02 de Abril de 2011, 20:03:56 ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 esis 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, Saludos suky: He estado haciendo el ejemplo para inicializar el LCD con el 16F84A siguiendo tu tutorial AA final del mismo escribiste que no lo pudiste simular en proteus. Bueno, leyendo otros foros y el datasheet te comento que si pude Despues de: movlw LCD_BUS_4_2 ;Namos a configurar el LCD 4 bits y 5x7 pixeles = 0x28 con corrimiento call LCD_COMANDO ——_;Envlamos el comando al LCD Escribimos: moviw LCD_ON ;Encendemos ta pantalla call LCD_COMANDO —_;Enviamos el comando al LCD donde LCD_ON tiene el valor 0xOC que es el comando para encender la pantalla. Despues de encenderlo utilizo el comando para limpiar e! LCD (0x01) y despues el comando para parpadear el cursor(0x0F) y todo perfecto EILCD en proteus enciende y empieza a parpadear :) Muchas gracias por tu tutorial Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: Olinqui en 08 de Abril de 2014, 04:32:59 Hola a todos soy muy nuevito en esto de los micro controladores PIC hoy estoy trabajando con el 16F84A pero me surgié una duda tengo un cédigo para encender un led con un pulsador y el temporizador lo mantiene encendido 5 seg y después apaga. El tema es que si el pulsador se mantiene presionado los 5 seg corren a partir de que este se suelta y lo que quiero es que el temporizador trabaje independiente sin importar el tiempo que se mantenga presionade el pulsador este es mi cédigo. MONITOR btfsc PORTA,Pulsador ; Revisa si es 0 si es asi salta una linea goto Apagar ; Estaa 1 Apagamos Led bst PORTB,Led | ; Manda un 1 al registro Led y enciende goto DEMORA ; Salto a Demora goto MONITOR’; Revisa nuevamente la condicién del Pulsador Apagar bef PORTB,Led _ j Manda un 0 al registro Led y lo apaga goto MONITOR ; Revisa nuevamente la condicién del Pulsador ‘Segiin yo la demora deberia ser independiente al monitor del pulsador ya que est en una linea de cédigo mas abajo pero no me funciona y no doy con el error haber si me pueden ayudar Gracias de antemano si me pudieran orientar me serviria mucho para entender mejor el funcionamiento de estos bichitos PIC*s Adjunto el cédigo completo tal vez el error este en otra parte. Titulo: Re: Mis primeros programas en ASM. PIC1GF84A y PIC1G6F628A/648A Publicado por: Suky en 08 de Abril de 2011, 09:30:23 En teoria si, al pulsar comienza la demora. Pero en hardware real tienes el problema del efecto rebote que puede generarte esos inconvenientes. Puedes esperar 20ms y testear nuevamente como para saber ww odopie.com arlfrosindex php?PHPSESSID=pvidngkqeu2reggbqk0Bigd0048acton=prinipage:topic=24720.0 esos 71272020 Imprimir Pagina - Mis primeros programas en ASM. PICTSFBAA y PICTEFE28A648A, si realmente se ha pulsado o soltado el boton. Saludos! Titulo: Re: Mis primeros programas en ASM. PICL6F84A y PIC16F628A/648A Publicado por: emiro99 en 16 de Abril de 2014, 23:37:11, Saludos a todos, disculpen una pregunta, pero tengo una duda con este pic16F628, {Puede utlizar un médulo comparador y el médulo PWM al mismo tiempo?. :? Es que este PIC es nuevo para mi :-/ De antemano gracias por su valiosa ayuda Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC1GF628A/648A Publicado por: Suky en 17 de Abril de 2011, 11:16:31 Hola! Si es el médulo comparador analdgico y el méculo CCP en modo PWM, si sin ningin = inconveniente. Ahora el médulo CCP en modo comparacién y el médulo CCP en modo PWM, no. Este PIC solo dispone de un médulo CCP, puede cambiar por un PICL6F8S3, ect. Saludos! Titulo: Re: Mis primeros programas en ASM. PICIGF84A y PIC16F628A/648A Publicado por: emiro99 en 30 de Abril de 2014, 13:13:57 Gracias, este foro es lo maximo. Encuentro respuestas a casi todo!! Y quiero mostrarles un dato que encontré en microchip, contiene las directivas _config para cada PIC y como guardar y restaurar registros tras una interrupcién incluyendo el PCLATCH. pero no puedo adjuntar el archivo. :x Lo subi en otro servider; http://depositfiles.comy/files/ssadfuyyr Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: tazma en 03 de Mayo de 2011, 05:09:07 hola mi pregunta es la siguiente como y que tengo que usar para empezar a programar pic desde el principio Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PICL6F628A/648A Publicado por: Suky en 03 de Mayo de 2011, 10:07:59, (ke de: tanma en 03 de Mayo de 2014,.05:09:07 [Pots mi pregunta es le siguiente como v que tenga Gue ular para cmpevar& programar ie desde el prineibia Lee con detenimiento el primer mensaje. Saludos! Titulo: Re: Mis primeros programas en ASM. PICLGF84A y PIC16F628A/648A Publicado por: tazma en 03 de Mayo de 2011, 10:35:35 wiv odie. com atlforosindex.php?PHPSESSI pvidhgkqeu2reggbgk08lgd0048acton=printpagertopie=24720.0 ernos

También podría gustarte