Professional Documents
Culture Documents
Estudiantes
Kevin Anthony Anzules Castro
Karolyn Valeria Barreiro Santana
Bryan Alberto Herrera Macías
Nivel:
Quinto “A”
Asignatura:
Organización y Arquitectura del Computador
Docente:
Ing. Viviana García Macías
La información que hace que el hardware de la computadora realice una determinada actividad
se llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las
instrucciones en conjunto, equivalen a acciones elementales de la máquina, por lo que al
conjunto de dichas instrucciones que son interpretadas directamente por la máquina se le
denomina lenguaje máquina o código objeto.
Objetivo General
Desarrollar por medio de un lenguaje ensamblador, para de esta manera demostrar los
conocimientos adquiridos a través de una práctica básica de desarrollo ensamblador.
Objetivos Específicos
_CONFIG 0x318
List p=16f628a
; creamos 3 variables para el retardo del semáforo
P EQU 0x21
N EQU 0x22
M EQU 0x23
; Utilizamos la dirección de memoria para la asignación de variables
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
MOVLW D'7'
MOVWF CMCON; creamos la configuración del puerto
CLRF PORTB; La cual solo configuraremos el puerto B
PRINCIPAL
; LED VERDE
MOVLW B'00000001'
MOVWF PORTB
MOVLW D'15'
MOVWF P
CALL RETARDO
; CAMBIO PARPADEO DE EN ESTADO ALTO Y BAJO PARA EL CAMBIO DE COLOR
MOVLW B'00000001'
MOVWF PORTB
MOVLW D'2'
MOVWF P
CALL RETARDO
MOVLW B'00000000'
MOVWF PORTB
MOVLW D'2'
MOVWF P
CALL RETARDO
MOVLW B'00000001'
MOVWF PORTB
MOVLW D'2'
MOVWF P
CALL RETARDO
MOVLW B'00000000'
MOVWF PORTB
MOVLW D'2'
MOVWF P
CALL RETARDO
MOVLW B'00000001'
MOVWF PORTB
MOVLW D'2'
MOVWF P
CALL RETARDO
; LED AMARILLO HACE CAMBIO A COLOR Y EL TIEMPO SE CAMBIA
MOVLW B'00000010'
MOVWF PORTB
MOVLW D'5'
MOVWF P
CALL RETARDO
; LED ROJO HACE EL CAMBIO DE COLOR Y EL TIEMPO QUE TARDA
MOVLW B'00000100'
MOVWF PORTB
MOVLW D'10'
MOVWF P
CALL RETARDO
GOTO PRINCIPAL
; TENEMOS QUE TENER ENCUENTA QUE SIEMPRE HACE EL LLAMADO AL RETARDO
; AHORA CREAMOS LA SUBRUTINA DEL RETARDO
; TENEMOS QUE TENER EN CUENTA QUE TODOS LOS MICROCONTROLADORES POSSEN
MICRORELOJ
; LA CUAL TRABAJAN CON NUMERO DE CLICOS DE RELOJ PARA SU EJECUCIÓN TIENE EL
CICLO MAQUINA
; LA CUAL ES 4 VECES EL CICLO RELOJ
RETARDO
; REGRESAMOS AL SIGUIENTE BUCLE QUE TENDRÁ DE VALOR 80 QUE SERÁ EL RETARDO
A 1 DECIMA DE SEGUNDO
TRES
MOVLW D'80'
MOVWF M
DOS
; TENEMOS UNA VARIABLE CON VALOR DE 250 Y CADA QUE SE EJECUTE EJECURA 2
INSTRUCCIONES MUERTAS
; CUANDO SE ENCUENTRA LA BANDERA ACTIVADA REGRESA CON 3 MIROSEGUNDOS Y
SE EJECUTARAN A 1,2 MS
MOVLW D'250'
MOVWF N
;
UNO
; ESTOS LOS DEFINIMOS PARA EMPEZAR
NOP
NOP
; ESTE ES UN BUCLE QUE HACE UN DECREMENTO EN 1 SOBRE 1 REGISTRO HASTA QUE
SEA 0
; Y PREGUNTA POR UNA BANDERA HASTA QUE LLEGUE A 0
; Y CUANDO ESTA EN 0 SE SALTA DE INSTRUCCION Y NO LO ESTA CONTINUA CON LA
SIGUIENTE
DECFSZ N,1
GOTO UNO
DECFSZ M,1
GOTO DOS
DECFSZ P,1
GOTO TRES
RETURN
END
Ejercicio #2
;*******************************
;Delay: El Timer 0 realiza un retardo de 50mS que se repite tantas veces como se indica en
la
;constante valor
Delay movlw Valor
movwf Temp ;Nº de veces a temporizar 50 mS
Delay_1 movlw ~.195
movwf TMR0 ;Inicia el Timer 0 con 195 (195*256=49.9mS)
bcf INTCON,T0IF ;Repone flag del TMR0
Delay_2 btfss INTCON,T0IF ;Fin de los 50mS ??
goto Delay_2 ;No, el TMR0 no ha terminado
decfsz Temp,F ;Decrementa el contador. Fin de
temporización ??
goto Delay_1 ;No, el TMR0 temporiza otros 50 mS
return ;Si, final de la temporización
; Programa principal
Inicio clrf PORTB ; Borra los latch de salida
bsf STATUS,RP0
bsf STATUS,RP1 ;Selecciona banco 3
clrf ANSEL ;Puerta A digital
clrf ANSELH ;Puerta B digital
bcf STATUS,RP1 ;Selecciona banco 1
movlw b'11111110'
movwf TRISB ;RB0 se configura como salida
movlw b'00111111'
movwf TRISA ;RA5:RA0 se configuran como entrada
movlw b'00000111'
movwf OPTION_REG ;TMR0 con reloj interno y preescaler de 256
;+----------------------------------------------------------------------+
;| ENCABEZADO |
;+----------------------------------------------------------------------+
LIST p = 16F84 ; Usar el PIC16F84A-04/P
RADIX HEX ; Todo en hexadecimal
;+----------------------------------------------------------------------+
;| VARIABLES |
;+----------------------------------------------------------------------+
w equ 0 ; Cuando d=0 el destino es w
f equ 1 ; Cuando d=1 el destino es f
PUERTOA equ 0x05 ; Dirección del Puerto A
PUERTOB equ 0x06 ; Dirección del Puerto B
ESTADO equ 0x03 ; Dirección del Estado
PCL equ 0x02 ; Dirección de PCL
Aux1 equ 0x0D
Aux2 equ 0x0E
npaso equ 0x20 ; Dirección del reg que lleva el conteo
de los pasos.
;+-----------------------------------------------------------------------------+
;| CONFIGURACIÓN DEL PUERTO B COMO SALIDA |
;| Y EL PUERTO A COMO DE SALIDA |
;+-----------------------------------------------------------------------------+
ORG 0x00 ; Dirección de inicio
BSF ESTADO,5 ; Pasarse al Banco 1
MOVLW 0x00
MOVWF PUERTOB ;Establecer el Puerto B como de
salida
MOVLW 0x0F
MOVWF PUERTOA ;Puerto A como de entrada RA0-
RA3
BCF ESTADO,5 ;Volver al banco 0
;+----------------------------------------------------------------------+
;| PROGRAMA PRINCIPAL |
;+----------------------------------------------------------------------+
;inicio
Inicio CLRF npaso ;Borrar contenido de npaso
Test BTFSS PUERTOA,0 ;El bit 0 del puerto A es 1?
GOTO Inicio ;No, ir a inicio
BTFSC PUERTOA,1 ;Si,El bit 1 del puerto A es 0?
GOTO VelMax ;No, gira a vel max
BTFSC PUERTOA,2 ;Si, el bit 2 del puerto A es 0?
GOTO VelMin ;No, gira a vel min
GOTO Inicio ;Si, vuelve al testeo
;fin
;+----------------------------------------------------------------------+
;| GIRA MOTOR A VEL MAX |
;+----------------------------------------------------------------------+
;inicio
VelMax MOVF npaso,w ;Pasar a W el contenido de contador
CALL TablaD ;Llamar la tabla de pasos
MOVWF PUERTOB ;Mandar al Puerto B el valor obtenido
CALL Retardo1 ;llamar la subrutina de retardo
INCF npaso,f ;Incrementar npaso = npaso + 1
MOVLW 0x04 ;Mover b'00000100' a W
XORWF npaso,w ;Hacer ope XOR cuenta con W
BTFSS ESTADO,2 ;¿El contador es igual a 4?
GOTO Test ;No,va a ciclo
GOTO Inicio ;Si, regresa al testeo
;fin
;+----------------------------------------------------------------------+
;| GIRA MOTOR A VEL MIN |
;+----------------------------------------------------------------------+
;inicio
VelMin MOVF npaso,w ;Pasar a W el contenido de contador
CALL TablaD ;Llamar la tabla de pasos
MOVWF PUERTOB ;Mandar al Puerto B el valor obtenido
CALL Retardo ;Llamar la subrutina de retardo1
INCF npaso,f ;Incrementar npaso = npaso + 1
MOVLW 0x04 ;Mover b'00000100' a W
XORWF npaso,w ;Hacer ope XOR cuenta con W
BTFSS ESTADO,2 ;¿El contador es igual a 4?
GOTO Test ;No,va a ciclo
GOTO Inicio ;Si, regresa al testeo
;fin
;+----------------------------------------------------------------------+
;| RETARDO DE 60 mlSeg |
;+----------------------------------------------------------------------+
Retardo MOVLW .33 ; 1 set number of repetitions (B)
MOVWF Aux1 ;1|