Vous êtes sur la page 1sur 14

EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

I ESCRIBA UN EJEMPLO DE RETARDO POR SOFTWARE.

LIST P = 18F4550

INCLUDE <P18F4550.INC>

;************************************************************

CONFIG FOSC = HS ;INTOSC_XT no disponible para simulación, usar HS

CONFIG PWRT = ON

CONFIG BOR = OFF

CONFIG WDT = OFF

CONFIG MCLRE = ON

CONFIG PBADEN = OFF

CONFIG LVP = OFF

CONFIG DEBUG = OFF

CONFIG XINST = OFF

; CODE ******************************************************

#define P1 PORTB, 4

#define Led2 PORTB, 5

#define motor PORTB, 6

ORG 0x00 ;Iniciar el programa en el registro 0x00

Lp EQU 0x70

M EQU 0x71

On EQU 0x72

clrf PORTB ;Limpia los posibles valores actuales de PORTB

movlw 0x0F ;Entradas y Salidas para PORTB

movwf TRISB ;Configura TRISB <- W

INICIO

btfsc PORTB, 1 ;Compara el 2do bit de PORTB, si es 0 salta si es 1 sigue

goto Led ;Enciende el LED

bra INICIO
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

Led ;Etiqueta para llamar al Led que se encenderá

bsf P1 ;Se pone a el Led, es decir; se enciende

movlw d'250';1 equivale a 20ms es decir a 0.02s ->retardo de 5seg

movwf Lp

call retardo ;hay que agregar retardo

bcf P1 ; En este momento se apagará el del despues del retardo

return ; se regresa a donde se quedo

retardo

TRES

movlw d'80' ; se puede cambiar por 200 para que en Lp cada 2 sea una decima de segundo

movwf M

DOS

movlw d'250'

movwf On

UNO

nop ;0.2u

nop ;0.2u

decfsz On,1 ;0.2u

goto UNO ;0.2u

decfsz M,1 ;0.2u ; Todo el ciclo dura 1us,

goto DOS

decfsz Lp,1

goto TRES

return

END ;Fin de Programa


EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

II SE DESEA LEER UN DATO A UNA FRECUENCIA DE 1 KHZ. EL DATO SE


ENCUENTRA CONECTADO AL PUERTO D. EL DATO SE DEBE ANALIZAR Y
MOSTRAR EN EL PUERTO A SI ES MAYOR QUE 127, EN CASO CONTRARIO
SE DESCARTA, USE TEMPORIZADORES. ≠
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

III ESCRIBA UN PROGRAMA QUE MUESTRE SU NOMBRE Y APELLIDOS


EN UN LCD CONECTADO AL PUERTO B.

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 'E'

MOVWF PORTB

CALL MANDAR

MOVLW 'D'

MOVWF PORTB

CALL MANDAR

MOVLW 'U'

MOVWF PORTB

CALL MANDAR

MOVLW 'A'

MOVWF PORTB

CALL MANDAR

MOVLW 'R'
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

MOVWF PORTB

CALL MANDAR

MOVLW 'D'

MOVWF PORTB

CALL MANDAR

MOVLW 'O'

MOVWF PORTB

CALL MANDAR

MOVLW ' '

MOVWF PORTB

CALL MANDAR

MOVLW 'D'

MOVWF PORTB

CALL MANDAR

MOVLW 'A'

MOVWF PORTB

CALL MANDAR

MOVLW 'N'

MOVWF PORTB

CALL MANDAR

MOVLW 'I'

MOVWF PORTB

CALL MANDAR

MOVLW 'E'

MOVWF PORTB

CALL MANDAR

MOVLW 'L'

MOVWF PORTB

CALL MANDAR

RETURN
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

I22

MOVLW 'C'

MOVWF PORTB

CALL MANDAR

MOVLW 'O'

MOVWF PORTB

CALL MANDAR

MOVLW 'L'

MOVWF PORTB

CALL MANDAR

MOVLW 'U'

MOVWF PORTB

CALL MANDAR

MOVLW 'M'

MOVWF PORTB

CALL MANDAR

MOVLW 'N'

MOVWF PORTB

CALL MANDAR

MOVLW 'A'

MOVWF PORTB

CALL MANDAR

CALL PAUSA

RETURN

LCD_IN

BCF PORTA, 1; RS = 0

MOVLW 0X01
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

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
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

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
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

IV ESCRIBA UN PROGRAMA QUE GUARDE UNA CLAVE DE ACCESO DE


TRES DÍGITOS EN LA MEMORIA EEPROM

list p=18f4550
#include p18f4550.inc

UDATA 0XA0 ; Variables en el banco 1 para evitar cambios.


DATO EQU 0X01
DIR EQU 0X02

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

BSF EECON1,WREN ; Habilita la escritura de la EEPROM.


ESCRITURA BTFSC EECON1,WR ; Esperar hasta que NO haya un proceso de
GOTO ESCRITURA ; escritura ejecutandose.
MOVF DATO,W ; Preparar dato.
MOVWF EEDATA
MOVF DIR,W ; Preparar direccion.
MOVWF EEADR
MOVLW 55h ; Ejecuta secuencia de proteccion (escribir
MOVWF EECON2 ; las constantes 55 y AA en EECON2).
MOVLW 0AAh
MOVWF EECON2
BSF EECON1,WR ; Ordena iniciar la escritura.
INCF DATO,F ; Prepara el dato y direccion siguientes.
INCF DIR,F
MOVF DIR,W
SUBLW .3
BTFSS STATUS,Z
GOTO ESCRITURA ; 3 iteraciones.
ULTIMO BTFSC EECON1,WR ; Avanza hasta que se almacena el ultimo dato.
GOTO ULTIMO
BCF EECON1,WREN ; Deshabilita la escritura de la EEPROM.
END
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

V ESCRIBA UNA SUBRUTINA PARA MOSTRAR UNA SERIE DE LUCES


VISIBLES AL OJO HUMANO CON LED’S Y CONECTADOS A PUERTO D. LA
SECUENCIA DEBE MOSTRAR PRIMERO LOS BITS PARES Y DESPUÉS LOS
IMPARES DE FORMA ALTERNADA

LIST P=18F4550

#include <P18F4550.INC>

inicial equ 0x00

Var1 equ 0x02

Var2 equ 0x01

RESET_VECTOR ORG 0

goto Main

ORG 0x1000

Main

MOVLW 0X0F

MOVWF ADCON1

CLRF TRISD

ciclo MOVLW 0X05

MOVWF LATD

CALL Ret05

MOVLW 0X0A

MOVWF LATD

CALL Ret05

goto ciclo

Ret05: MOVLW 0X32

MOVWF inicial
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

ciclo05 CALL Ret10ms

decfsz inicial

goto ciclo05

return

Ret10ms: MOVLW 0X64

MOVWF Var1

ciclo10 CALL Ret100us

decfsz Var1

goto ciclo10

return

Ret100us: MOVLW 0XF0

MOVWF Var2

ciclo100 nop

nop

decfsz Var2

goto ciclo100

return

END
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

VI ESCRIBA UNA SUBRUTINA PARA MOSTRAR UNA SERIE DE LUCES


VISIBLES AL OJO HUMANO CON LED’S Y CONECTADOS A PUERTO D. LA
SECUENCIA DEBE MOSTRAR PRIMERO LOS BITS PARES Y DESPUÉS LOS
IMPARES DE FORMA ALTERNADA

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
EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

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


EDUARDO DANIEL COLUMNA MUÑIZ GRUPO 6CM13 BOLETA: 2014300334

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

GOTO ETQ // 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

Vous aimerez peut-être aussi