Вы находитесь на странице: 1из 22

;EJEMPLO DE PROGRAMA

;Realizamos en un editor el siguiente listado de programa que llamaremos


;EJ1.ASM
; ------------------------------------------------------; EL SIGUIENTE PROGRAMA SUMA 05 Y 02
; -------------------------------------------------------LIST P=16F628A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
#include <p16F628A.inc>
; processor specific variable definitions
RADIX HEX
SUMA1 EQU 0X20 ; DIRECCION HEXADECIMAL DEL OPERANDO 1
SUMA2 EQU 0X21 ; DIRECCION DEL SEGUNDO OPERANDO
RESUL EQU 0X22 ; DIRECCION DEL RESULTADO
; -------------------------------------------------; Se han definido 3 variables SUMA,SUMA2 y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; -------------------------------------------------ORG 0
; --------------------------------------------------; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilacin
; ---------------------------------------------------movlw 0X05 ; PONEMOS 05 en hexadecimal EN W
movwf SUMA1 ; PASAMOS W A LA MEMORIA SUMA1
movlw 0X02 ; PONEMOS 02 Hex EN W
movwf SUMA2 ; PASAMOS W A LA MEMORIA SUMA2
movf SUMA1,0 ; PONEMOS EN W SUMA1 = 05
addwf SUMA2 , 0 ; SUMAMOS W+SUMA2 Y EL RESULTADO EN W
movwf RESUL ; PONEMOS VALOR ACUMULADOR EN RESUL
END ; FIN DE PROGRAMA

;EJEMPLO DE PROGRAMA
;Realizamos en un editor el siguiente listado de programa que llamaremos
;RESTA OPER1 IGUAL OPER2.ASM
; ------------------------------------------------------; EL SIGUIENTE PROGRAMA RESTA DOS NUMEROS OPER1 IGUAL A OPER2
; -------------------------------------------------------LIST P=16F628A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
#include <p16F628A.inc>
; processor specific variable definitions
RADIX HEX
OPER1 EQU 0X20 ; DIRECCION HEXADECIMAL DEL OPERANDO 1
OPER2 EQU 0X21 ; DIRECCION HEXADECIMAL DEL OPERANDO 2
RESUL EQU 0X22 ; DIRECCION HEXADECIMAL DEL RESULTADO
; -------------------------------------------------; Se han definido 3 variables OPER1,OPER2 y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; -------------------------------------------------ORG 0
; --------------------------------------------------; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilacin
; ---------------------------------------------------movlw 0X08 ; PONEMOS 08 en hexadecimal EN W
movwf OPER1 ; PASAMOS W A LA MEMORIA OPER1
movlw 0X08 ; PONEMOS 08 Hex EN W
movwf OPER2 ; PASAMOS W A LA MEMORIA OPER2
movf OPER1,0 ; PONEMOS EN W OPER1 = 08
subwf OPER2 , 0 ; RESTAMOS OPER2-W Y EL RESULTADO EN W
movwf RESUL ; PONEMOS VALOR ACUMULADOR EN RESUL
END ; FIN DE PROGRAMA
;EJEMPLO DE PROGRAMA
;Realizamos en un editor el siguiente listado de programa que llamaremos
;RESTA OPER1 MAYOR OPER2.ASM
; ------------------------------------------------------; EL SIGUIENTE PROGRAMA RESTA DOS NUMEROS OPER1 MAYOR A OPER2
; -------------------------------------------------------LIST P=16F628A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
#include <p16F628A.inc>
; processor specific variable definitions
RADIX HEX
OPER1 EQU 0X20 ; DIRECCION HEXADECIMAL DEL OPERANDO 1
OPER2 EQU 0X21 ; DIRECCION HEXADECIMAL DEL OPERANDO 2
RESUL EQU 0X22 ; DIRECCION HEXADECIMAL DEL RESULTADO
; -------------------------------------------------; Se han definido 3 variables OPER1,OPER2 y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; -------------------------------------------------ORG 0
; --------------------------------------------------; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilacin
; ---------------------------------------------------movlw 0X09 ; PONEMOS 09 en hexadecimal EN W
movwf OPER1 ; PASAMOS W A LA MEMORIA OPER1
movlw 0X05 ; PONEMOS 05 Hex EN W

movwf OPER2 ; PASAMOS W A LA MEMORIA OPER2


movf OPER1,0 ; PONEMOS EN W OPER1 = 09
subwf OPER2 , 0 ; RESTAMOS OPER2-W Y EL RESULTADO EN W
movwf RESUL ; PONEMOS VALOR ACUMULADOR EN RESUL
END ; FIN DE PROGRAMA
;EJEMPLO DE PROGRAMA
;Realizamos en un editor el siguiente listado de programa que llamaremos
;RESTA OPER1 MENOR OPER2.ASM
; ------------------------------------------------------; EL SIGUIENTE PROGRAMA RESTA DOS NUMEROS OPER1 MENOR A OPER2
; -------------------------------------------------------LIST P=16F628A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
#include <p16F628A.inc>
; processor specific variable definitions
RADIX HEX
OPER1 EQU 0X20 ; DIRECCION HEXADECIMAL DEL OPERANDO 1
OPER2 EQU 0X21 ; DIRECCION HEXADECIMAL DEL OPERANDO 2
RESUL EQU 0X22 ; DIRECCION HEXADECIMAL DEL RESULTADO
; -------------------------------------------------; Se han definido 3 variables OPER1,OPER2 y RESUL
; en diferentes posiciones de la memoria de datos
; en el REGISTER FILE MAP
; -------------------------------------------------ORG 0
; --------------------------------------------------; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilacin
; ---------------------------------------------------movlw 0X03 ; PONEMOS 03 en hexadecimal EN W
movwf OPER1 ; PASAMOS W A LA MEMORIA OPER1
movlw 0X07 ; PONEMOS 07 Hex EN W
movwf OPER2 ; PASAMOS W A LA MEMORIA OPER2
movf OPER1,0 ; PONEMOS EN W OPER1 = 03
subwf OPER2 , 0 ; RESTAMOS OPER2-W Y EL RESULTADO EN W
movwf RESUL ; PONEMOS VALOR ACUMULADOR EN RESUL
END ; FIN DE PROGRAMA

;EJEMPLO DE PROGRAMA
;Realizamos en un editor el siguiente listado de programa que llamaremos
;EJ1.ASM
; ------------------------------------------------------; -------------------------------------------------------LIST P=16F628A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
#include <p16F628A.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF &
_MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT ;configuramos
(oscilador, tipo etc.)
RADIX HEX
reg1 EQU 0X20
reg2 EQU 0X21
reg3 EQU 0X22

org
16F628,

0x0000

;org coloca el programa en el origen, 0x0000 para el


;Por aqu es por donde empieza el programa a

ejecutarse
movlw 0x07
movwf CMCON
bsf

STATUS,

;Deshabilito los comparadores


RP0

;Selecciono el Bank 1 para poder acceder a

TRISB
movlw b'00000000'
movwf TRISB
bcf
STATUS,

;Configuro todo el PortB para que sea de salida

movlw
movwf
call
movlw
movwf
call
goto

;Pongo a '1' el primer bit del PortB

RP0

;Selecciono de nuevo el Bank 0

Loop
b'00000001'
PORTB
Delay
b'00000000'
PORTB
Delay
Loop

Delay movlw 0x30


movwf
tres
movlw 0x40
movwf
dos
movlw
movwf
uno
decfsz reg3,f
goto
decfsz
goto
decfsz
goto
return
end

;Llamo a la rutina que espera ...


;Pongo a '0' el primer bit del PortB
;Llamo de nuevo a la rutina que espera ...
;Salto al comienzo y as hasta el infinito
;Espero 250 ms (Para un reloj de 4 MHz)

reg1
reg2
0x10
reg3
uno
reg2,f
dos
reg1,f
tres

;RULETA CON DIFERENTES DURACIONES DE PULSOS


;Realizamos en un editor el siguiente listado de programa que llamaremos
;RULETA.ASM
; ------------------------------------------------------; -------------------------------------------------------;
LIST P=16F877A; Modelo de PIC
; list directive to define processor
#include <p16F877A.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
reg1 EQU 0X20
reg2 EQU 0X21
reg3 EQU 0X22
cont EQU 0X23
ORG 0
;org coloca el programa en el origen, 0x000 para el 16F877A, Por aqu
es por donde empieza el programa a ejecutarse
goto PROGRAMA
org 0x05
btfss INTCON,TMR0IF
retfie
rlf cont
bcf INTCON,TMR0IF
bsf
INTCON,GIE
retfie

;REGRESA
;REGRESA AL PROGRAMA

; ------------------------------------------------------; CONFIGURACION DE RECUROS


; -------------------------------------------------------PROGRAMA
movlw 0x01
movwf cont
bsf
STATUS,RP0 ;Selecciono el Bank 1 para poder acceder a TRISB
movlw 0X00
;Configuro todo el PortB para que sea de salida
movwf TRISB
movlw b'00000110'
movwf OPTION_REG
clrf
INTCON
bsf
INTCON,TMR0IE
bsf
INTCON,GIE
;movlw b'10100000'
;movwf INTCON
bcf
STATUS,RP0 ;Selecciono de nuevo el Bank 0
DISPLAY
btfsc cont,0
goto cero
btfsc cont,0
goto uno
btfsc cont,0
goto dos
btfsc cont,0
goto tres
btfsc cont,0
goto cuatro

btfsc cont,0
goto cinco
btfsc cont,0
goto seis
btfsc cont,0
goto siete
btfsc cont,0
goto ocho
btfsc cont,0
goto nueve
cero
movlw b'00111111'
movwf PORTB
return
uno
movlw b'00000110'
movwf PORTB
return
dos
movlw b'01011011'
movwf PORTB
return
tres
movlw b'01001111'
movwf PORTB
return
cuatro
movlw b'01100110'
movwf PORTB
return
cinco
movlw b'01101101'
movwf PORTB
return
seis
movlw b'01111100'
movwf PORTB
return
siete
movlw b'00000111'
movwf PORTB
return
ocho
movlw b'01111111'
movwf PORTB
return
nueve
movlw b'01100111'
movwf PORTB
return

goto DISPLAY
end

;EJEMPLO DE PROGRAMA
;Realizamos en un editor el siguiente listado de programa que llamaremos
;EJ3.ASM
; ------------------------------------------------------; -------------------------------------------------------;
LIST P=16F877A; Modelo de PIC
;
list
p=16f628A
; list directive to define processor
;
#include <p16F628A.inc>
; processor specific variable definitions
;
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF &
_MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT ;configuramos
(oscilador, tipo etc.)
;__config 0x3D18
;
RADIX HEX
;#include <p16f877a.inc>

list
p=16f877A
; list directive to define processor
#include <p16f877a.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
;
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC &
_WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF

reg1 EQU 0X20


reg2 EQU 0X21
reg3 EQU 0X22
count1 equ 0x24
cmcon equ 0x1F

ORG 0
16F628,
CLRF PORTA
ejecutarse

;org coloca el programa en el origen, 0x0000 para el


;Por aqu es por donde empieza el programa a

; ------------------------------------------------------; CONFIGURACION DE RECUROS


; -------------------------------------------------------BCF
bsf
movlw
movwf
movlw
movwf
movlw
movwf
bcf

STATUS,RP1
STATUS,RP0 ;Selecciono el Bank 1 para poder acceder a TRISB
0X07
ADCON1
;Deshabilito los comparadores
0xFF
TRISA
0X00
;Configuro todo el PortB para que sea de salida
TRISB
STATUS,RP0 ;Selecciono de nuevo el Bank 0

; ------------------------------------------------------; INICIO DE CICLO REPETITIVO


; -------------------------------------------------------LECTURA movf PORTA,0

;
;

andlw 0x0F
movlw 0X08
movwf PORTA
call DECODIFICAR
goto LECTURA

DECODIFICAR
call DISPLAY
movwf PORTB
;
call Delay
return
; ------------------------------------------------------;subrutina display
; -------------------------------------------------------DISPLAY
addwf PCL,1
retlw 0x3f
;0 0000
retlw 0x06
;1 0001
retlw 0x5b
;2 0010
retlw 0x4f
;3 0011
retlw 0x66
;4 0100
retlw 0x6d
;5 0101
retlw 0x7d
;6 0110
retlw 0x07
;7 0111
retlw 0x7f
;8 1000
retlw 0x6f
;9 1001
retlw 0x77
;A 1010
retlw 0x7c
;B 1011
retlw 0x39
;C 1100
retlw 0x5e
;D 1101
retlw 0x79
;E 1110
retlw 0x71
;F 1111
return
; ------------------------------------------------------;SUBRUTINA DELAY
; -------------------------------------------------------Delay movlw
movwf
d1
decfsz
goto
return

d'3'
count1
count1 ,f
d1

;Espero 250 ms (Para un reloj de 4 MHz)

END

;RULETA CON DIFERENTES DURACIONES DE PULSOS


;Realizamos en un editor el siguiente listado de programa que llamaremos
;RULETA.ASM

; ------------------------------------------------------; -------------------------------------------------------;
LIST P=16F877A; Modelo de PIC
; list directive to define processor
#include <p16F877A.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
reg1 EQU 0X20
reg2 EQU 0X21
reg3 EQU 0X22
ORG 0
;org coloca el programa en el origen, 0x000 para el 16F877A, Por aqu
es por donde empieza el programa a ejecutarse
; ------------------------------------------------------; CONFIGURACION DE RECUROS
; -------------------------------------------------------bsf
STATUS,RP0
;Selecciono el Bank 1 para poder acceder a TRISA
movlw 0X07
movwf ADCON1
;Deshabilito los comparadores
movlw b'00001111'
;Configuro 4 bits menos significativos del PortA para
que sean de entrada
movwf TRISA
bcf
STATUS,RP0
;Selecciono de nuevo el Bank 0
bsf
STATUS,RP0
;Selecciono el Bank 1 para poder acceder a TRISB
movlw 0x00
;Configuro todo el PortB para que sea de salida
movwf TRISB
bcf
STATUS,RP0
;Selecciono de nuevo el Bank 0
bsf
STATUS,RP0
;Selecciono el Bank 1 para poder acceder a TRISC
movlw 0x00
;Configuro todo el PortC para que sea de salida
movwf TRISC
bcf
STATUS,RP0
;Selecciono de nuevo el Bank 0
clrf PORTB
clrf PORTC

;Pongo 0 en todos los bits de PORTB


;Pongo 0 en todos los bits de PORTC

; ------------------------------------------------------; INICIO DE CICLO REPETITIVO


; -------------------------------------------------------LECTURA
movlw
xorwf
btfsc
goto

b'00000000'
PORTA,0
STATUS,Z
LIMPIAR

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000001'
PORTA,0
STATUS,Z
ACCION1

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000010'
PORTA,0
STATUS,Z
ACCION2

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000100'
PORTA,0
STATUS,Z
ACCION3

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00001000'
PORTA,0
STATUS,Z
ACCION4

; verificacin de OPCION respecto a W


; verificando la bandera Z

goto LECTURA
LIMPIAR
clrf PORTB
clrf PORTC
goto LECTURA
ACCION1
call COMPRUEBA1
call Delay1
bcf
PORTC,7
bsf
PORTB,0
bcf
STATUS,0
goto REPETIR1
REPETIR1
MOVPUERTOB1
call COMPRUEBA1
call Delay1
rlf
PORTB,1

;Pongo 0 en todos los bits de PORTB


;Pongo 0 en todos los bits de PORTC

; Inicio del programa


; Comprueba que esta todavia en la ACCION1
; Demora de 0.5 s
; Apaga RC7
; Prende RB0
; Limpia el carry de STATUS

; Comprueba que esta todavia en la ACCION1


; Demora de 0.5 s
; Rota el contenido de PORTB a la

izquierda
btfss PORTB,7
; Hasta que prenda RB7, luego se salta
goto MOVPUERTOB1 ; una linea
call COMPRUEBA1
call Delay1
bcf
PORTB,7
bsf
PORTC,0
bcf
STATUS,0

; Comprueba que esta todavia en la ACCION1


; Demora de 0.5 s
; Apaga RB7
; Prende RC0
; Limpia el carry de STATUS

MOVPUERTOC1
call COMPRUEBA1
; Comprueba que esta todavia en la ACCION1
call Delay1
; Demora de 0.5 s
rlf
PORTC,1
; Rota el contenido de PORTC a la izquierda
btfss PORTC,7
; Hasta que prenda RC7, luego salta
goto MOVPUERTOC1 ; una linea
goto LECTURA
; va a inicio
COMPRUEBA1
btfss PORTA,0
goto
LECTURA
return
ACCION2
call COMPRUEBA2
call Delay2
bcf
PORTC,7
bsf
PORTB,0
bcf
STATUS,0
goto REPETIR2

; Inicio del programa


; Comprueba que esta todavia en la ACCION2
; Demora de 100 ms
; Apaga RC7
; Prende RB0
; Limpia el carry de STATUS

REPETIR2
MOVPUERTOB2
call COMPRUEBA2
call Delay2
rlf
PORTB,1

; Comprueba que esta todavia en la ACCION2


; Demora de 1 s
; Rota el contenido de PORTB a la

izquierda
calL COMPRUEBA2
btfss PORTB,7
; Hasta que prenda RB7, luego se salta
goto MOVPUERTOB2 ; una linea
call COMPRUEBA2
call Delay2
bcf
PORTB,7
bsf
PORTC,0
bcf
STATUS,0

; Comprueba que esta todavia en la ACCION2


; Demora de 1 s
; Apaga RB7
; Prende RC0
; Limpia el carry de STATUS

MOVPUERTOC2
call COMPRUEBA2
; Comprueba que esta todavia en la ACCION2
call
Delay2 ; Demora de 1 s
rlf
PORTC,1
; Rota el contenido de PORTC a la izquierda
btfss PORTC,7
; Hasta que prenda RC7, luego salta
goto MOVPUERTOC2 ; una linea
goto LECTURA
; va a inicio
COMPRUEBA2
btfss PORTA,1
goto
LECTURA
return
ACCION3
call COMPRUEBA3
call Delay3
bcf
PORTC,7
bsf
PORTB,0
bcf
STATUS,0
goto REPETIR3
REPETIR3
MOVPUERTOB3
call COMPRUEBA3
call Delay3
rlf
PORTB,1

; Inicio del programa


; Comprueba que esta todavia en la ACCION3
; Demora de 3 s
; Apaga RC7
; Prende RB0
; Limpia el carry de STATUS

; Comprueba que esta todavia en la ACCION3


; Demora de 3 s
; Rota el contenido de PORTB a la

izquierda
btfss PORTB,7
; Hasta que prenda RB7, luego se salta
goto MOVPUERTOB3 ; una linea
call COMPRUEBA3
call Delay3
bcf
PORTB,7
bsf
PORTC,0
bcf
STATUS,0

; Comprueba que esta todavia en la ACCION3


; Demora de 3 s
; Apaga RB7
; Prende RC0
; Limpia el carry de STATUS

MOVPUERTOC3
call COMPRUEBA3
; Comprueba que esta todavia en la ACCION3
call Delay3
; Demora de 3 s
rlf
PORTC,1
; Rota el contenido de PORTC a la izquierda
btfss PORTC,7
; Hasta que prenda RC7, luego salta
goto MOVPUERTOC3 ; una linea
goto LECTURA
; va a inicio

COMPRUEBA3
btfss PORTA,2
goto
LECTURA
return
ACCION4
call COMPRUEBA4
call Delay4
bcf
PORTC,7
bsf
PORTB,0
bcf
STATUS,0
goto REPETIR4
REPETIR4
MOVPUERTOB4
call COMPRUEBA4
call Delay4
rlf
PORTB,1

; Inicio del programa


; Comprueba que esta todavia en la ACCION4
; Demora de 5 s
; Apaga RC7
; Prende RB0
; Limpia el carry de STATUS

; Comprueba que esta todavia en la ACCION4


; Demora de 5 s
; Rota el contenido de PORTB a la

izquierda
btfss PORTB,7
; Hasta que prenda RB7, luego se salta
goto MOVPUERTOB4 ; una linea
call COMPRUEBA4
call Delay4
bcf
PORTB,7
bsf
PORTC,0
bcf
STATUS,0

; Comprueba que esta todavia en la ACCION4


; Demora de 5 s
; Apaga RB7
; Prende RC0
; Limpia el carry de STATUS

MOVPUERTOC4
call COMPRUEBA4
; Comprueba que esta todavia en la ACCION4
call Delay4
; Demora de 5 s
rlf
PORTC,1
; Rota el contenido de PORTC a la izquierda
call COMPRUEBA4
btfss PORTC,7
; Hasta que prenda RC7, luego salta
goto MOVPUERTOC4 ; una linea
goto LECTURA
; va a inicio
COMPRUEBA4
btfss PORTA,3
goto
LECTURA
return
; ------------------------------------------------------;SUBRUTINA DELAY DE LAS SECUENCIAS
; -------------------------------------------------------Delay1 movlw 0xEF
movwf
dos1 movlw 0xE8
movwf
uno1 clrwdt
dem11 goto dem12
dem12 goto dem13
dem13 clrwdt
decfsz
goto
decfsz
goto
dem14 goto dem15

;Espero 0.5 s (Para un reloj de 4 MHz)


reg1
reg2

reg2,f
uno1
reg1,f
dos1

dem15 goto dem16


dem16 goto dem17
dem17 clrwdt
return
Delay2 movlw 0x0E
movwf
tres2 movlw 0x48
movwf
dos2 movlw 0xF7
movwf
uno2 clrwdt
decfsz
goto
decfsz
goto
decfsz
goto
dem21 goto dem22
dem22 clrwdt
return
Delay3 movlw 0x43
movwf
tres3 movlw 0x5B
movwf
dos3 movlw 0x7A
movwf
uno3 clrwdt
decfsz
goto
decfsz
goto
decfsz
goto
dem31 goto dem32
dem32 clrwdt
return
Delay4 movlw 0xA5
movwf
tres4 movlw 0x29
movwf
dos4 movlw 0x93
movwf
uno4 clrwdt
clrwdt
decfsz
goto
decfsz
goto
decfsz
goto
return

;Espero 1 s (Para un reloj de 4 MHz)


reg1
reg2
reg3
reg3,f
uno2
reg2,f
dos2
reg1,f
tres2

;Espero 3 s (Para un reloj de 4 MHz)


reg1
reg2
reg3
reg3,f
uno3
reg2,f
dos3
reg1,f
tres3

;Espero 5 s (Para un reloj de 4 MHz)


reg1
reg2
reg3

reg3,f
uno4
reg2,f
dos4
reg1,f
tres4

end
;PRUEBA SEGUNDO PARCIAL
;Realizamos en un editor el siguiente listado de programa que llamaremos
;PRUEBA.ASM

; ------------------------------------------------------; -------------------------------------------------------;
LIST P=16F877A; Modelo de PIC
; list directive to define processor
#include <p16F877A.inc>
; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
reg1 EQU 0X20
reg2 EQU 0X21
reg3 EQU 0X22
com1 EQU 0X23
com2 EQU 0X24
com3 EQU 0X25
com4 EQU 0X26
com5 EQU 0X27
com6 EQU 0X27
ORG 0
;org coloca el programa en el origen, 0x000 para el 16F877A, Por aqu
es por donde empieza el programa a ejecutarse
; ------------------------------------------------------; CONFIGURACION DE RECUROS
; -------------------------------------------------------bsf
STATUS,RP0
;Selecciono el Bank 1 para poder acceder a TRISA
movlw 0X07
movwf ADCON1
;Deshabilito los comparadores
movlw b'00001111'
;Configuro 4 bits menos significativos del PortA para
que sean de entrada
movwf TRISA
bcf
STATUS,RP0
;Selecciono de nuevo el Bank 0
bsf
STATUS,RP0
;Selecciono el Bank 1 para poder acceder a TRISB
movlw 0x00
;Configuro todo el PortB para que sea de salida
movwf TRISB
bcf
STATUS,RP0
;Selecciono de nuevo el Bank 0
clrf PORTB

;Pongo 0 en todos los bits de PORTB

; ------------------------------------------------------; INICIO DE CICLO REPETITIVO


; -------------------------------------------------------LECTURA
movlw
xorwf
btfsc
goto

b'00000000'
PORTA,0
STATUS,Z
CONTADOR

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000001'
PORTA,0
STATUS,Z
GABRIELA

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000010'
PORTA,0
STATUS,Z
ANGELICA

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000011'
PORTA,0
STATUS,Z
LUIS

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000100'
PORTA,0
STATUS,Z
WILLIAM

; verificacin de OPCION respecto a W


; verificando la bandera Z

movlw
xorwf
btfsc
goto

b'00000101'
PORTA,0
STATUS,Z
BLADIMIR

; verificacin de OPCION respecto a W


; verificando la bandera Z

goto LECTURA
CONTADOR
movlw b'01100111'
movwf com1
call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'00000110'
movwf PORTB

;1

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01100110'
movwf PORTB

;4

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'00000111'
movwf PORTB

;7

call Delay
movlw b'01111111'
movwf PORTB

;8

call Delay
movlw b'01100111'
movwf PORTB

;9

call Delay
movlw b'01100111'
xorwf com1,0
btfsc STATUS,Z
goto LIMPIAR

;9
; verificacin de OPCION respecto a W
; verificando la bandera Z

goto LECTURA
LIMPIAR
clrf PORTB
goto LECTURA

;Pongo 0 en todos los bits de PORTB

GABRIELA
movlw b'01011011'
movwf com2
call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'00000111'
movwf PORTB

;7

call Delay
movlw b'00000110'
movwf PORTB

;1

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01000000'
movwf PORTB

;-

call Delay
movlw b'01011011'

;2

movwf PORTB
call Delay
movlw b'01011011'
xorwf com2,0
btfsc STATUS,Z
goto LIMPIAR

;2
; verificacin de OPCION respecto a W
; verificando la bandera Z

goto LECTURA
ANGELICA
movlw b'01111111'
movwf com3

;8

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'00000110'
movwf PORTB

;1

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'01000000'
movwf PORTB

;-

call Delay
movlw b'01111111'
movwf PORTB

;8

call Delay

movlw b'01111111'
xorwf com3,0
btfsc STATUS,Z
goto LIMPIAR

;8
; verificacin de OPCION respecto a W
; verificando la bandera Z

goto LECTURA
LUIS
movlw b'00000110'
movwf com4

;1

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01100110'
movwf PORTB

;4

call Delay
movlw b'01100110'
movwf PORTB

;4

call Delay
movlw b'01100111'
movwf PORTB

;9

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'01100111'
movwf PORTB

;9

call Delay
movlw b'01100111'
movwf PORTB

;9

call Delay
movlw b'01000000'
movwf PORTB

;-

call Delay
movlw b'00000110'
movwf PORTB

;1

call Delay
movlw b'00000110'
xorwf com4,0

;1
; verificacin de OPCION respecto a W

btfsc STATUS,Z
goto LIMPIAR

; verificando la bandera Z

goto LECTURA
WILLIAM
movlw b'01001111'
movwf com5

;3

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01011011'
movwf PORTB

;2

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01100110'
movwf PORTB

;4

call Delay
movlw b'01111100'
movwf PORTB

;6

call Delay
movlw b'00000111'
movwf PORTB

;7

call Delay
movlw b'01100111'
movwf PORTB

;9

call Delay
movlw b'01000000'
movwf PORTB

;-

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01001111'
xorwf com5,0
btfsc STATUS,Z
goto LIMPIAR

;3
; verificacin de OPCION respecto a W
; verificando la bandera Z

goto LECTURA
BLADIMIR
movlw b'01100110'
movwf com6

;4

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'00111111'
movwf PORTB

;0

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01001111'
movwf PORTB

;3

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'01101101'
movwf PORTB

;5

call Delay
movlw b'00000110'
movwf PORTB

;1

call Delay
movlw b'00000111'
movwf PORTB

;7

call Delay
movlw b'01000000'
movwf PORTB

;-

call Delay
movlw b'01100110'
movwf PORTB

;4

call Delay
movlw b'01100110'
xorwf com6,0
btfsc STATUS,Z
goto LIMPIAR

;4
; verificacin de OPCION respecto a W
; verificando la bandera Z

goto LECTURA
; -------------------------------------------------------

;SUBRUTINA DELAY DE LAS SECUENCIAS


; -------------------------------------------------------Delay movlw 0xEF
movwf
dos
movlw
movwf
uno
clrwdt
dem1 goto dem2
dem2 goto dem3
dem3 clrwdt
decfsz
goto
decfsz
goto
dem4 goto dem5
dem5 goto dem6
dem6 goto dem7
dem7 clrwdt
return
end

;Espero 0.5 s (Para un reloj de 4 MHz)


reg1
0xE8
reg2

reg2,f
uno
reg1,f
dos

Вам также может понравиться