TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman en 11 de Julio de 2007, 11:46:19
-
hola,quiero hacer un programa en asm,para pasar sms modo texto a sms modo pdu.
aqui tengo una direccion para pasar texto a pdu.
http://www.dreamfabric.com/sms/hello.html
pero alguien sabe como se pasa al contrario?
el programa lo hare con instrucciones de rotacion,creo que es como se debe hacer.
-
hola,quiero hacer un programa en asm,para pasar sms modo texto a sms modo pdu.
aqui tengo una direccion para pasar texto a pdu.
http://www.dreamfabric.com/sms/hello.html
pero alguien sabe como se pasa al contrario?
el programa lo hare con instrucciones de rotacion,creo que es como se debe hacer.
Complicado lo que propones... o más que complicado "laborioso" diría yo...
He hecho cosas en PDU pero en formato binario (8 bits) y te digo que no son la panacea ni mucho menos...
Realmente lo tedioso del tema hace que uno se replantee hacerlo en C.
-
ya,lo que pasa es que no se c.
y a lo peor si se hace en c,pudiera ser que consumiera muchos recursos.
lo que pasa es que no he visto manuales para pasar formato pdu a formato texto,sabrias decirme de alguna direccion?
gracias.
-
ya,lo que pasa es que no se c.
y a lo peor si se hace en c,pudiera ser que consumiera muchos recursos.
Bueno, si tu aplicación es muy minimalista estarías en lo cierto, ahora si haces bien las cosas en C y usas un buen compilador el código en exceso se compensaría con las horas/días que ahorrarías aunque si no sabes C, el concepto no aplica :)
lo que pasa es que no he visto manuales para pasar formato pdu a formato texto,sabrias decirme de alguna direccion?
No, no he visto nada que diga como hacer el pasaje, simplemente creo que hay que deducir como hacerlo, luego probar al revés (pasar de pdu a texto) y ver si quedó el texto bien conformado.
-
je je ,la regla de tres.pues lo intentare.pero me queda tela hasta que solucione mi primer problema,pasar modo texto a pdu.
pero me gustan las metas,si lo consigo ya lo posteare.haber si entre todos hacemos una gran biblioteca de asm. :-)
-
je je ,la regla de tres.pues lo intentare.pero me queda tela hasta que solucione mi primer problema,pasar modo texto a pdu.
pero me gustan las metas,si lo consigo ya lo posteare.haber si entre todos hacemos una gran biblioteca de asm. :-)
¡Lejos de quererte desmotivar! solamente te quería mostrar un camino más simple, elegante y portable como es hacerlo en C. Soy amante del ASM pero para algunos proyectos ya no lo uso por las razones antes mencionadas.
Me parece muy bien que te gusten los desafíos y le dediques tiempo y esfuerzo a sacarlo adelante a tu proyecto!
-
groundman, encontré este texto donde muestran 'gráficamente' como se haría la conversión!
http://mobileforensics.files.wordpress.com/2007/06/understanding_sms.pdf
Espero te sirva
-
muchas gracias,mirare haber como creo el asm de conversion,pero creo que me va a costar bastante.
mas que na,por el tiempo.que cada dia nos faltan mas horas para realizar todo lo que queremos hacer. :)
-
mas que na,por el tiempo.que cada dia nos faltan mas horas para realizar todo lo que queremos hacer. :)
Exacto, es que hoy en día de eso se trata... de ahorrar tiempo. El tiempo es más caro que los kb de flash... :)
-
por fin lo termine,me ha costado tela marinera.
cuando he estudiado el sistema,me he dado cuenta de que solo es una compresion de datos.
lo que hace es convertir 8 bytes de 7 bit utiles,en 7 bytes de 8 bit utiles al comprimir.
y 7 bytes de 8 bit utiles en 8 bytes de 7 bit utiles al descomprimir.y digo utiles porque en el alfabeto de 7bit para sms;
solo se utilizan los 7 bit de menos peso.
esta es la direccion del alfabeto de 7bit para sms
http://www.dreamfabric.com/sms/default_alphabet.html
y a cuntinuacion posteo los programas en asm.
por si a alguien les puede servir,y ya que cada uno lo modifique a su gusto o combeniencia. :-)
-
;*****************************************groundman ************************
; PROGRAMA : texto-pdu.asm
; Funcion : pasar texto sms a pdu
;
;
; Revision : 1.0 7/2/2002 Programa para : PIC16F876
; CPU Clock : 4 MHz Reloj instruccion : 1 MHz = 1 us
; WDT : Deshabilitado Tipo de reloj : XT
; Code Prot : OFF
;****************************************************************************
;ESTE PROGRAMA COMBIERTE LOS CARACTERES ALFABETICOS DE 7 BIT,A FORMATO PDU
;****************************************************************************
LIST P=16F876 ;Se indica el modo de procesador
RADIX HEX ;Sistema de numeracion hexadecimal
INCLUDE <P16f876.inc> ;se incluye la definicion de los
;registros internos
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF
ERRORLEVEL -302
CONT EQU 20h
TEMP_CONT EQU 21h
KEY_1 EQU 22h
SECTOR_000 MACRO
BCF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_100 MACRO
BSF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_200 MACRO
BCF PCLATH,0
BSF PCLATH,1
ENDM
SECTOR_300 MACRO
BSF PCLATH,0
BSF PCLATH,1
ENDM
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
goto INICIO ;Va a la primera instruccion del
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO call TRASPASS
movlw 0x30
movwf FSR
DESCOMP clrf CONT
movf INDF,w
xorlw .0 ;comprueva si hay algun dato
btfsc STATUS,Z
sleep ;fin del programa,poner aqui a donde queremos que salte o un return
incf CONT,F
PROG incf CONT,f
PROG2 movf CONT,W
movwf TEMP_CONT
PROG3 decfsz TEMP_CONT,F
goto IZQUIER
movf CONT,W
movwf TEMP_CONT
PROG4 decfsz TEMP_CONT,F
goto BLOKE
incf FSR,F;call SUBE
xorlw .8
btfss STATUS,Z
goto PROG
incf FSR,F;call SUBE
goto DESCOMP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<BLOKE DE ROTACIONES>>>>>>>>>>>>>>>>>>>>>>>>>>>
BLOKE incf FSR,F
rrf INDF,F
decf FSR,F
rrf INDF,F
goto PROG4;return
IZQUIER rlf INDF,F
goto PROG3
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TRASPASO DATOS A LA RAM>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TRASPASS movlw 0x30 ;direccion donde empieza a pasar los datos
movwf FSR
CONTIN call TEXTO
movwf INDF
xorlw .0 ;si encuentra este caracter,termina de leer.
btfsc STATUS,Z
return ;goto PROSIGUE
incf KEY_1,F
incf FSR,F
goto CONTIN
;<<<<<<-----------------LISTA DEL TEXTO A CONVERTIR ------------------->>>>>>
;si introducimos muchas cadenas de texto,deveremos tener cuidado de no pasar
;de la direccion 1FF,en tal caso deveremos crear otra tabla ejm.
; org 0x200
;TEXTO2 SECTOR_200
;y luego lo mismo que en la tabla anterior,excepto los datos que queramos introducir
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=================================>>>>>>>>>>>>>>>>>>>
org 0x100
TEXTO SECTOR_100
movf KEY_1,W
addwf PCL,F
retlw .104 ;h
retlw .101 ;e
retlw .108 ;l
retlw .108 ;l
retlw .111 ;o
retlw .104 ;h
retlw .101 ;e
retlw .108 ;l
retlw .108 ;l
retlw .111 ;o
retlw .0 ;FIN DE TABLA
end
-
;*****************************************groundman *******
; PROGRAMA : texto-pdu.asm
; Funcion : pasar pdu a texto sms
;
;
; Revision : 1.0 7/2/2002 Programa para : PIC16F876
; CPU Clock : 4 MHz Reloj instruccion : 1 MHz = 1 us
; WDT : Deshabilitado Tipo de reloj : XT
; Code Prot : OFF
;**********************************************************
;ESTE PROGRAMA DESCOMPRIME LOS DATOS PDU A FORMATO TEXTO PARA SMS
LIST P=16F876 ;Se indica el modo de procesador
RADIX HEX ;Sistema de numeracion hexadecimal
INCLUDE <P16f876.inc> ;se incluye la definicion de los
;registros internos
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF
ERRORLEVEL -302
KEY_1 EQU 20h
TEMP EQU 21h
TEMP_FSR EQU 22h
CONT EQU 23h
SECTOR_000 MACRO
BCF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_100 MACRO
BSF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_200 MACRO
BCF PCLATH,0
BSF PCLATH,1
ENDM
SECTOR_300 MACRO
BSF PCLATH,0
BSF PCLATH,1
ENDM
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
goto INICIO ;Va a la primera instruccion del programa
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO call TRASPASS
clrf INDF ;borra el byte de fin de tabla
movlw 0x2A ;16 bytes mas abajo de la direccion donde
movwf TEMP_FSR ;hemos metido la tabla
;<<<<zona donde calculamos e introducimos el valor del byte en blanco "byte ocavo">>>>>>>>>>
DESCOMP movlw .5
movwf CONT
movlw .6
addwf TEMP_FSR,F ;situate en el primer Byte
movf TEMP_FSR,W
movwf FSR
movlw .6
addwf FSR,F
movf INDF,W
incf FSR,F
movwf INDF
movlw .7
subwf FSR,F
movf INDF,w
xorlw 0X00 ;termina si no hay mas datos
btfsc STATUS,Z
sleep ;fin del programa,poner aqui a donde queremos que salte o un return
;<<<<<<programa principal,donde se realizan la mayor parte de las instruciones>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<de rotacion para el calculo de la descompresion>>>>>>>>>>>>>>>>>>>>>>>>>>
movlw .6
movwf TEMP
call REP_IZQ_UP
PROG movf CONT,W
movwf TEMP
call REP_BAJA
movf CONT,W
movwf TEMP
call REP_IZQ_UP
decfsz CONT,F
goto PROG
rlf INDF,F
call REMETE
incf TEMP_FSR,f
incf TEMP_FSR,f
goto DESCOMP
REP_IZQ_UP rlf INDF,F
RPE2 incf FSR,F
rlf INDF,F
decfsz TEMP,F
goto RPE2
return
REP_BAJA decf FSR,F
decfsz TEMP,F
goto REP_BAJA
return
;<<<<<<<<<<<<REMETE UN PASO HACIA LA DERECHA DEL CONJUNTO DE 8 Bytes >>>>>>>>>>>>>>>
REMETE incf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
bcf STATUS,C
rrf INDF,F
decf FSR,F
return
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TRASPASO DATOS A LA RAM>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TRASPASS movlw 0x30 ;direccion donde empieza a pasar los datos
movwf FSR
CONTIN call TEXTO
movwf INDF
xorlw 0XFF ;si encuentra este valor,termina de leer.
btfsc STATUS,Z
return
incf KEY_1,F
incf FSR,F
goto CONTIN
;<<<<<<-----------------LISTA DEL TEXTO A CONVERTIR ------------------->>>>>>
;si introducimos muchas cadenas de texto,deveremos tener cuidado de no pasar
;de la direccion 1FF,en tal caso deveremos crear otra tabla ejm.
; org 0x200
;TEXTO2 SECTOR_200
;y luego lo mismo que en la tabla anterior,excepto los datos que queramos introducir
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=================================>>>>>>>>>>>>>>>>>>>
;ademas cada 7 Bytes pondremos un byte con valor 0x00 para que cuando descomprimamos
;los datos este lugar nos sirva para el dato resultante de la descompresion
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
org 0x100
TEXTO SECTOR_100
movf KEY_1,W
addwf PCL,F
retlw 0XE8 ;primer grupo
retlw 0X32
retlw 0X9B
retlw 0XFD
retlw 0X46
retlw 0X97
retlw 0XD9
retlw 0X00 ;fin del grupo
retlw 0XEC ;segundo grupo
retlw 0X37
;aqui no hace falta el valor 00h ya que tenemos espacio de sobra,o almenos aseguraros de que lo hay
retlw 0XFF ;fin de tabla
end
-
soft flt.recivi tu privado. pero prefiero contestar en el hilo de lo que necesitas.por si las respuestas pueden servir a otras personas.