Muchas gracias Maunix por los aportes. :-) :-)
Un poco de tiempo y me lanzo con las simulaciones. :wink: :wink:
Un Saludo
Felicidades y gracias vequepic por esforzarte en ayudar a los demas en esto del ensamblador :mrgreen:, relamente tus ejemplos, aunque ya sabia lo enseñado en la universidad de ensamblador, me ayudan a depurarme mas en los que hago y seguire haciendo con este lenguaje para los micros.hola!! estube viendo los ejemplos porque tenia dudas de como hacer un timer lo que hice fue simular al ejercicio del led que se prende cada 0,5 seg atravez del mplab 5.7 con unas opcion llamada "trace points " y visualizando los resultados con su ventana (windows>>trace memory),al hacer esto solo registra el primer destello del led a los 9microsegundos y despues nada............ ¿que pasa?estoy haciendo algo mal? no es la forma de verlo? me estoy volviendo loco!!!!!!!!!! este es el mejor programa para simular programas en assembler??? hay otros mejores,mas amigables al uso???
Como se dice todos los dias aprendemos algo nuevo :mrgreen:.
Saludos LabPIC
Hola Amigos:
Gracias a que el amigo Vszener amablemente cedio sus Ejemplitos en C y simulaciones, abro este tema para pasar estos ejemplos a Asembler.
Inicialmente voy a utilizar el 16F84A, espero posteriormente migrar el codigo a los micros 16F628, 16F648 y 16F88 que estan por aqui mirandome sin hacer nada. :shock:
Hoja tecnica 16F84A (http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf)
Se usara en los ejemplos el compilador MPLAB y para las simulaciones PROTEUS.
MPLAB (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002)
PROTEUS (http://www.labcenter.co.uk/index_uk.htm)
INDICE
- 01.- Prender un led (http://www.todopic.com.ar/foros/index.php?topic=12345.msg69623#msg69623)
- 02.- Prender y apagar un led cada 0.5 segundos (http://www.todopic.com.ar/foros/index.php?topic=12345.msg69625#msg69625)
- 03.- Prender y apagar 4 leds cada segundo (http://www.todopic.com.ar/foros/index.php?topic=12345.msg69680#msg69680)
- 04.- Auto Fantastico (http://www.todopic.com.ar/foros/index.php?topic=12345.msg69780#msg69780)
- 05.- Auto Fantastico - codigo optimizado (http://www.todopic.com.ar/foros/index.php?topic=12345.msg69817#msg69817)
- 06.- Juego de luces - dos luces que se cruzan (http://www.todopic.com.ar/foros/index.php?topic=12345.msg70000#msg70000)
- 07.- Juego de luces - dos luces que se mueven de lado a lado (http://www.todopic.com.ar/foros/index.php?topic=12345.msg70512#msg70512)
- 08.- Encender 4 luces - al presionar un interruptor se prende el led correspondiente (http://www.todopic.com.ar/foros/index.php?topic=12345.msg72255#msg72255)
- 09.- Encender 4 luces - igual que el anterior pero de otra forma (http://www.todopic.com.ar/foros/index.php?topic=12345.msg72256#msg72256)
- 10.- Manejo de un Display de catodo comun (http://www.todopic.com.ar/foros/index.php?topic=12345.msg73948#msg73948)
- 11.- Rutina de Lectura de una Tabla en Memoria de Programa, sin importar donde esté ubicada - Versión 0.1 (por Maunix) (http://www.todopic.com.ar/foros/index.php?topic=12345.msg74300#msg74300)
- 12.- Rutina de Lectura de una Tabla en Memoria de Programa, sin importar donde esté ubicada - Versión 0.2 (por Maunix) (http://www.todopic.com.ar/foros/index.php?topic=12345.msg74301#msg74301)
- 13.- Rutina de Lectura de una Tabla en Memoria de Programa, sin importar donde esté ubicada - Versión 0.3 (por Maunix) (http://www.todopic.com.ar/foros/index.php?topic=12345.msg74302#msg74302)
- 14.- Contador Hexadecimal de un digito con display catodo comun, cambia cada segundo. (http://www.todopic.com.ar/foros/index.php?topic=12345.msg82948#msg82948)
Los Zip tienen los archivos asm, hex y dsn (proteus).
Espero sus criticas, correcciones, sugerencias, etc :-)
diria yo que para los PIC el mejor y mas utilizado es MPLAB aqui (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002) podes mirar info y descargarlo
diria yo que para los PIC el mejor y mas utilizado es MPLAB aqui (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002) podes mirar info y descargarlo
Hola jhozate, disculpa mi ignorancia, pero existen otros compiladores asm para pics???
Saludos
anda.. :shock:..ni idea q habia mas
;**************************************************************
;* *
;* Ensamblador para microcontroladores MPASM *
;* *
;* NOMBRE : pic8lcd.asm *
;* OBJETIVO: Contador 0-9 con salida a LCD configurada a un *
;* bus de 8 lineas, controladas por el puerto B del *
;* PIC16F84A. Las lineas EN y RS estan sobre el *
;* puerto A en los bits 0 y 1 respectivamente. *
;* *
;* AUTOR : antonio gauss *
;* EMAIL : agauss@todopic.zzn.com *
;* *
;**************************************************************
title "PIC16F84A, pic8lcd.asm"
list p=16f84a, f=inhx8m
#include <p16f84a.inc>
__config _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON
STATUS equ 0x03
PORTA equ 0x05
PORTB equ 0x06
PDel0 equ 0x10
PDel1 equ 0x11
COUNT equ 0x12
org 0x00
goto inicio
org 0x04
goto rsi
org 0x05
inicio: bsf STATUS,RP0
movlw 0xFC
movwf PORTA
movlw 0x00
movwf PORTB
bcf STATUS,RP0
clrf PORTA
clrf PORTB
call init
main: clrf COUNT
movlw 0x01
movwf PORTB
call en_com
mLoop: movf COUNT,0
addlw 0x30
movwf PORTB
call en_dat
movlw .250
call delay
incf COUNT,1
movlw 0x0A
xorwf COUNT,0
btfss STATUS,2
goto mLoop
goto main
init: movlw .20
call delay
movlw 0x38
movwf PORTB
call en_com
movlw 0x0C
movwf PORTB
call en_com
movlw 0x06
movwf PORTB
call en_com
return
en_com: bcf PORTA,1
bsf PORTA,0
nop
bcf PORTA,0
movlw .2
call delay
return
en_dat: bsf PORTA,1
bsf PORTA,0
nop
bcf PORTA,0
call T050us
return
T050us: movlw .15
movwf PDel0
DLoop3: decfsz PDel0,1
goto DLoop3
return
T200us: movlw .65
movwf PDel0
DLoop2: decfsz PDel0,1
goto DLoop2
return
delay: movwf PDel1
nop
DLoop0: movlw .249
movwf PDel0
DLoop1: nop
decfsz PDel0,1
goto DLoop1
decfsz PDel1,1
goto DLoop0
return
rsi: retfie
end;**************************************************************
;* *
;* Ensamblador para microcontroladores MPASM *
;* *
;* NOMBRE : pic4lcd.asm *
;* OBJETIVO: Contador 0-9 con salida a LCD configurada a un *
;* bus de 8 lineas, controladas por la parte alta *
;* del puerto B. Las lineas EN y RS estan sobre el *
;* puerto A en los bits 0 y 1 respectivamente. *
;* *
;* AUTOR : antonio gauss *
;* EMAIL : agauss@todopic.zzn.com *
;* *
;**************************************************************
title "PIC16F84A, pic4lcd.asm"
list p=16f84a, f=inhx8m
#include <p16f84a.inc>
__config _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON
STATUS equ 0x03
PORTA equ 0x05
PORTB equ 0x06
PDel0 equ 0x10
PDel1 equ 0x11
COUNT equ 0x12
org 0x00
goto inicio
org 0x04
goto rsi
org 0x05
inicio: bsf STATUS,RP0
movlw 0xFC
movwf PORTA
movlw 0x0F
movwf PORTB
bcf STATUS,RP0
clrf PORTA
clrf PORTB
call init
call conf
main: clrf COUNT
movlw 0x00
movwf PORTB
call en_com
movlw 0x10
movwf PORTB
call en_com
mLoop: movf COUNT,0
addlw 0x30
movwf DATO
movwf PORTB
call en_dat
bcf STATUS,0
rlf DATO,1
rlf DATO,1
rlf DATO,1
rlf DATO,1
movf DATO,0
movwf PORTB
call en_dat
movlw .250
call delay
incf COUNT,1
movlw 0x0A
xorwf COUNT,0
btfss STATUS,2
goto mLoop
goto main
init: movlw .20
call delay
movlw 0x30
movwf PORTB
call en_com
movlw .5
call delay
movlw 0x30
movwf PORTB
call en_com
call T200us
movlw 0x30
movwf PORTB
call en_com
movlw 0x20
movwf PORTB
call en_com
return
conf: movlw 0x20
movwf PORTB
call en_com
movlw 0x00
movwf PORTB
call en_com
movlw 0x00
movwf PORTB
call en_com
movlw 0xC0
movwf PORTB
call en_com
movlw 0x00
movwf PORTB
call en_com
movlw 0x60
movwf PORTB
call en_com
return
en_com: bcf PORTA,1
bsf PORTA,0
nop
bcf PORTA,0
movlw .2
call delay
return
en_dat: bsf PORTA,1
bsf PORTA,0
nop
bcf PORTA,0
call T050us
return
T050us: movlw .15
movwf PDel0
DLoop3: decfsz PDel0,1
goto DLoop3
return
T200us: movlw .65
movwf PDel0
DLoop2: decfsz PDel0,1
goto DLoop2
return
delay: movwf PDel1
nop
DLoop0: movlw .249
movwf PDel0
DLoop1: nop
decfsz PDel0,1
goto DLoop1
decfsz PDel1,1
goto DLoop0
return
rsi: retfie
end;**************************************************************
;* *
;* Ensamblador para microcontroladores MPASM *
;* *
;* NOMBRE : PICpwm.asm *
;* OBJETIVO: Modulador de ancho de pulso PWM utilizando la *
;* interrupcion externa del PIC16F84A. El modulador *
;* cuenta con un par de entradas que se encargan de *
;* el incremento y decremento del pulso. *
;* *
;* AUTOR : antonio gauss *
;* EMAIL : agauss@todopic.zzn.com *
;* *
;**************************************************************
title "PIC16F84A, PICpwm.asm"
list p=16f84a, f=inhx8m
#include <p16f84a.inc>
__config _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
TMR0 equ 0x01
STATUS equ 0x03
PORTB equ 0x06
INTCON equ 0x0B
STEMP equ 0x10
WTEMP equ 0x11
ACCA equ 0x12
ACCC equ 0x13
PDelT equ 0x14
org 0x00
goto inicio
org 0x04
goto rsi
org 0x05
inicio: bsf STATUS,RP0
movlw 0xF7
movwf PORTB
bcf TMR0,6
bcf STATUS,RP0
movlw 0x90
movwf INTCON
movlw 0x7F
movwf ACCA
main: movf ACCA,0
movwf ACCC
bsf PORTB,3
call delay
movf ACCA,0
sublw 0xFF
movwf ACCC
bcf PORTB,3
call delay
goto main
delay: movf ACCC,0
movwf PDelT
DLoop: nop
decfsz PDelT,1
goto DLoop
return
IncDut: incf ACCA,1
movlw 0xFF
xorwf ACCA,0
btfss STATUS,Z
return
movlw 0xFE
movwf ACCA
return
DecDut: decf ACCA,1
btfss STATUS,Z
return
movlw 0x01
movwf ACCA
return
rsi: btfss INTCON,1
retfie
movwf WTEMP
swapf STATUS,0
movwf STEMP
start: btfss PORTB,1
call IncDut
btfss PORTB,2
fin: call DecDut
swapf STEMP,0
movwf STATUS
swapf WTEMP,1
swapf WTEMP,0
bsf INTCON,4
bcf INTCON,1
retfie
end
----------------------------------------------------------------------
Debug build of project `C:\Nueva carpeta\listo.mcp' started.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Sun Dec 15 22:27:31 2013
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p18F452 "listo.asm" /l"listo.lst" /e"listo.err" /o"listo.o" /d__DEBUG=1
Message[301] C:\PROGRAM FILES\MICROCHIP\MPASM SUITE\P16F887.INC 33 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[113] C:\NUEVA CARPETA\LISTO.ASM 435 : Symbol not previously defined (Run2)
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Nueva carpeta\listo.mcp' failed.
Language tool versions: MPASMWIN.exe v5.37, mplink.exe v4.37, mplib.exe v4.37
Preprocessor symbol `__DEBUG' is defined.
Sun Dec 15 22:27:32 2013
----------------------------------------------------------------------
BUILD FAILED
El unico error que te da es este:
Error[113] C:\NUEVA CARPETA\LISTO.ASM 435 : Symbol not previously defined (Run2)
Si haces doble cilck sobre ese error te llevara a la linea de codigo donde esta, te dice que no has definido esa variable "Run2"
Aparte de esa tabla que como te dice BrunoF es muy larga, si lo estas migrando de un 16f84 a un 16f887, debes poner los puertos A y B como digitales:
BANKSEL ANSEL
clrf ANSEL ; PORTA I/O digitales
clrf ANSELH ; PORTB I/O digitales
MOVF 12h,0 ;Move file 12h to W
MOVWF 11h ;Move W to file 11h
MOVF 13h,0 ;Move file 13h to W
MOVWF 12h ;Move W to file 12h
MOVF 14h,0 ;Move file 14h to W
MOVWF 13h ;Move W to file 13h
MOVF 15h,0 ;Move file 15h to W
MOVWF 14h ;Move W to file 14h
Que apunta a direcciones no validas como GPR(general purpose RAM) en el 16F877 y hay que modificar todas a mano. Bastante tedioso y propenso a cometer errores.
pues a mi me gustaria tener las simulaciones en proteus del ejemplo 8 y 9 pero los enlaces están malos, o mas bien los archivos están corruptos o algo por el estilo, ya que los descargo pero no se abren con winrar ni winzip.es verdad estoy viendo la instruccion COMF y este ejemplo me sirvio, pero no pude ver su simulacion, como voy empezando es algo dificil quisiera saber si pudiste conseguir la simulacion en proteus, ojala puedan ayudarme Gracias. :(
saludos.
Aqui va el ejemplo 01:
Prender un led con un 16F84A por RB0, de lo mas sencilloCódigo: ASM
; 02-06-06 ; Ejemplo 01 ; Prender un led ; PIC 16f84a ; MPLAB 7.30 ; PROTEUS 6.9 SP3 ; Veguepic LIST P=16F84A, ; usar PIC 16F84A #include <p16f84A.inc> __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off ; power up timer on ; watchdog off ; osc XT ORG 0 BSF STATUS,5 ; activa la pagina 1 MOVLW B'00000' ; carga 00000 en W MOVWF TRISA ; puerto a todos salidas MOVLW B'00000000' ; carga 00000000 en W MOVWF TRISB ; puerto b todos salidaS BCF STATUS,5 ; volvemos a la pagina 0 BCF PORTB,0 ; ponemos a 0 RB0 BCF PORTB,1 ; ponemos a 0 RB1 BCF PORTB,2 ; ponemos a 0 RB2 BCF PORTB,3 ; ponemos a 0 RB3 BCF PORTB,4 ; ponemos a 0 RB4 BCF PORTB,5 ; ponemos a 0 RB5 BCF PORTB,6 ; ponemos a 0 RB6 BCF PORTB,7 ; ponemos a 0 RB7 ; luego haremos todos juntos INICIO ; etiqueta BSF PORTB,0 ; pone a 1 RB0 GOTO INICIO ; va a inicio END ; fin de programa