Autor Tema: Ejemplos en Asembler PIC16F84A  (Leído 231943 veces)

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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #45 en: 04 de Febrero de 2010, 00:50:27 »
Yo en una ambiente libre de ruido los dejo al aire y no he tenido inconvenientes. En cambio si va a estar en un ambiente ruidoso (electromagnético  :mrgreen: ) se les puede colocar una resistencia pull-up o pull-down  :tongue:


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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #46 en: 04 de Febrero de 2010, 02:49:02 »
También puedes configurarlos como salidas...

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #47 en: 18 de Marzo de 2011, 21:35:40 »
Pues me di un paseo por este todo el post y no vi un ejemlo de manejo de la LCD con el PIC16F84A asi que esta es mi contribucion al tema. Se trata de un contador de 0-9. Es algo muy basico y es que la verdad la idea es mas bien enfocarse en el proceso de inicializacion y manejo y envio de comandos y datos. Esta hecho para manejarse con un BUS de 8 lineas.

Código: [Seleccionar]
;**************************************************************
;*                                                            *
;*         Ensamblador para microcontroladores MPASM          *
;*                                                            *
;* NOMBRE  : pic8lcd.asm                                      *
;* OBJETIVO: Contador 0-9 con salida a LCD configurada  a  un *
;*           bus de 8 lineas, controladas por el puerto B del *
;*           PIC16F84A. Las lineas  EN y RS  estan  sobre  el *
;*      puerto A en los bits 0 y 1 respectivamente.           *
;*                                                            *
;* AUTOR   :                 antonio gauss                    *
;* EMAIL   :            agauss@todopic.zzn.com                *
;*                                                            *
;**************************************************************


         title "PIC16F84A, pic8lcd.asm"
         list p=16f84a, f=inhx8m
         #include <p16f84a.inc>
         __config _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON


STATUS   equ    0x03
PORTA    equ    0x05
PORTB    equ    0x06

PDel0    equ    0x10
PDel1    equ    0x11
COUNT    equ    0x12


         org    0x00
         goto   inicio

         org    0x04
         goto   rsi

         org    0x05

inicio:  bsf    STATUS,RP0
         movlw  0xFC
         movwf  PORTA
         movlw  0x00
         movwf  PORTB
         bcf    STATUS,RP0

         clrf   PORTA
         clrf   PORTB

         call   init

main:    clrf   COUNT

         movlw  0x01
         movwf  PORTB
         call   en_com

mLoop:   movf   COUNT,0
         addlw  0x30
         movwf  PORTB
         call   en_dat

         movlw  .250
         call   delay

         incf   COUNT,1
         movlw  0x0A
         xorwf  COUNT,0
         btfss  STATUS,2
         goto   mLoop

         goto   main



init:    movlw  .20
         call   delay

         movlw  0x38
         movwf  PORTB
         call   en_com

         movlw  0x0C
         movwf  PORTB
         call   en_com

         movlw  0x06
         movwf  PORTB
         call   en_com

         return


en_com:  bcf    PORTA,1

         bsf    PORTA,0
         nop
         bcf    PORTA,0

         movlw  .2
         call   delay

         return


en_dat:  bsf    PORTA,1

         bsf    PORTA,0
         nop
         bcf    PORTA,0

         call   T050us

         return


T050us:  movlw  .15
         movwf  PDel0

DLoop3:  decfsz PDel0,1
         goto   DLoop3

         return


T200us:  movlw  .65
         movwf  PDel0

DLoop2:  decfsz PDel0,1
         goto   DLoop2

         return


delay:   movwf  PDel1
         nop
DLoop0:  movlw  .249
         movwf  PDel0

DLoop1:  nop
         decfsz PDel0,1
         goto   DLoop1

         decfsz PDel1,1
         goto   DLoop0

         return


rsi:     retfie


         end

saludos...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #48 en: 18 de Marzo de 2011, 21:54:01 »
Y ahora esta es la version para un BUS de 4 bits:

Código: [Seleccionar]
;**************************************************************
;*                                                            *
;*         Ensamblador para microcontroladores MPASM          *
;*                                                            *
;* NOMBRE  : pic4lcd.asm                                      *
;* OBJETIVO: Contador 0-9 con salida a LCD configurada  a  un *
;*           bus de 8 lineas, controladas por la  parte  alta *
;*           del puerto B. Las lineas  EN y RS estan sobre el *
;*           puerto A en los bits 0 y 1 respectivamente.      *
;*                                                            *
;* AUTOR   :                 antonio gauss                    *
;* EMAIL   :            agauss@todopic.zzn.com                *
;*                                                            *
;**************************************************************


         title "PIC16F84A, pic4lcd.asm"
         list p=16f84a, f=inhx8m
         #include <p16f84a.inc>
         __config _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON


STATUS   equ    0x03
PORTA    equ    0x05
PORTB    equ    0x06

PDel0    equ    0x10
PDel1    equ    0x11
COUNT    equ    0x12


         org    0x00
         goto   inicio

         org    0x04
         goto   rsi

         org    0x05

inicio:  bsf    STATUS,RP0
         movlw  0xFC
         movwf  PORTA
         movlw  0x0F
         movwf  PORTB
         bcf    STATUS,RP0

         clrf   PORTA
         clrf   PORTB

         call   init
         call   conf

main:    clrf   COUNT

         movlw  0x00
         movwf  PORTB
         call   en_com

         movlw  0x10
         movwf  PORTB
         call   en_com

mLoop:   movf   COUNT,0
         addlw  0x30
         movwf  DATO

         movwf  PORTB
         call   en_dat

         bcf    STATUS,0
         rlf    DATO,1
         rlf    DATO,1
         rlf    DATO,1
         rlf    DATO,1

         movf   DATO,0
         movwf  PORTB
         call   en_dat

         movlw  .250
         call   delay
 
         incf   COUNT,1
         movlw  0x0A
         xorwf  COUNT,0
         btfss  STATUS,2
         goto   mLoop

         goto   main



init:    movlw  .20
         call   delay

         movlw  0x30
         movwf  PORTB
         call   en_com

         movlw  .5
         call   delay

         movlw  0x30
         movwf  PORTB
         call   en_com

         call   T200us

         movlw  0x30
         movwf  PORTB
         call   en_com

         movlw  0x20
         movwf  PORTB
         call   en_com

         return


conf:    movlw  0x20
         movwf  PORTB
         call   en_com

         movlw  0x00
         movwf  PORTB
         call   en_com

         movlw  0x00
         movwf  PORTB
         call   en_com

         movlw  0xC0
         movwf  PORTB
         call   en_com

         movlw  0x00
         movwf  PORTB
         call   en_com

         movlw  0x60
         movwf  PORTB
         call   en_com

         return


en_com:  bcf    PORTA,1

         bsf    PORTA,0
         nop
         bcf    PORTA,0

         movlw  .2
         call   delay

         return


en_dat:  bsf    PORTA,1

         bsf    PORTA,0
         nop
         bcf    PORTA,0

         call   T050us

         return


T050us:  movlw  .15
         movwf  PDel0

DLoop3:  decfsz PDel0,1
         goto   DLoop3

         return


T200us:  movlw  .65
         movwf  PDel0

DLoop2:  decfsz PDel0,1
         goto   DLoop2

         return


delay:   movwf  PDel1
         nop
DLoop0:  movlw  .249
         movwf  PDel0

DLoop1:  nop
         decfsz PDel0,1
         goto   DLoop1

         decfsz PDel1,1
         goto   DLoop0

         return


rsi:     retfie


         end

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #49 en: 18 de Marzo de 2011, 21:56:54 »
Como aun no domino muy bien esto de la imagenes, entonces mejor les pongo en un afjunto el codigo y los archivos en PROTEUS. Uso la version 7.4 de PROTEUS ISIS. Espero le sea de utilidad a alguien.

saludos...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #50 en: 19 de Marzo de 2011, 01:39:11 »
Por cierto me llama la atencion el comentario de nocturno acerca de la configuracion de los pines que no se usan. Tenia entendido que una manera segura de mantener los pines que no se habran de utilizar era configurandolos como entradas, si estoy en un error me gustaria saber la razon???
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #51 en: 19 de Marzo de 2011, 02:30:29 »
Si los configuras como entradas correrás el riesgo de que actúen como antenas y reciban señales electromagnéticas que puedan afectar al funcionamiento del PIC.
Si los configuras como salidas, esto no ocurrirá.

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #52 en: 19 de Marzo de 2011, 03:05:45 »
Ok, enterado maestro, definitivamente todos los dias se aprende algo nuevo, gracias...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #53 en: 19 de Marzo de 2011, 16:41:14 »
Les traigo un ejemplito de un PWM usando interrupciones (INT0) para incrementar/decrementar el ancho del pulso.

Código: [Seleccionar]
;**************************************************************
;*                                                            *
;*          Ensamblador para microcontroladores MPASM         *
;*                                                            *
;* NOMBRE  : PICpwm.asm                                       *
;* OBJETIVO: Modulador de ancho de pulso  PWM  utilizando  la *
;*           interrupcion externa del PIC16F84A. El modulador *
;*           cuenta con un par de entradas que se encargan de *
;*           el incremento y decremento del pulso.            *
;*                                                            *
;* AUTOR   : antonio gauss                                    *
;* EMAIL   : agauss@todopic.zzn.com                           *
;*                                                            *
;**************************************************************


         title "PIC16F84A, PICpwm.asm"
         list p=16f84a, f=inhx8m
         #include <p16f84a.inc>
         __config _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF


TMR0    equ    0x01
STATUS  equ    0x03
PORTB   equ    0x06
INTCON  equ    0x0B

STEMP   equ    0x10
WTEMP   equ    0x11
ACCA    equ    0x12
ACCC    equ    0x13
PDelT   equ    0x14


        org    0x00
        goto   inicio

        org    0x04
        goto   rsi

        org    0x05

inicio: bsf    STATUS,RP0
        movlw  0xF7
        movwf  PORTB
        bcf    TMR0,6
        bcf    STATUS,RP0

        movlw  0x90
        movwf  INTCON

        movlw  0x7F
        movwf  ACCA

main:   movf   ACCA,0
        movwf  ACCC

        bsf    PORTB,3
        call   delay

        movf   ACCA,0
        sublw  0xFF
        movwf  ACCC

        bcf    PORTB,3
        call   delay

        goto   main




delay:  movf   ACCC,0
        movwf  PDelT

DLoop:  nop

        decfsz PDelT,1
        goto   DLoop

        return


IncDut: incf   ACCA,1
        movlw  0xFF
        xorwf  ACCA,0
        btfss  STATUS,Z
        return

        movlw  0xFE
        movwf  ACCA

        return


DecDut: decf   ACCA,1
        btfss  STATUS,Z
        return

        movlw  0x01
        movwf  ACCA

        return


rsi:    btfss  INTCON,1
        retfie

        movwf  WTEMP
        swapf  STATUS,0
        movwf  STEMP

start:  btfss  PORTB,1
        call   IncDut

        btfss  PORTB,2
fin:    call   DecDut

        swapf  STEMP,0
        movwf  STATUS
        swapf  WTEMP,1
        swapf  WTEMP,0

        bsf    INTCON,4
        bcf    INTCON,1

        retfie


        end



No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #54 en: 19 de Marzo de 2011, 16:43:35 »
Como sigo batallando con las imagenes no pegue nada arriba, pero aqui les dejo el codigo fuente, el compilado y la simulacion en PROTEUS.

saludos...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado hersheysdark

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #55 en: 23 de Julio de 2011, 17:36:01 »
pic16f84a y lcd 16x2
Buenas tardes, un favor; quisiera ver quien me puede ayudar con un proyecto.
Tengo que utilizar un pic 16f84a para desplegar un mensaje en movimiento, con un boton al MCLR del pic el mensaje se reinicia, "con un boton al RB0 del pic el mensaje debera moverse mas rapido" ya tengo casi todo lo unico que no puedo aun hacer es lo que esta entre comillas....
Anexo codigo en ensamblador.
Gracias
------------------------------------------------------------------------------------------
;
; El módulo LCD visualiza un mensaje largo (más de 16 caracteres) que se desplaza a lo largo
; de la pantalla. Se utiliza la subrutina LCD_MensajeMovimiento de la librería LCD_MENS.INC.
;
; ZONA DE DATOS ************************************************** ********************

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>

CBLOCK 0x0C
R_ContAA
R_ContAB
STORW
STRST
ENDC



; ZONA DE CÓDIGOS ************************************************** ******************

ORG 0
goto Inicio
ORG 4
goto INT_EXT




Inicio

call LCD_Inicializa ; Prepara la pantalla.
bsf STATUS,RP0
BSF PORTB,0
BCF OPTION_REG,NOT_RBPU
BCF OPTION_REG,INTEDG
bcf STATUS,RP0
clrf R_ContAB
Principal
movlw Mensaje0 ; Apunta al mensaje.
call LCD_MensajeMovimiento
goto Principal ; Repite la visualización.
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; Posición inicial del mensaje.
DT " " ; Espacios en blanco al principio para mejor
DT "Proyecto Final" ; visualización.
DT " Diseño Logico",
DT " ", 0x0 ; Espacios en blanco al final.
;
INCLUDE <LCD_MENS.INC> ; Subrutina LCD_MensajeMovimiento.
INCLUDE <LCD_4BIT.INC> ; Subrutinas de control del LCD.
INCLUDE <RETARDOS.INC> ; Subrutinas de retardos.




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

; Rutina de interrupcion

; Se procede a dar servicio a la interrupcion.

; Esta corresponde a una interrupcion periferica. No se usa.

;================================================= ==================
INT_EXT

MOVWF STORW ; Respaldar el acumulador, W, en la localidad de memoria STORW.
MOVF STATUS, W ; El contenido de STATUS register se almacena en el acumulador.
MOVWF STRST ; Respaldar el STATUS register en la localidad de memoria STRST.
; Se incluye el banco en uso antes de la interrupcion.
incf R_ContAB, F ; paso 1 1 ciclo

banco0 ; Direcciona el Banco 0.
MOVF STRST, W ; Se almacena en el acumulador el registro STRST.
MOVWF STATUS ; Se restaura el STATUS register.
SWAPF STORW, F ; Se almacena en el acumulador el registro STRST.
SWAPF STORW, W ; Se almacena en el acumulador el registro STRST.
RETFIE ; Terminal la rutina de interrupcion, regresa al programa principal.

END ; Fin del programa.
------------------------------------------------------------------------------------------

; ================================================== =================
;
; Librería de subrutinas para el manejo de mensajes a visualizar en un visualizador LCD.

CBLOCK
LCD_ApuntaCaracter ; Indica la posición del carácter a visualizar
; respecto del comienzo de todos los mensajes,
; (posición de la etiqueta "Mensajes").
LCD_ValorCaracter ; Código ASCII del carácter a
ENDC ; visualizar.

; Los mensajes tienen que estar situados dentro de las 256 primeras posiciones de la
; memoria de programa, es decir, no pueden superar la dirección 0FFh.

; Subrutina "LCD_Mensaje" ---------------------------------------------------------------
;
; Visualiza por pantalla el mensaje apuntado por el registro W.
;
; Los mensajes deben localizarse dentro de una zona encabezada por la etiqueta "Mensajes" y que
; tenga la siguiente estructura:
;
; Mensajes ; ¡Etiqueta obligatoria!
; addwf PCL,F
; Mensaje0 ; Posición inicial del mensaje.
; DT ".. ..", 0x00 ; Mensaje terminado en 0x00.
; Mensaje1
; ...
; ...
; FinMensajes
;
; La llamada a esta subrutina se realizará siguiendo este ejemplo:
;
; movlw Mensaje0 ; Carga la posición del mensaje.
; call LCD_Mensaje ; Visualiza el mensaje.
;
LCD_Mensaje
movwf LCD_ApuntaCaracter ; Posición del primer carácter del mensaje.
movlw Mensajes ; Halla la posición relativa del primer carácter
subwf LCD_ApuntaCaracter,F ; del mensaje respecto de etiqueta "Mensajes".
decf LCD_ApuntaCaracter,F ; Compensa la posición que ocupa "addwf PCL,F".
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
call Mensajes ; Obtiene el código ASCII del carácter apuntado.
movwf LCD_ValorCaracter ; Guarda el valor de carácter.
movf LCD_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
btfsc STATUS,Z ; que sea "0x00", que es código indicador final
goto LCD_FinMensaje ; de mensaje, sale fuera.
LCD_NoUltimoCaracter
call LCD_Caracter ; Visualiza el carácter ASCII leído.
incf LCD_ApuntaCaracter,F ; Apunta a la posición del siguiente carácter
goto LCD_VisualizaOtroCaracter ; dentro del mensaje.
LCD_FinMensaje
return ; Vuelve al programa principal.

; Subrutina "LCD_MensajeMovimiento" -----------------------------------------------------
;
; Visualiza*un mensaje de mayor longitud que los 16 caracteres que pueden representarse
; en una línea, por tanto se desplaza a través de la pantalla.
;
; En el mensaje debe dejarse 16 espacios en blanco, al principio y al final para
; conseguir que el desplazamiento del mensaje sea lo más legible posible.
;
CBLOCK
LCD_CursorPosicion ; Contabiliza la posición del cursor dentro de la
ENDC ; pantalla LCD
LCD_MensajeMovimiento
movwf LCD_ApuntaCaracter ; Posición del primer carácter del mensaje.
movlw Mensajes ; Halla la posición relativa del primer carácter
subwf LCD_ApuntaCaracter,F ; del mensaje respecto de la etiqueta "Mensajes".
decf LCD_ApuntaCaracter,F ; Compensa la posición que ocupa "addwf PCL,F".
LCD_PrimeraPosicion
clrf LCD_CursorPosicion ; El cursor en la posición 0 de la línea.
call LCD_Borra ; Se sitúa en la primera posición de la línea 1 y
LCD_VisualizaCaracter ; borra la pantalla.
movlw LCD_CaracteresPorLinea ; ¿Ha llegado a final de línea?
subwf LCD_CursorPosicion,W
btfss STATUS,Z
goto LCD_NoEsFinalLinea
LCD_EsFinalLinea
call Retardo_200ms ; Lo mantiene visualizado durante este tiempo.
call Retardo_200ms
call retardo_externo
movlw LCD_CaracteresPorLinea-1; Apunta a la posición del segundo carácter visualizado
subwf LCD_ApuntaCaracter,F ; en pantalla, que será el primero en la siguiente
goto LCD_PrimeraPosicion ; visualización de línea, para producir el efecto
LCD_NoEsFinalLinea ; de desplazamiento hacia la izquierda.
movf LCD_ApuntaCaracter,W
call Mensajes ; Obtiene el ASCII del carácter apuntado.
movwf LCD_ValorCaracter ; Guarda el valor de carácter.
movf LCD_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
btfsc STATUS,Z ; que sea "0x00", que es código indicador final
goto LCD_FinMovimiento ; de mensaje, sale fuera.
LCD_NoUltimoCaracter2
call LCD_Caracter ; Visualiza el carácter ASCII leído.
incf LCD_CursorPosicion,F ; Contabiliza el incremento de posición del
; cursor en la pantalla.
incf LCD_ApuntaCaracter,F ; Apunta a la siguiente posición por visualizar.
goto LCD_VisualizaCaracter ; Vuelve a visualizar el siguiente carácter
LCD_FinMovimiento ; de la línea.
return ; Vuelve al programa principal.

retardo_externo
MOVf R_ContAB,W
MOVWF R_ContAA ; +2 1 ciclo
loop
nop
DECFSZ R_ContAA, F ; paso 1 1 ciclo
GOTO loop ; paso 2 2 ciclos
return

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

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #56 en: 31 de Octubre de 2011, 22:26:03 »
Hola hersheysdark, lamentablemente yo no te puedo ayudar, ya que apenas estoy aprendiendo ensamblador, pero si te puedo aconsejar que abras un nuevo tema para que expongas tu problema, así lo pueden revisar más personas, y de paso este hilo queda solamente para las clases de ensamblador.

Estimados agauss y Vegepic:

Les agradezco mucho el tiempo que han invertido en subir sus códigos y compartirlos con nosotros, he realizado casi todos los ejercicios que puso el amigo Veguepic y gracias a estos ya comprendo mejor el funcionamiento del PC y de otras cosas que desconocia. Tambien muy agracecido con el amigo agauss por compartir sus simulaciones en proteus, que funcionan de 10!

Estaré esperando aprender más con ustedes en el futuro, un abrazo desde México.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado samulinkinpark

  • PIC10
  • *
  • Mensajes: 1
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #57 en: 13 de Diciembre de 2013, 14:50:39 »
Buenas tengo este ejercicio que me han mandado en clase y no se sinceramente como hacerlo. Estamos usando instrucciones basicas de pic, asi que me gustaria saber si alguien me lo podria resolver o ayudarme al menos y dejarmelo en plan basico.

Les dejo aqui el enunciado del problema:

Con los conmutadores de entrada RA2, RA1 y RA0 introduciremos un número binario.Se activarán un número de LEDs igual al número introducido en estas entradas. Por ejemplo, si el número en las entradas es ‘111’ (siete en binario), activaremos 7 LEDs, si el número en las entradas es ‘010’ (dos), activaremos dos LEDs. Comenzaremos siempre por el LED RB0. Para hacer el ejercicio, usaremos la instrucción ‘RLF’. :(  :(  :(

Yo lo he empezado asi pero no se continuar:

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

   LIST P=16F84A
    INCLUDE <P16F84A.INC>                                      ; En este fichero se definen las etiquetas del PIC.
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC       ; Configuración para el grabador.      

;----------------------------------------------------------------------------------------------------------------
; Preparar el hadrware

InicHw
                                                              ; preparar hardware
    bsf STATUS,RP0                                            ; Me paso al banco 1 para limpiar el registro TRIS B
    movlw b'00000000'                                 ; Ponemos en working inicialmente el estado 0;
   clrf  TRISB                                        ; Limpiamos el registro TRISB poniendolo a cero y asi configurando todas sus patas como salidas

    bcf STATUS,RP0                                              ; Volver al banco 0
   
   



;---------------------------------------------------------------------------------------------------------------
; Ahora procedemos con lo que nos pide el ejercicio
 empezamos
   
   bsf STATUS,C
   movlw b'00000111'                                          
     andwf PORTA,W

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #58 en: 13 de Diciembre de 2013, 15:16:28 »
Que tal samulinkinpark,

Aqui en el foro no se resuelve la tarea de la clase (al menos no gratis, yo puedo hacer tu codigo en assembler pero te costaría $150 USD pagables via paypal). Aqui en el foro ayudamos con algo que ya tengas hecho, pero no  a resolver tu tarea. Si te interesa que lo haga puedes realizar tu pago via paypal, enviandome primero un e-mail de confirmación que te interesa.

Saludos,

Elreypic.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ejemplos en Asembler PIC16F84A
« Respuesta #59 en: 13 de Diciembre de 2013, 15:26:16 »
samulinkinpark bienvenido al foro.

Abre un hilo nuevo con tu pregunta.

Busca un poco por el foro y encontraras lo que quieres hacer, que ademas es muy simple.

Pon un poco de interes en hacer el codigo, aunque sea mal y te echaremos una mano, pero como dice elreypic2 aqui no hacemos los trabajos de clase, aqui se vienen a aprender, no es el rincon del vago, ademas posiblemente tu profesor ande por aqui y te este controlando.

Espero que no te lo tomes a mal, pero la filosofia de este foro es "no le des un pez, enseñale a pescar"