Ejemplos en Ensamblador

Ejemplos de código en ASM.

Ejemplos en Ensamblador

Notapor biblioman » Mié May 18, 2011 3:45 pm

Hola a todos. Varios usuarios me han comentado la falta de un subforo para comentar ejemplos de programación de PIC hechos en lenguaje Ensamblador, así que aunque el sitio está enfocado a la programación en C, aquí está esta sección para el que quiera comentar o compartir sus ejemplos realizados en Assembler.

Un saludo
Avatar de Usuario
biblioman
Usuario Nivel 10
 
Mensajes: 2007
Registrado: Vie Mar 20, 2009 5:58 pm

Re: Ejemplos en Ensamblador

Notapor DIARCAPA » Mar Feb 05, 2013 10:07 am

Para comenzar les pongo un ejemplo de como desplegar en 4 displays de 7 segmentos los diferentes caracteres para colocar la palabra hola....


Código: Seleccionar todo
;_____Programa que despliega en 4 displays_____

LIST P=16F877A

INCLUDE "P16F877A.inc"


RET1   EQU   060H
RET2   EQU   061H
;RET3   EQU   062H

;   H = 06E
;   O = 0FC
;   L = 01C
;   A = 0EE

;   P = 0CE
;   A = 0EE
;   S = 0B6
;   E = 09E
;   . = 001

;   n = 02A
      ORG      00H
      GOTO   IN

      ORG      05H
IN      
      CLRF   STATUS
      BSF      STATUS,5
      BCF      STATUS,6       ; cambiamos al banco 1
      
      MOVLW   06H
      MOVWF   ADCON1          ; ponemos señales digitales en el puerto A
      MOVLW   03H
      MOVWF   TRISA          ; Inicializamos puertos
      MOVLW   00H
      MOVWF   TRISB
      
      BCF      STATUS,5
      CLRF   PORTA
      CLRF   PORTB
;________Comienza código______
      
SELECT   btfss   PORTB,0;   Si el interruptor está en 0, va al fácil; en 1, al difícil
      goto   BUCLEF
      goto   BUCLED   
      

;______Bucle del programa puesto en marcha por una secuencia de 4 pulsos

BUCLED

      clrf   PORTA
      clrf   PORTB      

      movlw   02H
      xorwf   PORTA,0
      btfsc   STATUS,Z
      call   RUTINA00

      goto   SELECT


;______Bucle del programa puesto en marcha por dos interruptores.

BUCLEF
      clrf   PORTA
      clrf   PORTB
      
      movlw   00H
      xorwf   PORTA,0
      btfsc   STATUS,Z
      call   RUTINA00

      movlw   01H
      xorwf   PORTA,0
      btfsc   STATUS,Z
      call   RUTINA01

      movlw   02H
      xorwf   PORTA,0
      btfsc   STATUS,Z
      call   RUTINA10

      movlw   03H
      xorwf   PORTA,0
      btfsc   STATUS,Z
      call   RUTINA11
      
      goto   SELECT


;***********************************************
;_________Zona de subrutinas____________________
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/


RUTINA00

      movlw    38H
      movwf   PORTA
      movlw   2AH
      movwf   PORTB
      
      call   RETRASO
      
      movlw   34H
      movwf   PORTA
      
      call    RETRASO

      movlw   2CH
      movwf   PORTA
      
      call   RETRASO

      movlw   1CH
      movwf   PORTA
      
      call   RETRASO

      clrf   PORTA

      return

RUTINA01
      
      movlw    38H
      movwf   PORTA
      movlw   6EH
      movwf   PORTB

      call   RETRASO      
      
      movlw   34H
      movwf   PORTA
      movlw   0FCH
      movwf   PORTB
      
      call    RETRASO

      movlw   2CH
      movwf   PORTA
      movlw   1CH
      movwf   PORTB

      call   RETRASO

      movlw   1CH
      movwf   PORTA
      movlw   0EEH
      movwf   PORTB

      call   RETRASO

      clrf   PORTA      

      return

RUTINA10

      movlw    38H
      movwf   PORTA
      movlw   0CEH
      movwf   PORTB
      
      call   RETRASO
      
      movlw   34H
      movwf   PORTA
      movlw   0EEH
      movwf   PORTB
      
      call    RETRASO

      movlw   2CH
      movwf   PORTA
      movlw   0B6H
      movwf   PORTB

      call   RETRASO

      movlw   1CH
      movwf   PORTA
      movlw   09EH
      movwf   PORTB

      call   RETRASO

      clrf   PORTA

      return

RUTINA11

      clrf   PORTB   
      clrf   PORTA

      return
      
;___________Retardo de 5 ms________

RETRASO

      movlw   0E6H
      movwf   RET1

DEL1   movlw   04H
      movwf   RET2

;DEL2   movlw   .247
;      movwf   RET3

;DEL3    decfsz   RET3,1
;      goto   DEL3
      
DEL2   decfsz   RET2,1
      goto   DEL2

      decfsz   RET1,1
      goto   DEL1

      return
END



es divertido realizarlo cuando vas iniciando y se puede ver como crear un retardo con instrucciónes del pic sin usar temporizadores al principio....
DIARCAPA
Nuevo Usuario Registrado
 
Mensajes: 2
Registrado: Mar Feb 05, 2013 9:59 am

Re: Ejemplos en Ensamblador

Notapor biblioman » Mar Feb 05, 2013 12:46 pm

Hola DIARCAPA. Bienvenido al foro y gracias por el ejemplo. El ensamblador es un lenguaje que nunca hay que dejar de lado.

Un saludo
Avatar de Usuario
biblioman
Usuario Nivel 10
 
Mensajes: 2007
Registrado: Vie Mar 20, 2009 5:58 pm

Re: Ejemplos en Ensamblador

Notapor Psycho » Jue Mar 07, 2013 9:19 pm

Hola, necesito ayuda para realizar un codigo en ensamblador para el pic 18f4550 que contenga un adc y comunicacion usb.
Gracias
Psycho
Nuevo Usuario Registrado
 
Mensajes: 4
Registrado: Jue Mar 07, 2013 5:55 am

Re: Ejemplos en Ensamblador

Notapor Juergui » Sab Feb 22, 2014 3:54 pm

Hola!
Soy nuevo, vi este subforo y es justo donde ando yo últimamente aprendiendo e investigando.
Voy a subir un pequeño código del primer proyecto en asm para un pic16f627A, se trata de mostar en un display de 8segmentos codificado un número ascendente del 0-9 mediante la pulsación de un pulsador.
El código es el siguiente:
Código: Seleccionar todo
list p=16F627
#include <p16f627.inc>
temporal equ 0x20 ;dirección de la memoria donde guardaremos el valor
    org 00 ; indica la dirección de la memoria de inicio del programa
    goto main  ;manda el programa a la etiqueta main
    org 05 ;
main
    bsf STATUS,RP0     ;Paso al banco 0
    bcf STATUS,RP1    ;esto es también parte de para pasar al banco 0
    movlw b'01000'     ;RA3 Entrada = '1'
    movwf TRISA       ;mueve el valor de W a el registro f
    clrf TRISB          ;PORTB Salidas
    bcf STATUS,RP0      ;Regreso al Banco 0
    clrf temporal       ;Inicializo Cuenta
    clrf PORTB          ;y Inicializo puerto
infinito                   ;etiqueta infinito
    btfsc PORTA,3       ;si se presiona RA3
    goto infinito       ;mueve el cursor del programa a la etiqueta infinito
espera                   ;etiqueta espera
    btfss PORTA,3       ;Antirebote
    goto espera       ;mueve el cursor del programa a la etiqueta infinito
    incf temporal,W       ;incrementa en 1 el valor de temporal
    andlw 0x0F          ;Me aseguro q no llegue al limite 15 = 0x0F = b'1111'
                         
    movwf temporal
    movwf PORTB
    goto infinito
END


Me parece que es un ejemplo bueno y visual para iniciarse. Suerte!
Solo hay 10 tipos de personas, las que entienden este mensaje y las que no.
Juergui
Usuario Registrado
 
Mensajes: 5
Registrado: Sab Feb 22, 2014 2:37 pm

Re: Ejemplos en Ensamblador

Notapor cuajoneta » Vie Oct 03, 2014 10:49 am

me será útil, gracias.
cuajoneta
Usuario Registrado
 
Mensajes: 5
Registrado: Vie Oct 03, 2014 10:33 am


Volver a Programación PIC en Ensamblador

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado