Documente Academic
Documente Profesional
Documente Cultură
;******************************************************************************
;Configuration bits
;******************************************************************************
;Reset vector
; This code will start executing when a reset occurs.
RESET_VECTOR ORG 0
;******************************************************************************
;Start of main program
; The main program code is placed here.
ORG 0x1000
Main ; *** main code goes here **
call cfgptos
inicio
movlw 0x01
movwf LATA
call retardo2
movlw 0x00
movwf LATA
call retardo2
goto inicio
; end of main
;******************************************************************************
; Start of subrutines
;******************************************************************************
cfgptos
movlw 0x0F
movwf ADCON1
movlw 0x07
movwf CMCON
movlw 0x00
movwf TRISA
return
retardo
push w
movlw d'240'
movwf VAR
otra
NOP
NOP
decfsz VAR
goto otra
pop w
return
retardo1
movlw d'100'
movwf VAR1
otra1
call retardo
decfsz VAR1
goto otra1
return
retardo2
movlw d'100'
movwf VAR2
otra2
call retardo1
decfsz VAR2
goto otra2
return
;******************************************************************************
;End of program
END
N1 equ 0x10
M equ 0x20
Nx equ 0x30
Mx equ 0x40
P2 equ 0x41
ORG 0X1000
Main:
LCD2
CALL LCD_IN
CALL I1
CALL NEXT
CALL I22
RETURN
I1
MOVLW 'M'
MOVWF PORTB
CALL MANDAR
MOVLW 'A'
MOVWF PORTB
CALL MANDAR
MOVLW 'N'
MOVWF PORTB
CALL MANDAR
MOVLW 'U'
MOVWF PORTB
CALL MANDAR
MOVLW 'E'
MOVWF PORTB
CALL MANDAR
MOVLW 'L'
MOVLW ' '
MOVWF PORTB
I22
MOVLW 'P'
MOVWF PORTB
CALL MANDAR
MOVLW 'E'
MOVWF PORTB
CALL MANDAR
MOVLW 'R'
MOVWF PORTB
CALL MANDAR
MOVLW 'E'
MOVWF PORTB
CALL MANDAR
MOVLW 'Z'
MOVWF PORTB
CALL MANDAR
MOVLW '.'
MOVWF PORTB
CALL MANDAR
MOVLW 'V'
MOVWF PORTB
CALL MANDAR
MOVLW 'E'
MOVWF PORTB
CALL MANDAR
MOVLW 'G'
MOVWF PORTB
CALL MANDAR
MOVLW 'A'
MOVWF PORTB
CALL MANDAR
MOVLW '.'
MOVWF PORTB
CALL MANDAR
CALL PAUSA
RETURN
LCD_IN
BCF PORTA, 1; RS = 0
MOVLW 0X01
MOVWF PORTB
CALL EJECUTA
MOVLW 0X0C
MOVWF PORTB
CALL EJECUTA
MOVLW 0X3C
MOVWF PORTB
CALL EJECUTA
BSF PORTA, 0; RS = 1
RETURN
EJECUTA
BSF PORTA, 2
CALL DELAY
CALL DELAY
BCF PORTA, 2 ;E
CALL DELAY
RETURN
MANDAR
BSF PORTA, 1
CALL EJECUTA
RETURN
NEXT
BCF PORTA, 1
MOVLW 0XC0
MOVWF PORTB
CALL EJECUTA
RETURN
DELAY
MOVLW D'48'
MOVWF M
DOS
MOVLW D'255'
MOVWF N1
UNO
DECFSZ N1, 1
GOTO UNO
DECFSZ M, 1
GOTO DOS
RETURN
PAUSA
MOVLW D'5'
MOVWF P2
TRESx
MOVLW D'8'
MOVWF Mx
DOSx
MOVLW D'250'
MOVWF Nx
UNOx
NOP
NOP
DECFSZ Nx, 1
GOTO UNOx
DECFSZ M, 1
GOTO DOSx
DECFSZ P2, 1
GOTO TRESx
RETURN
list p=18f4550
#include p18f4550.inc
ORG 0X0100
MAIN
BSF STATUS,5; Banco 1, donde estan los registros de control
; de la EEPROM.
CLRF DIR ; Inicializar variables.
MOVLW 'a'
MOVWF DATO
LIST P=18F4550
#include <P18F4550.INC>
RESET_VECTOR ORG 0
goto Main
ORG 0x1000
Main
MOVLW 0X0F
MOVWF ADCON1
CLRF TRISD
END
PORT
status equ 0x03 // registro status inicia en 3
porta equ 0x05
portb equ 0x06
trisa equ 0x85
trisb equ 0x86
org0x050
inicio // etiqueta
CALL PORT
bsf status,5 // “1” el bit 5 del Registro “Status”
bsf porta,0 // “1” el bit 0 del puerto A
bsf porta,1 // “1” el bit 1 del puerto A
clrf portb // Borra el contenido del puerto B
bcf status // Elimina los datos el registro STATUS
activar // etiqueta
btfssporta,0 // btfss porta,0 ; el bit “0” del puerto A es 1? si cumple, salta 1 instrucción
goto giro // IR A otro punto de la función señalado con una etiqueta
clrf portb // Borra el contenido del puerto B
goto fin // IR A otro punto de la función señalado con una etiqueta
giro // etiqueta
btfscporta,1 // BTFSC PORTA,1; el bit 1 del puerto a es 0? si cumple, salta 1 instrucción
goto izq_z // IR A otro punto de la función señalando una etiqueta
call // ERROR; falta el registro que será invocado
goto fin // IR A otro punto de la función señalado con una etiqueta
izq_z //etiqueta
call izq // Invoca a la Subrutina
fin //etiqueta
goto activar // IR A otro punto de la función señalado con una etiqueta
izq //etiqueta
movlw’00000101’ // “00000101” binario al registro W
movwf // Falta el registro que se le va a cargar el contenido de W
call retardo // Invoca a la Subrutina
movlw,00000110’ // movlw ‘00000110’ número binario al registro W
movlwfportb // Carga el dato que se encuentra en W al Puerto B
call retardo_20ms // Invoca la subrutina de retardo
movlwb’00001010’ // MOVLW ‘00001010’ número binario a W
movwfpuertob // MOVWF PORTB dato que está en W al puerto B
call retardo_20ms // Invoca la subrutina de retardo
movlwb’00001001’ // MOVLW ‘00001001’ número binario a W
movwfportb // MOVWF PORTB ;Carga el dato que está en W al puerto B
RETURN
call // ERROR; Invoca una función, falta el registro que será invocado
return // Regresa a donde fue invocada la subrutina inicialmente
der //etiqueta
movlw09 // MOVLW 0x09 Carga el número en hexadecimal a W
movwfportb // MOVWF PORTB ; Carga el dato que está en W al puerto B
call retardo_20ms // Invoca la Subrutina de Retardo
movlw08 // MOVLW 0x08 Carga el número en hexadecimal a WREG
movwfportb // MOVWF PORTB ;Carga el dato que está en W al puerto B
call retardo_20ms // Invoca la Subrutina de Retardo
movlw05’ // MOVLW 0x05 Carga el número en hexadecimal a W
movwfportb // MOVWF PORTB ;Carga el dato que está en W al puerto B
retardo_20ms // CALL RETARDO_20MS
RETARDO_20MS
MOVLW B'10110000' //número binario en W
MOVWF T1CON // dato que está en W al registro de Timer1
BCF PIR1,TMR1IF // “0” las banderas del registro de Timer
BCF T1CON,TMR1ON // “0” las banderas del registro de Timer para apagarlo
MOVLW 0XC7 // número hexadecimal en W
MOVWF TMR1H // valor de W a la parte ALTA registro del Timer
MOVLW 0X77 // número hexadecimal en WREG
MOVWF TMR1L // valor de W a la parte de BAJA registro del Timer
BSF T1CON,TMR1ON // “1” las banderas del registro de Timer para encenderlo
ETQ
BTFSS PIR1,TMR1IF // el bit TMR1IF del puerto PIR es 1? si cumple, salta 1 instrucción
GOTOETQ // IR A otro punto de la función señalado con una etiqueta
BCF PIR1,TMR1IF // “0” la bandera del registro de Timer
Return // REGRESA DONDE FUE LLAMADA
return // Regresa
end // Termina el programa