Seria bueno un ejemplito con los modos de direccionamiento (Access, Banked) me quedaron unas dudas :?
KILLERJC no seas flojo y haz un tutorial de ASM, tanto de PIC como de ARM, el público te lo pide :D :D (yo en particular el de ARM xd)
y un tutorial de las comunicaciones, spi,i2c,uart con los pic18 en asm seria bueno
¿Sobre que exactamente lo de PIC? Ya hay un hilo explicando ASM:
http://www.todopic.com.ar/foros/index.php?topic=23623.0
Lo unico que puedo llegar a hacer es crear o agregarle una parte a eso, tales como algunas directivas para el posicionamiento de las variables,etc.
Sobre ARM tendras que esperar xD, todavia no termino con dsPIC, aunque ya tengo escrito una buena parte para agregar a lo dsPIC y finalizar con eso.
Para no complicarla demasiado voy a hacer un codigo mas que es la raiz cuadrada de un numero con el dsPIC y fuerza bruta y de alli me mudo Razz
A mi lo de Pic me da igual, lo he puesto por solidarizarme con los demás, pero me importa un pimiento lol lol
Yo llevos años programando y trabajando con los pic
Yo llevos años programando y trabajando con los pic, asi que te agradesco que no desvies del tema al maetro KILLEJC, sino te voy a colgar de la orejas lol lol lol
Asi que haz tu cola (fila) lol lol
CODEPAGE NAME=page START=0x0 END=0x7FFF
CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED#IFDEF _EXTENDEDMODE
DATABANK NAME=gpre START=0x0 END=0x5F
#ELSE
ACCESSBANK NAME=accessram START=0x0 END=0x5F
#FIDATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7FF
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTEDNombre seccion: udata_acs Direccion
Nombre seccion: udata DireccionNombre Direccion
Var1 0x00
Var2 0x01
Buff 0x02-0x09
V1 0x89
V2 0x8A
V3 0x8B
BVar1 0x500
BVar2 0x501
BVar3 0x502 0010 01da ffff ffff Var1 = 0x10 - 1era instruccion
Var1 = 0x20 - 2da instruccion
LATA = 0x10 - 3era instruccion Var1(0x000) = 0x10
BVar1(0x500) = 0x10
V1(0x089) = 0x10 Var1(0x00) = 0x10
Var1(0x00) = 0x20 Var1 (0x000) = 0x10
V1 (0x089) = 0x10
BVar1 (0x500) = 0x10 Memoria 0x300 = 0x10
Memoria 0x301 = 0x20
LATA = 0x10Le dije al linker que tengo 4 variables en el ACCESBANK, entonces el linker decidio de ponerlos en la direccion 0x00, luego a los demas le di direccion de memoria y asi quedaron:Lo siento no encuentro lo de la memoria de datos para poder visualizar el ejemplo, solo encuentro Program Memory, o tengo que añadir estas lineas al Linker, de ser asi ¿Donde?Código: [Seleccionar]Nombre Direccion
Var1 0x00
Var2 0x01
Buff 0x03-0x08
V1 0x89
V2 0x8A
V3 0x8B
BVar1 0x500
BVar2 0x501
BVar3 0x502
Esto puedo verlo en la memoria de datos cuando lo este simulando. Ahora vamos a ver que pasa con cada instruccion que agregamos, el OPCODE de la instruccion ADDWF f,d,a es
A mi lo de Pic me da igual, lo he puesto por solidarizarme con los demás, pero me importa un pimiento :D :D YO QUIERO ARM, QUE NUNCA HE HECHO NADA DE ASM EN ARM :D :D Y CUANDO MIGRE SERÁ CON TODAS LAS DE LA LEY :D
así que bueno me esperaré :mrgreen: :mrgreen:
; Udata - Data no inicializadaNo deberia comensar en 0x66 en vez de 0x66?
; Comienza en 0x60 si es que no coloco una direccion
; Lo acomoda solo el linker, basta de renegar con CBLOCKS
Bank0: udata 0x66
V1: res 1
V2: res 1
V3: res 1
Muy buena y nutrida información, lo que me genero muchas dudas :(Hola RALF2 por lo que yo entiendo el Banco 0 empieza en la posición 060h y termina en la 0FFh y el con udata 0x66 le esta diciendo que posicione la variable V1 en la posición 0x66
Primero no entiendo como funciona bien lo del linker :oops:
El cblock, porque no debe utilizarse?, sera porque solo sirve para declarar constantes que luego no pueden ser modificadas en el programa?
No soy experto en asm, de hecho llevo años que no lo toco solo conozco lo basico de la serie pic16xxxx.
Ahora bien ando un poco atareado estos dias, asi que voy a leer bien todo para poder hacer mis preguntas que las tengo jijji.
Otra cocita:Citar; Udata - Data no inicializadaNo deberia comensar en 0x66 en vez de 0x66?
; Comienza en 0x60 si es que no coloco una direccion
; Lo acomoda solo el linker, basta de renegar con CBLOCKS
Bank0: udata 0x66
V1: res 1
V2: res 1
V3: res 1
Y como un aporte mio a lo que coloco el amigo KILLERJC (no le podia dejar todo el trabajo a el :mrgreen:)
Les coloco esto (https://www.youtube.com/watch?v=rpeyJaa0oBQ), que aclara algunas cosas hechas por el amigo ;-)
Saludos
le estas diciendo que se posiciona Var1 en 0x00, Var2 0x01 y Buff 0x02 pero aquí estas diciendo que Buff empieza en 0x03 ¿No deberia de ser 0x02 y termina en 0x09?Este es un error mio, habia puesto 4 variables en cada seccion, y encima solo uso 1. resulto que tenia Var1,Var2,Var3 y Buff, luego borre, pero me olvide cambiarle eso, como todas las demas variables como V4 y BVar4 estaban al ultimo no tuve problemas con los otros. Pero ese se me salto.
lo mismo ocurre con V1:Otro de mis cambios en el medio del programa para ver si realmente ocurria, elegi primero el 0x66 por que vi un SFR en 0xF66 resulto luego que ese registro no se puede escribir, y termine buscando otro. el cual es el LATx que comienzan de 0x89, crei haber cambiado todos los valores. Como es un pedazo de texto un poquito grande.. se me paso realmente.
Muy buena y nutrida información, lo que me genero muchas dudas Sad
Primero no entiendo como funciona bien lo del linker Embarassed
El cblock, porque no debe utilizarse?, sera porque solo sirve para declarar constantes que luego no pueden ser modificadas en el programa?
No soy experto en asm, de hecho llevo años que no lo toco solo conozco lo basico de la serie pic16xxxx.
Ahora bien ando un poco atareado estos dias, asi que voy a leer bien todo para poder hacer mis preguntas que las tengo jijji.
Otra cocita:
No deberia comensar en 0x60 en vez de 0x66?
Hola RALF2 por lo que yo entiendo el Banco 0 empieza en la posición 060h y termina en la 0FFh y el con udata 0x66 le esta diciendo que posicione la variable V1 en la posición 0x66
Veamos a ver sino estoy equivocado:CitarHola RALF2 por lo que yo entiendo el Banco 0 empieza en la posición 060h y termina en la 0FFh y el con udata 0x66 le esta diciendo que posicione la variable V1 en la posición 0x66
El banco 0 va de 0x000 a 0x0FF, pero en lo que respecta al access bank se utiliza los bytes que van desde 0x000 a 0x05F, la posicion 0x061 corresponderia a banco 0 tambien, pero para poder acceder a ella hay que utilizar el bank select (pag. 66 del data sheet).
"/opt/microchip/mplabx/v3.10/mpasmx/mpasmx" -q -p18f2550 -u -l\"build/default/production/configuration.lst\" -e\"build/default/production/configuration.err\" -y -o\"build/default/production/configuration.o\" \"configuration.asm\" "/opt/microchip/mplabx/v3.10/mpasmx/mpasmx" -q -p18f2550 -u -l\"build/default/production/main.lst\" -e\"build/default/production/main.err\" -y -o\"build/default/production/main.o\" \"main.asm\" "/opt/microchip/mplabx/v3.10/mpasmx/mplink" "/opt/microchip/mplabx/v3.10/mpasmx/LKR/18f2550_g.lkr" -p18f2550 -w -m"dist/default/production/PIC18asm.X.production.map" -u_EXTENDEDMODE -z__MPLAB_BUILD=1 -odist/default/production/PIC18asm.X.production.cof build/default/production/main.o build/default/production/configuration.oMP2HEX 5.08, COFF to HEX File Converter
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors : 0 Line Address Opcode Label DisAssy
1 0000 EF0D GOTO 0x1A
2 0002 F000 NOP
3 0004 0000 NOP
4 0006 FFFF NOP
5 0008 0012 RETURN 0
6 000A 0E10 _Suma MOVLW 0x10
7 000C 2600 ADDWF Var1, F, ACCESS
8 000E 0012 RETURN 0
9 0010 FFFF NOP
10 0012 FFFF NOP
11 0014 FFFF NOP
12 0016 FFFF NOP
13 0018 0012 RETURN 0
14 001A EC05 Main CALL 0xA, 0
15 001C F000 NOP
16 001E 0000 NOP
17 0020 0E78 MOVLW 0x78
18 0022 1202 IORWF Var3, F, ACCESS
19 0024 0000 NOP
20 0026 EF13 _.org_1_0026 GOTO 0x26 Address Symbol Hex Decimal Binary Char
000 Var1 0x00 0 00000000 '.'
001 Var2 0x00 0 00000000 '.'
002 Var3 0x00 0 00000000 '.' SYMBOL TABLE
LABEL VALUE
Main 0000001A
Var1 00000000
Var2 00000001
Var3 00000000
_.org_1_0026 00000026
_Suma 00000000
__18F2550 00000001SYMBOL TABLE
LABEL VALUE
Var1 00000000
Var3 00000000
_Suma 00000000
__18F2550 00000001ifdef __18F2550
Hacer algo
endif
ifdef __16F628A
Hacer otra cosa
endifLOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list
00002 ;************************************************
00003 ; Definicion de variables
00004 ;************************************************
00005
0000 00006 global Var1
0000 00007 extern _Suma, Var3
00008
00009 Bank0: udata_acs
000000 00010 Var1: res 1
000001 00011 Var2: res 1
00012
00013 ;************************************************
00014 ; Vectores de reset e interrupcion
00015 ;************************************************
00016
00017 Rst: code 0x00 ;Vector de Reset
000000 EF?? F??? 00018 GOTO Main
00019
00020 org 0x08 ;Vector de Interrupcion Alta Prioridad
000008 0012 00021 RETURN
00022
00023 org 0x18 ;Vector de Interrupcion Baja Prioridad
000018 0012 00024 RETURN
00025
00026 ;************************************************
00027 ; Programa Principal
00028 ;************************************************
00001A 00029 Main:
00001A EC?? F??? 00030 CALL _Suma
00001E 0000 00031 NOP
000020 0E78 00032 MOVLW 0x78
000022 12?? 00033 IORWF Var3
000024 0000 00034 NOP
000026 EF?? F??? 00035 GOTO $ ;Loop infinito
00036
00037 ;----------- Fin de programa ---------------------
00038 ENDauxiliar.lstLOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001
00002 ;************************************************
00003 ; Mas variables Wiii
00004 ;************************************************
00005
00006 ; Externo lo de afuera, y global para que los demas lo vean
0000 00007 extern Var1
0000 00008 global _Suma, Var3
00009
00010 udata_acs
000000 00011 Var3: res 1
00012
00013
00014 ;************************************************
00015 ; CODIGOOOOOOOOOOOOOOOOOO
00016 ;************************************************
00017 code
00018
000000 00019 _Suma:
000000 0E10 00020 MOVLW 0x10
000002 26?? 00021 ADDWF Var1
000004 0012 00022 RETURN
00023
00024
00025 ; Fin del archivo
00026
00027 END Section Info
Section Type Address Location Size(Bytes)
--------- --------- --------- --------- ---------
Rst code 0x000000 program 0x000004
.cinit romdata 0x000004 program 0x000002
.org_0 code 0x000008 program 0x000002
.code code 0x00000a program 0x000006
.org_1 code 0x000018 program 0x000012
.config_300000_BUILD/DEFAULT/PRODUCTION/CONFIGU romdata 0x300000 program 0x000001
...........................................................
.config_30000D_BUILD/DEFAULT/PRODUCTION/CONFIGU romdata 0x30000d program 0x000001
Bank0 udata 0x000000 data 0x000002
.udata_acs udata 0x000002 data 0x000001 Program Memory Usage
Start End
--------- ---------
0x000000 0x000005
0x000008 0x00000f
0x000018 0x000029
0x300000 0x300003
0x300005 0x300006
0x300008 0x30000d
44 out of 33048 program addresses used, program memory utilization is 0% Symbols - Sorted by Name
Name Address Location Storage File
--------- --------- --------- --------- ---------
Main 0x00001a program static /home/x/workspace/MPLAB/PIC18asm.X/main.asm
_.org_1_0026 0x000026 program static /home/x/workspace/MPLAB/PIC18asm.X/main.asm
_Suma 0x00000a program extern /home/x/workspace/MPLAB/PIC18asm.X/auxiliar.asm
Var1 0x000000 data extern /home/x/workspace/MPLAB/PIC18asm.X/main.asm
Var2 0x000001 data static /home/x/workspace/MPLAB/PIC18asm.X/main.asm
Var3 0x000002 data extern /home/x/workspace/MPLAB/PIC18asm.X/auxiliar.asm Section Type Address Location Size(Bytes)
--------- --------- --------- --------- ---------
Rst code 0x000000 program 0x000004
.cinit romdata 0x000004 program 0x000002
.org_0 code 0x000008 program 0x000002
.org_1 code 0x000018 program 0x000002
.code code 0x00001a program 0x000016
.config_300000_BUILD/DEFAULT/PRODUCTION/CONFIGU romdata 0x300000 program 0x000001
.udata_acs udata 0x000000 data 0x000003make[2]: *** [dist/default/production/PIC18asm.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
MPLINK 5.08, LINKER
Error - could not find definition of symbol 'Var1' in file 'build/default/production/auxiliar.o'.
Errors : 1Error - section 'Bank0' can not fit the absolute section. Section 'Bank0' start=0x0000005f, length=0x00000002
Errors : 1Warning[207] /home/fabian/workspace/MPLAB/PIC18asm.X/main.asm 34 : Found label after column 1. (IOXWF)
Error[122] /home/fabian/workspace/MPLAB/PIC18asm.X/main.asm 34 : Illegal opcode (Var3)Error - Error reading object file 'build/default/production/main.o'
Errors : 1Warning[207] /home/fabian/workspace/MPLAB/PIC18asm.X/main.asm 34 : Found label after column 1. (IOXWF)
Error[122] /home/fabian/workspace/MPLAB/PIC18asm.X/main.asm 34 : Illegal opcode (Var3)oye killer puedes poner un programa con un pic18 para que se comunique con cualquier modulo bluethoot y lo de mandar los caracteres asci
gracias killer, igual en el trabajo no me dejan programar en asembler todo es en c