Autor Tema: Picbasic pro  (Leído 2072 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Sidao

  • PIC10
  • *
  • Mensajes: 17
Picbasic pro
« en: 27 de Marzo de 2004, 08:46:00 »
Caros amigos.
 Tenho um programa em assembler ( 3K )
que tentei inserir junto com outro comandos em basic usando Pbp.
Foi gerado o arquivo Hex e gravado no Pic.
Porém só os comandos em basic funcionam. É como se o assembler não existisse!
Se alguem puder ajudar ficaria grato.
Sidinei

Desconectado LuisFrino

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 140
    • Electronica Microcontroladores Ilumunacion Decorativa
RE: Picbasic pro
« Respuesta #1 en: 27 de Marzo de 2004, 11:05:00 »
Hola
los comandos hechos en ensamblador es conveniente  ponerlos  en subrutinas y luego cuando hace falta hacerl el llamado a esa subrutina en codigo ensamblador

por lo menos a mi me soluciono muchos problemas

otra cosa muy importante es que los comandos en ASM
deben ir en el lugar correcto hay que tener mucho cuidado en el orden que se colocan
suerte
Luis
 

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
RE: Picbasic pro
« Respuesta #2 en: 03 de Agosto de 2004, 02:37:00 »
Hola,

A ver si entendí:
Mencionas que tus programas en ensamblador, al ser llamados en Basic no funcionan (¿o no existen? Perdón, casi no entiendo).

Si esta es la cuestión, permíteme hacerte esta sugerencia:

Cuando uno crea un programa en Basic (con el PicBasic Pro Compiler) y combina ensamblador, el compilador no sabrá que el ensamblador existe, es decir que el compilador deja de hacer su trabajo (compilar) cuando se el dice que se insertarán línas de ensamblador.

Si tú deseas que el programa en Basic tenga acceso a los registros creados en ensamblador, deberás crear las variables desde el inicio y de preferencia definirlas en un registro específico para que puedas utilizarlas después en tu programa.

Aquí se te muestra un ejemplo de lo que se menciona; el programa es para habilitar una interrupción en un PIC16F872
La interrupción es la externa en el puerto B, bit 0.


@ DEVICE XT_OSC,LVP_OFF,WDT_OFF,PROTECT_OFF

led    VAR PORTB.0

reg VAR BYTE $40 system

wsave    VAR BYTE $20 system
wsave1    VAR BYTE $A0 system
ssave    VAR BYTE bank0 system
psave   VAR BYTE bank0 system
 
 
DEFINE INTHAND ISR

"***** Rutina de Interrupción *****

Asm

; Salvando W, STATUS y PCLATH

ISR     bcf     INTCON,GIE      ; desabilitando las interrupciones
          btfsc   INTCON,GIE      ; asegurando la desactivación
          GoTo    ISR            

          movwf   wsave            ; salvando W
          swapf   STATUS,W       ; STATUS->W
          clrf    STATUS               ; regresando al banco cero
          movwf   ssave             ; salvando STATUS
          movf    PCLATH            ; PCLATH->W
          movwf   psave             ; salvando PCLATH
          clrf    PCLATH               ; regresando a la página 0

 EndAsm
 
"aqui pones lo que quieras

led = 1
Pause 1000
led = 0
Pause 1000

"en basic


Asm

 ;*** Regresando W, STATUS y PCLATH (originales) ***
 
fInt     movf    psave,W              ;PCLATH (original)->W
           movwf   PCLATH              ; W->PCLATH
          swapf   ssave,W               ; STATUS (original)->W
          movwf   STATUS                ; W->STATUS
          swapf   wsave,F               ; Regresando W original
          swapf   wsave,W              ; antes de la interrupción
          bcf     option_reg,intedg   ; borrando la(s) bandera(s) de interrución
          incf            reg

        RETFIE                     ; Reactiva las interrupciones

EndAsm



inicio:   

TRISB = 0  
reg = 0
INTCON = %10010000   "habilitando las interrupciones
option_reg = %01000000   "habilitando interrupción



Como puedes observar, el registro reg es definido fuera del código de ensamblador, y sí funciona.

Lo único malo es que deberás crear las variables que necesites del programa de ensamblador para poder accesar y procesar esa información.

Espero que se te haya ayudado.

Mario
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee


 

anything