Autor Tema: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A  (Leído 757880 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado beto1234

  • PIC12
  • **
  • Mensajes: 52
    • Osm Gps Pwa
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #75 en: 27 de Agosto de 2009, 01:24:13 »
 Hola muchas gracias.. A ver si puedo presentar algún proyectivo con MATLAB y un PIC, ahora pronto no creo pero mas adelante seguro. Estoy metido con el matlab en el tema de procesamiento de imágenes y de audio. Estoy tratando de darle uso mas industrial a esto.. pero no tengo drama en presentarlo aqui. :D.

 

Desconectado Pts

  • PIC10
  • *
  • Mensajes: 2
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #76 en: 06 de Septiembre de 2009, 19:38:15 »
Una pregunta gente, me baje el ejemplo en proteus isis del led titilando, mi pregunta es si desde RB0/INT puedo poner mas de un led, o sea que en el proteus funciona perfecto agrego mas led y titilan todos, pero quizas halla problema en la practica, recien estoy empezando agradeceria su ayuda.

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #77 en: 06 de Septiembre de 2009, 23:32:02 »
Pts, colocando una resistencia, un transistor (NPN)  y los leds en paralelo en el colector con su respectiva resistencia debería funcionar.
Share the world !

Blog's

http://www.area0x33.com

Desconectado picnew

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #78 en: 19 de Octubre de 2009, 15:17:44 »
Buenas tardes, tratando de compilar un programa muy sencillo en MPLAB me he encontrado con este problema:

Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "Carrito.asm" /l"Carrito.lst" /e"Carrito.err" /o"Carrito.o"
Warning[205] C:\DOCUMENTS AND SETTINGS\USUARIO\ESCRITORIO\CERCO KEROMUCHI\PROGRAMAS\CARRITO.ASM 1 : Found directive in column 1. (LIST)
Warning[205] C:\DOCUMENTS AND SETTINGS\USUARIO\ESCRITORIO\CERCO KEROMUCHI\PROGRAMAS\CARRITO.ASM 3 : Found directive in column 1. (include)
Skipping link step.  The project contains no linker script.
BUILD FAILED: Mon Oct 19 13:38:33 2009


Lo cual no me permite simular el programa, es MPLAB 7.50.

Aca tambien envió el programa que descargue de un tutorial:


include "P16F84.INC"
 __CONFIG   _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC


Resultado    EQU  0x10             ;Define la posición del resultado
             org 0x00                       ;Vector de Reset

             goto Inicio
             org 0x05                      ;Salva el vector de interrupción
Inicio       movlw 0x07         ;Carga 1er. sumando en W
             addlw 0x06         ;Suma el 2º sumando
             movwf Resultado    ;Almacena el resultado
             nop                ;Poner breakpoint de parada
             nop
             END               ;Fin del programa fuente


De antemano muchas gracias



Desconectado picnew

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #79 en: 19 de Octubre de 2009, 15:39:45 »
hermanos ya consegui la respuesta disculpen mi ignorancia, me hacia falta agregarle un archivo de link correspondiente al modelo de pic a usar, caramba hace unos 10 años utilice MPLAB pero si mal no recuerdo no habia que agregar ese archivo de link, o estoy errado?

De antemano, muchas gracias nuevamente

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #80 en: 19 de Octubre de 2009, 15:50:06 »
No, no es necesario. En Project/Select Lenguaje Toolsuite selecciona MPASM Toolsuite y verifica que las "rutas" de los archivos estén correctamente.
Luego al hacer Build All si aparece una ventana preguntando absolute o reloacatable coloca absolute.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado picnew

  • PIC10
  • *
  • Mensajes: 3
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #81 en: 19 de Octubre de 2009, 17:47:18 »
Nuevamente yo..... espero disculpen ahora superado el primer inconveniente surge otro al tratar de simular, me indica lo siguiente:

CORE-E0002: Stack under flow error occurred from instruction at 0x00000a


Agradeciendo nuevament su ayuda.


Saludos

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #82 en: 19 de Octubre de 2009, 19:26:53 »
Simular donde? En el mismo MPLab,Proteus u otro?
No contesto mensajes privados, las consultas en el foro

Desconectado miguel valdivia

  • PIC10
  • *
  • Mensajes: 46
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #83 en: 02 de Diciembre de 2009, 12:22:17 »
Hola suky , encontre un problema en tu programa de cambio de ciclo de trabajo:
en el bucle de testeo del puerto b 6 y 7  se esta preguntando si esta e BTFSC , pero en tu esquematico estos pines estan a masa
entonces deberia ser BTFSS o me equivoco
otra cosa el retardo no sera muy poco
porque lo estoy probando y todavia no me funciona

saludos desde chile

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #84 en: 02 de Diciembre de 2009, 13:30:59 »
No, fíjate que al pulsar la tecla, el pin del PIC pasa a 1 (5V). Y en el test de estos pines se testea si es cero, salta a consultar por el otro, si este también es cero se salta al bucle nuevamente.

La demora es para que al mantenerlo presionado se note el cambio gradual, y capaz si sea demasiado poco  :tongue: Pero si es el caso veras que pasa de 0% a 100% (Ciclo de trabajo) casi sin poder controlarlo.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #85 en: 13 de Diciembre de 2009, 20:47:03 »
Buenas a todos!!

suki quisiera saber si me podrias enseñar como recivir un caracter o una cadena de caracteres por rs 232 y luego poder tratarla, o sea hacer alguna comparacion, por ejemplo si recibio en el caracter nº 23 una "p" que aga tal cosa. Es pero haber sido lo mas claro posible, ya que enviar desde el pic al pc me sale muy bien pero no se como recibirlo y tratarlo.
Espero me puedas ayudar y si no todo bien igual.

Un saludo desde Mendoza Argentina para todos!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #86 en: 13 de Diciembre de 2009, 20:58:38 »
Hola kapotik!

Para recibir una cadena puedes usar el direccionamiento indirecto como para guardarlo en un rango de la memoria.

Para comparar datos podes hacerlo de la siguiente:

Código: ASM
  1. ; Se recibe un carácter y se guarda en RData por ejemplo.
  2.     ; Se quiere saber si es la 'a'
  3.     movlw   'a'  ; Cargamos en W en ascii a
  4.     subwf  RData,0 ; Restamos W-RData y lo guardamos en W.
  5.     btfsc  STATUS,Z  ; Consultamos si la operacion a resultado 0.
  6.     goto  SiEsA  ; Si es A.
  7.     goto  NoEsA  ; No es A...


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #87 en: 14 de Diciembre de 2009, 10:36:31 »
Gracias suky por contestar tan rapídamente!!
disculpa mi ignorancia pero podrias mostrarme como recibir la cadena de caracteres. La comparacion si me quedo bien claro.

Saludos

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #88 en: 19 de Enero de 2010, 19:48:56 »
wow amigo suky, que locura, hace tiempo que no toco el assembler, pero igual jamas he llegado a tocar varios temas en assembler, que bien amigo.
muchas gracias por tu esfuerzo, esto es mejor que un libro de assembler

Desconectado beto1234

  • PIC12
  • **
  • Mensajes: 52
    • Osm Gps Pwa
Re: Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A
« Respuesta #89 en: 22 de Febrero de 2010, 13:24:40 »
USO DE LA LIBRERIA MATEMATICA + - / *

 Bueno amigos voy a tratar de explicar como poder multiplicar, dividir, sumar y restar usando una librería  matemática muy útil. Para crear esta librería, abrimos el bloc de notas de windows que se encuentra en el menú accesorios. Copiamos el código de la librería que mas abajo la dejo, y lo guardan con el nombre "Matematica" y la extensión "INC".
Código: [Seleccionar]
;****************************************************************************************************************************************
;****************************************************************************************************************************************
;*********************************LIBRERIA DE FUNCIONES MATEMATICAS + - * / *************************************************************
;****************************************************************************************************************************************
;****************************************************************************************************************************************

CBLOCK
  NUM1H
  NUM1L
  NUM2H
  NUM2L
  RESU1H
  RESU1L
  ACCdHI
  ACCdLO
  tempMat
  Flags

ENDC

;*******************************************************************************************************************************************
;*******************************************************************************************************************************************
;******************************************************************************************************************************************
;         Double Prec*ision Subtraction ( NUM1 - NUM2 -> RESU1 )
;
Restar   
movfw NUM1L
movwf RESU1L
movfw NUM1H
movwf RESU1H
movf NUM2L,W
movwf ACCdHI
movf NUM2H,W
movwf ACCdLO
comf ACCdHI,1
incf ACCdHI,1
btfsc STATUS,Z
decf ACCdLO,1
comf ACCdLO,1
movf ACCdHI,w
addwf RESU1L,1
btfsc STATUS,C
incf RESU1H,1
movf ACCdLO,w
addwf RESU1H,1
retlw   0
;******************************************************************************************************************************************
;*******************************************************************************************************************************************
;***********************Double Precision Addition ( NUM1 + NUM2 -> NUM1 )*******************************************************************
;*******************************************************************************************************************************************

Sumar            bcf     Flags,0 ;Clear temp Carry bit
movf    NUM2L,0       
addwf   NUM1L,1 ;add lsb
btfsc   STATUS,C  ;add in carry
  incf    NUM1H,1
btfsc STATUS,C
bsf Flags,0
movf    NUM2H,0
addwf   NUM1H, 1         ;add msb
btfsc Flags,0
bsf     STATUS,C
retlw   0
;*******************************************************************
;               Double Precision Multiply ( 16x16 -> 32 )
;         ( NUM1*NUM2 -> NUM1,RESU1) : 32 bit output with high word
;  in ACCb ( NUM1H,NUM1L ) and low word in ACCc ( RESU1H,RESU1L ).
;*******************************************************************



Multiplicar                          ;results in ACCb(16 msb's) and ACCc(16 lsb's)

        bcf STATUS,RP0 ;banco0
                bcf STATUS,RP1

call    setup
mloop   rrf     ACCdHI, 1       ;rotate d right
rrf     ACCdLO, 1
btfsc   STATUS,C    ;need to add?
call    Suma
rrf     NUM1H, 1
rrf     NUM1L, 1
rrf     RESU1H, 1
rrf     RESU1L, 1
decfsz  tempMat, 1      ;loop until all bits checked
goto    mloop

    retlw   0
   

setup           movlw   .16             ; for 16 shifts
movwf   tempMat
movf    NUM1H,0          ;move ACCb to ACCd
movwf   ACCdHI
movf    NUM1L,0
movwf   ACCdLO
clrf    NUM1H
clrf    NUM1L
retlw   0
;*******************************************************************
;       Double Precision Divide ( 16/16 -> 16 )
;
;         ( NUM1/NUM2 -> NUM1 with remainder in RESU1 ) : 16 bit output
; with Quotiont in NUM1 (NUM1H,NUM1L) and Remainder in RESU1 (RESU1H,RESU1L).
;
;   NOTE  :  Before calling this routine, the user should make sure that
;            the Numerator(NUM1) is greater than Denominator(NUM2). If
;            the case is not true, the user should scale either Numerator
;            or Denominator or both such that Numerator is greater than
;            the Denominator.
;*******************************************************************


Dividir call    setup
clrf    RESU1H
clrf    RESU1L
dloop   bcf     STATUS,C
rlf     ACCdLO,1
rlf     ACCdHI,1
rlf     RESU1L,1
rlf     RESU1H,1
movf    NUM2H,0
subwf   RESU1H,0        ;check if a>c
btfss   STATUS,2
goto    nochk
movf    NUM2L,0
subwf   RESU1L,0    ;if msb equal then check lsb
nochk   btfss   STATUS,0    ;carry set if c>a
goto    nogo
movf    NUM2L,0        ;c-a into c
subwf   RESU1L,1
btfss   STATUS,0
decf    RESU1H,1
movf    NUM2H,0
subwf   RESU1H,1
bsf     STATUS,0    ;shift a 1 into b (result)
nogo    rlf     NUM1L,1
rlf     NUM1H,1
decfsz  tempMat,1         ;loop untill all bits checked
goto    dloop

retlw 0



MODO DE USO
 Para probar solamente abran el MPLAB => File Registers , y van a ver los resultados en el registro TRISA ó TRISB así también como cada registro usado por la librería.

RESTA

Código: [Seleccionar]
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
cblock 0x20 ; registros de uso

ENDC
;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-
Inicio
   
        bsf STATUS,RP0 ;banco1
        bcf STATUS,RP1
      clrf TRISA
        clrf TRISB

CALC   ; RESTA 1BYTE - 1BYTE = 1BYTE
       ;(NUM1H,NUM1L) -  (NUM2H,NUM2L) = (RESU1H,RESU1L)
       ; 10 - 4 = 6
       ; El resultado lo paso al TrisA
        movlw     .10
        MOVWF NUM1L
CLRF NUM1H
MOVLW .4
MOVWF NUM2L
CLRF NUM2H
CALL Restar
        banksel     TRISA
MOVF RESU1L,0
        MOVWF TRISA             
MOVF RESU1H,0
MOVWF TRISB
goto CALC

INCLUDE  "C:\....\Matematica.INC"
end

SUMA

Código: [Seleccionar]
#include P16F877A.inc
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
cblock 0x20 ; registros de uso

ENDC
;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-
Inicio
   
        bsf STATUS,RP0 ;banco1
        bcf STATUS,RP1
      clrf TRISA
        clrf TRISB

CALC   ; SUMA 1BYTE + 1BYTE = 1BYTE
       ;(NUM1H,NUM1L) +  (NUM2H,NUM2L) = (NUM1H,NUM1L)
       ; 10 - 4 = 6
       ; El resultado lo paso al TrisA
        movlw     .10
        MOVWF NUM1L
CLRF NUM1H
MOVLW .4
MOVWF NUM2L
CLRF NUM2H
CALL Sumar
        banksel     TRISA
MOVF NUM1L,0
        MOVWF TRISA             
MOVF NUM1H,0
MOVWF TRISB
goto CALC

INCLUDE  "C:\...\Matematica.INC"
end

MULTIPLICACIÓN

Código: [Seleccionar]
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
cblock 0x20 ; registros de uso

ENDC
;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-
Inicio
   
        bsf STATUS,RP0 ;banco1
        bcf STATUS,RP1
      clrf TRISA
        clrf TRISB

CALC   ; MULTIPLICA 1BYTE * 1BYTE = 1BYTE
       ;(NUM1H,NUM1L) *  (NUM2H,NUM2L) = ( RESU1H,RESU1L )
       ; 2 * 4 = 8
       ; El resultado lo paso al TrisA
        movlw     .2
        MOVWF NUM1L
CLRF NUM1H
MOVLW .4
MOVWF NUM2L
CLRF NUM2H
CALL Multiplicar
        banksel     TRISA
MOVF RESU1L,0
        MOVWF TRISA             
MOVF RESU1H,0
MOVWF TRISB
goto CALC

INCLUDE  "C:\...\Matematica.INC"
end

DIVISIÓN

Código: [Seleccionar]
#include P16F877A.inc
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
cblock 0x20 ; registros de uso

ENDC
;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-
Inicio
   
        bsf STATUS,RP0 ;banco1
        bcf STATUS,RP1
      clrf TRISA
        clrf TRISB

CALC   ; DIVIDE 1BYTE / 1BYTE = 1BYTE
       ;(NUM1H,NUM1L) /  (NUM2H,NUM2L) = (NUM1H,NUM1L) ,  resto en ( RESU1H,RESU1L )
       ; 6 / 3 = 2
       ; El resultado lo paso al TrisA
        movlw     .6
        MOVWF NUM1L
CLRF NUM1H
MOVLW .3
MOVWF NUM2L
CLRF NUM2H
CALL Dividir
        banksel     TRISA
MOVF NUM1L,0
        MOVWF TRISA             
MOVF NUM1H,0
MOVWF TRISB
goto CALC

INCLUDE  "C:\...\Matematica.INC"
end



 


 

anything