Autor Tema: instruccion ASM  (Leído 4487 veces)

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

Desconectado pattylt

  • PIC10
  • *
  • Mensajes: 7
instruccion ASM
« en: 27 de Diciembre de 2005, 14:18:00 »
Bueno mi problema esta en lo siguiente necesito hacer un programa donde este acoplado el lenguaje assembler con PBP, estoy tratando con la instruccion ASM ENDASM, pero solo realiza parte del codigo, creo q tengo problemas en los goto en asm....alguien tendra alguna  informacion que me sea util??!!Llorando

P.D: el codigo en asm esta bueno.

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
RE: instruccion ASM
« Respuesta #1 en: 27 de Diciembre de 2005, 19:51:00 »
Claro preciosa pero debes de poner tu codigo para darte una ayudadita y con mucho gustoFumador

Desconectado pattylt

  • PIC10
  • *
  • Mensajes: 7
RE: instruccion ASM
« Respuesta #2 en: 29 de Diciembre de 2005, 10:20:00 »
ok amigo este es el programa, como lo estoy colocando en el MicroCode!



ASM
CONTCL      EQU   0X20
CONT      EQU   0X21
eedig1      EQU   0X22
eedig2      EQU   0X23
eedig3      EQU   0X24
eedig4      EQU   0X25
LOOP2      EQU   0X26
dig_temp    EQU   0X27   
dig4      EQU   0X28
LOOP1      EQU   0X29
DIG2      EQU   0X2A
DIG3      EQU   0X2B
DIG1      EQU   0X2D
LOOP3      EQU   0X2E


inicio   bsf   3,5
      movlw   7
      movwf   adcon1
      CLRF   PORTD
      MOVLW   B"010000"
      MOVWF   PORTA
      CLRF   PORTE
      CLRF   PORTC
      bcf       Status,rp0


      CLRF   PORTA
      CLRF   PORTB

      movlw   .3
      movwf   contcl      ;registro que cuenta los errores


   
lcd_inicio   call   p_lcd      ;configuracion del LCD
          call   cls
          movlw   .100      ;como no posee RW se debe esperar un tiempo
          movwf   cont
    dd      nop
          nop
          nop
          nop
          nop
          decfsz   cont,1
          b   dd
          call   d_on_ci_off    ;display on cursor off
          call   _2lineas      ;doble linea

mensaje      movlw   "I"          ;Mensaje por pantalla
          call   char          ;de petición de clave
          movlw   "N"            
          call   char
          movlw   "T"
          call   char
          movlw   "R"
          call   char
          movlw   "O"
          call   char
          movlw   "D"
          call   char
          movlw   "U"
          call   char
          movlw   "Z"
          call   char
          movlw   "C"
          call   char
          movlw   "A"
          call   char
          movlw   " "
          call   char
          movlw   "C"
          call   char
          movlw   "L"
          call   char
          movlw   "A"
          call   char
           movlw   "V"
          call   char
          movlw   "E"
          call   char         ;TERMINA EL PRIMER MENSAJE
          movlw   0xC6          ;segunda linea
          call   pos                ;rutina de comando al LCD
          movlw   .4
          movwf   cont   
      
      clrf   portb
   
      movlw   "1"   
      movwf   eedig1
      movlw   "2"
      movwf   eedig2
      movlw   "3"
      movwf   eedig3
      movlw   "4"
      movwf   eedig4

;rutina de reconocimiento de clave
         
no_hay   call   initb      ;configuracion del puerto B para teclado   
      call   detec      ;deteccion de tecla pulsada   
      movwf   tecla
      movlw   0xFF
      subwf   tecla,w
      btfss   status,z
      goto   no_hay
      call   codif
      movwf   tecla
      call   up_k
      movf   tecla,w
      movwf   dig_temp
         
lcd      call   P_LCD
      call   _2lineas      
      call   d_on_ci_off      
      movlw   b"00000110"      
      call   mod            
      MOVF   TECLA,W      ;colocacion en el LCD de la tecla presionada
      call   char
      decfsz   cont,f
      goto   preg
      movf   dig_temp,w
      movwf   dig4

      bsf   3,5
      movlw   b"10000111"
      movwf   option_reg
      bcf   3,5
   
      movlw   .3
      call   _2_seg
      goto   comp

preg      movlw   .3
      subwf   cont,w
      btfsc   status,z
      call   uno
      movlw   .2
      subwf   cont,w
      btfsc   status,z
      call   dos
      movlw   .1
      subwf   cont,w
      btfsc   status,z
      call   tres
      goto   no_hay

uno      movf   dig_temp,w
      movwf   dig1
      return
dos      movf   dig_temp,w
      movwf   dig2
      return
tres      movf   dig_temp,w
         movwf   dig3
         return

comp      call   p_lcd
      call   cls   
   
      movf   eedig1,w
      subwf   dig1,w
      btfss   status,z
      b   clave_inc
      movf   eedig2,w
      subwf   dig2,w
      btfss   status,z
      b   clave_inc
      movf   eedig3,w
      subwf   dig3,w
      btfss   status,z
      b   clave_inc
      movf   eedig4,w
      subwf   dig4,w
      btfss   status,z
      b   clave_inc

      goto   bueno

infi      b   infi

clave_inc   call   p_lcd
      call   cls   
      decfsz   contcl,1      
      b   lcd_inicio         

      goto   malo      ;Cae aquí a la tercera vez

inft      b   inft   

_10_ms      movlw   .100
      movwf   loop1
ss      movlw   .10
      movwf   loop2
ll      nop
      nop
      nop
      nop
      nop
      decfsz   loop2,f
      b   ll         
      decfsz   loop1,f
      b   ss
      return   

_2_seg      movlw   .200
      movwf   loop3
diez      call   _10_ms
      decfsz   loop3,f
      b   diez
      return      


malo      BSF   PORTA,1
      GOTO   MALO


BUENO      BSF   PORTA,2
      GOTO   BUENO      
   

;=============================================
;=================librerias

;==========================lcd=============

   cblock   0x40
   var3
   var4
   endc

p_lcd   bsf   status,5
   clrf   portb
   clrf   portc
   bcf   status,5
   return

cls   movlw   0x01
   call   control
   return

pos   call   control   
   return

mod   call   control
   return

d_on_ci_off   movlw   b"00001100"
      call   control
      return

funcion   call   control
   return

control   bcf   portc,4
   nop
   movwf   portb
   nop
   bcf   portc,5
   call   del
   bsf   portc,5
   nop
   nop
   return

char   movwf   portb
   nop
   bsf   portc,4
   nop
   nop
   bcf   portc,5
   nop
   call   del
   bsf   portc,5
   nop
   nop
   return


del   movlw   d"8"
   movwf   var3
ciclo2   movlw   d"8"
   movwf   var4
ciclo1   decfsz   var4,f
   goto   ciclo1
   decfsz   var3,f
   goto   ciclo2
   return

_2LINEAS   movlw   0x38
      call   control
      movlw   0xc
      call   control
      return

;================================
;=====================================

;====================teclado=============




   cblock   0x50
   ptd
   var1
   var2
   tecla
   endc


initb   clrf   status
   clrf   portb
   bsf   status,rp0
   movlw   0xf0
   movwf   portb
   bcf   status,rp0
   return

;subrutina de deteccion de tecla presionada: regresa w=0 si no hay tecla presionada
; y w=0xff si hay alguna.

detec   movlw   0xf0
   movwf   portb
   btfss   portb,7
   goto   rebo
   btfss   portb,6
   goto   rebo   
   btfss   portb,5
   goto   rebo
   btfss   portb,4
   goto   rebo
   retlw   0x0


rebo   movlw   d"100"
   movwf   var1
_b   movlw   d"40"
   movwf   var2
_a   nop
   nop
   nop
   nop
   nop
   decfsz   var2,f
   goto   _a
   decfsz   var1,f
   goto   _b
   btfss   PORTB,7
   retlw   0xff
   btfss   PORTB,6
   retlw   0xff   
   btfss   PORTB,5
   retlw   0xff
   btfss   PORTB,4
   retlw   0xff
   retlw   0x0

;rutina para convetir en caracter ASCII

codif   movlw   0xf7      
   movwf   PORTB
   btfss   PORTB,7
   retlw   "1"
   btfss   PORTB,6
   retlw   "4"   
   btfss   PORTB,5
   retlw   "7"
   btfss   PORTB,4   
   retlw   "*"

   movlw   0xfb
   movwf   PORTB
   btfss   PORTB,7
   retlw   "2"
   btfss   PORTB,6
   retlw   "5"   
   btfss   PORTB,5
   retlw   "8"
   btfss   PORTB,4   
   retlw   "0"


   movlw   0xfd
   movwf   PORTB
   btfss   PORTB,7
   retlw   "3"
   btfss   PORTB,6
   retlw   "6"   
   btfss   PORTB,5
   retlw   "9"
   btfss   PORTB,4   
   retlw   "#"
   retlw   0x00   ;falsa alarma ninguna tecla presionada

up_k   movlw   0xf0
   andwf   PORTB,w
   movwf   ptd
   movlw   0xf0
   subwf   ptd,w
   btfss   status,2
   b   up_k
   return
   end
ENDASM
INICIO:
HIGH PORTA.4
GOTO INICIO

END

==================================

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: instruccion ASM
« Respuesta #3 en: 29 de Diciembre de 2005, 10:30:00 »
Hola:

Perdon pero, cual es la idea de compilar todo un programa en ensamblador con PBP, porque no lo compilas con MPASM solamente...?

Desconectado pattylt

  • PIC10
  • *
  • Mensajes: 7
RE: instruccion ASM
« Respuesta #4 en: 29 de Diciembre de 2005, 11:25:00 »
Escrito originalmente por LordLafebre
Hola:

Perdon pero, cual es la idea de compilar todo un programa en ensamblador con PBP, porque no lo compilas con MPASM solamente...?


Veras, ese no es el programa completo, sino una prueba para ver si se puede correr con los dos lenguajes.....la cosa está es que estoy haciendo un proyecto con una alarma antirrobo controlada por la pc, esa parte está en basic, pero la parte de la clave por teclado matricial  por mas q intento no me da (en basic), por ello trato de incorporarle esa rutina en asm q estoy segura que si funciona porque esta probada y montada.....pero igualito nada de nada....El programa corre hasta "INTRODUZCA CLAVE" despues de ahi por mas que presiono los botones los numeros  sale cuando ellos  quieren y sin nungun orden Enfurruñado .......

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: instruccion ASM
« Respuesta #5 en: 29 de Diciembre de 2005, 11:43:00 »
Hola:

Pues era que empieces por alli... comentandonos eso, aqui en el foro hay algo hecho... en esl mismo foro de basic incluso... mira aqui:

http://miarroba.com/foros/ver.php?foroid=8826&temaid=4233849

o aqui:

http://miarroba.com/foros/ver.php?foroid=8826&temaid=4180638&pag=4

alli esta lo que necesitas....

SUERTE...!!! Sonrisa Gigante

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: instruccion ASM
« Respuesta #6 en: 29 de Diciembre de 2005, 14:37:00 »
Hola amiga, yo tengo un programa en PICbasicPro que lee el teclado matricial 4x3 y tambien dice "introduzca clave", si quieres das tu correo y te lo envio sin ningun problema.

Saludos

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
RE: instruccion ASM
« Respuesta #7 en: 29 de Diciembre de 2005, 15:30:00 »
JAJA NO PUES PATYSITA COMO VA SER IRTE CAMINANDO SI TIENES CARRO SE VE QUE LA ROMPES CON EL ASEMBLER PERO SI NO ESTA EL MPLAB , POR ALLI AHI UN BUEN EJEMPLO DE LO QUE BUSCAS PERO CON UNA CERRADURA BUSCA ESTA EL CODIGO BIEN CHEVERE , ES EL MISMO PRINCIPIO PARA LA ALARMA CHAUUUUFlash

Desconectado pattylt

  • PIC10
  • *
  • Mensajes: 7
RE: instruccion ASM
« Respuesta #8 en: 29 de Diciembre de 2005, 19:07:00 »
Bueno mis amigos ya resolvi el problema todo el programa en BASIC....
la rutina del teclado +LCD a los q esten interesados se la puedo hacer llegar...


Gracias a todos los que me dieron una mano y me ayudaron en este proyectoVacilando

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: instruccion ASM
« Respuesta #9 en: 29 de Diciembre de 2005, 19:12:00 »
Hola:

Que bien que lo lograste...

Patty si estas dispuesta a colaborar con tu codigo porque mo lo pones aqui para que todos podamos verlo... Sonrisa Gigante

Desconectado pattylt

  • PIC10
  • *
  • Mensajes: 7
RE: instruccion ASM
« Respuesta #10 en: 29 de Diciembre de 2005, 19:52:00 »
Como no querido Lord


;Programa para leer un teclado hexadecimal  .4*3 y mostrarlo en LCD,
;ademas luego de tres intento fallido de la clave el sistema se bloquea
;y solo se pondra en funcionamiento al presionar por dos segundos la tecla (*),
;prendiendo un led que indica el desbloqueo!

adcon1=7                    

TECLA VAR BYTE

EE1 VAR BYTE
EE2 VAR BYTE
EE3 VAR BYTE
EE4 VAR BYTE

DIG1 VAR BYTE
DIG2 VAR BYTE
DIG3 VAR BYTE
DIG4 VAR BYTE
           
A VAR PORTB.0       ;nombres para los pines de las filas
B VAR PORTB.1
C VAR PORTB.2
D VAR PORTB.3

UNO     VAR PORTB.4    ;nombres para los pines de las columnas
DOS     VAR PORTB.5
TRES    VAR PORTB.6
CUATRO  VAR PORTB.7

N VAR BYTE
R VAR BYTE          ;CONTADOR DE LAS CLAVES ERRONEAS
M VAR BYTE

define  lcd_Dreg    portd
define  lcd_dbit    0
define  lcd_rsreg   portc
define  lcd_rsbit   4
define  lcd_ereg    portc
define  lcd_ebit    5

EE1 = 1 : EE2 = 2 : EE3 = 3 : EE4 = 4
R = 3                    ;NUMERO DE INTENTOS

INICIO:
N = 0
lcdout $fe,1,"INTRODUZCA CLAVE:"
GOSUB BARRIDO
DIG1 = TECLA  
PAUSE 90
N = 1
GOSUB BARRIDO
DIG2 = TECLA
PAUSE 90
N = 2
GOSUB BARRIDO
DIG3 = TECLA
PAUSE 90
N = 3
GOSUB BARRIDO
DIG4 = TECLA  
PAUSE 500
IF DIG1 = EE1 THEN P2
GOTO FALSO
P2:
IF DIG2 = EE2 THEN P3
GOTO FALSO
P3:
IF DIG3 = EE3 THEN P4
GOTO FALSO
P4:
IF DIG4 = EE4 THEN BUENO
GOTO FALSO


FALSO:
HIGH PORTE.1
LCDOUT $FE,1, "CLAVE INCORRECTA"
PAUSE 700
LOW PORTE.1
R = R - 1
IF R = 0 THEN BLOQUEO
PAUSE 200
GOTO INICIO

                             
BUENO:                              ;DESPUES DE AQUI PODEMOS HACER LO QUE
HIGH PORTE.0                        ;QUERAMOS
LCDOUT $FE,1, "SISTEM ACTIVADO"
PAUSE 500
LOW PORTE.0
PAUSE 500
GOTO BUENO

BLOQUEO:
LCDOUT $FE,1, "SISTEM BLOQUEADO"
OTRO:
FOR M = 1 TO 2
LOW D : HIGH C : HIGH B : HIGH A      ;SE DEBE PRESIONAR (*) PARA DESBLOQUEO
IF UNO = 0 THEN DESBLO               ;POR DOS SEGUNDOS
PAUSE 1000
NEXT
GOTO OTRO

DESBLO:
HIGH PORTE.2 : PAUSE 700 : LOW PORTE.2
GOTO INICIO


BARRIDO:
HIGH A : HIGH B : HIGH C : HIGH D    
       LOW A                                              
    IF UNO   = 0 THEN  LCDOUT $FE,$C6+N, "1":TECLA = 1 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C6+N, "2":TECLA = 2 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C6+N, "3":TECLA = 3 :RETURN
       HIGH A                                            
       LOW B                                              
    IF UNO   = 0 THEN  LCDOUT $FE,$C6+N,"4" :TECLA = 4 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C6+N,"5" :TECLA = 5 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C6+N,"6" :TECLA = 6 :RETURN
       HIGH B                                                
       LOW C                                                  
    IF UNO   = 0 THEN  LCDOUT $FE,$C6+N,"7" :TECLA = 7 :RETURN
    IF DOS   = 0 THEN  LCDOUT $FE,$C6+N,"8" :TECLA = 8 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C6+N,"9" :TECLA = 9 :RETURN  
       HIGH C                                                    
       LOW D
    IF UNO   = 0 THEN  LCDOUT $FE,$C6+N,"*" :TECLA = 10:RETURN                          
    IF DOS   = 0 THEN  LCDOUT $FE,$C6+N,"0" :TECLA = 0 :RETURN
    IF TRES  = 0 THEN  LCDOUT $FE,$C6+N,"#" :TECLA = 11:RETURN          
        HIGH D                      
    pause 10                        
   GOTO BARRIDO
                                     
END

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: instruccion ASM
« Respuesta #11 en: 29 de Diciembre de 2005, 20:08:00 »
Hola:

Gracias por el aporte querida Patty Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteRebotadoRebotadoRebotado


 

anything