Академический Документы
Профессиональный Документы
Культура Документы
;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
;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
ejecutarse
movlw 0x07
movwf CMCON
bsf
STATUS,
TRISB
movlw b'00000000'
movwf TRISB
bcf
STATUS,
movlw
movwf
call
movlw
movwf
call
goto
RP0
Loop
b'00000001'
PORTB
Delay
b'00000000'
PORTB
Delay
Loop
reg1
reg2
0x10
reg3
uno
reg2,f
dos
reg1,f
tres
;REGRESA
;REGRESA AL PROGRAMA
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
ORG 0
16F628,
CLRF PORTA
ejecutarse
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
;
;
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
END
; ------------------------------------------------------; -------------------------------------------------------;
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
b'00000000'
PORTA,0
STATUS,Z
LIMPIAR
movlw
xorwf
btfsc
goto
b'00000001'
PORTA,0
STATUS,Z
ACCION1
movlw
xorwf
btfsc
goto
b'00000010'
PORTA,0
STATUS,Z
ACCION2
movlw
xorwf
btfsc
goto
b'00000100'
PORTA,0
STATUS,Z
ACCION3
movlw
xorwf
btfsc
goto
b'00001000'
PORTA,0
STATUS,Z
ACCION4
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
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
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
REPETIR2
MOVPUERTOB2
call COMPRUEBA2
call Delay2
rlf
PORTB,1
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
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
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
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
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
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
reg2,f
uno1
reg1,f
dos1
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
b'00000000'
PORTA,0
STATUS,Z
CONTADOR
movlw
xorwf
btfsc
goto
b'00000001'
PORTA,0
STATUS,Z
GABRIELA
movlw
xorwf
btfsc
goto
b'00000010'
PORTA,0
STATUS,Z
ANGELICA
movlw
xorwf
btfsc
goto
b'00000011'
PORTA,0
STATUS,Z
LUIS
movlw
xorwf
btfsc
goto
b'00000100'
PORTA,0
STATUS,Z
WILLIAM
movlw
xorwf
btfsc
goto
b'00000101'
PORTA,0
STATUS,Z
BLADIMIR
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
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
; -------------------------------------------------------
reg2,f
uno
reg1,f
dos