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 si0571272020 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 20s71272020 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 anos71272020 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
sii0s71272020 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 7110571272020 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 anos71272020
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 1210871272020
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
tan0s71272020 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
15110871272020 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 16110871272020 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 s7H0871272020 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, anos71272020 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 2ut0s71272020 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, anos71272020
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, 2anos71272020 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, 240s71272020
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, sis71272020 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 2en0s71272020 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 2rnos71272020
‘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 anos71272020
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.
anos71272020 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,
anos71272020 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 autos71272020 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 anos71272020
‘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 anos71272020
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,
anos71272020 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
sis71272020 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 ens71272020 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 arnos71272020 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 anos71272020 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 anos71272020 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 ans71272020 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 anos71272020 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, aanos71272020 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 anos71272020
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,
anos71272020 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, 460571272020 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 arnos71272020 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
ans71272020 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 4an0s71272020 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 santos71272020
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.
sut0s71272020 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, 210571272020 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 sas71272020 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 40571272020 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, sos71272020
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
se0s71272020
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
srnos7272020 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 anos71272020 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 santos71272020 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 ean0s71272020
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.-
eutos71272020 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 e20571272020 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
eas71272020 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?PHPSESSI71272020 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 esos71272020 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 ernos71272020 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
i71272020 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
i71272020 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 rans71272020 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 rin0s71272020 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 anos71272020 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
anos71272020 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 rans71272020 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 rsn0s71272020 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
ren0s71272020 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 ros71272020
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
anos71272020 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 anos71272020 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 ean0s71272020 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 evtos71272020 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?PHPSESSI71272020 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 extos71272020 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 eos71272020 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 esis71272020 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 esos71272020 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