Documente Academic
Documente Profesional
Documente Cultură
- Realizar diagrama circuital completo, el diagrama de flujo y el programa de control utilizando lenguaje ensamblador, para el microcontrolador Atmega164, y un programa en lenguaje Basic, que realice las siguientes actividades: Leer 8 sw colocados en el PORTC Escribir la lectura de los sw en 8 leds colocados en el PORTB y en tres displays de 7 segmentos colocados en el PUERTO D. En los displays se debe mostrar en decimal o hexadecimal, el cambio de formato se realiza con un pulsador.
SOFTWARE Assembler
.INCLUDE "m164pdef.inc" ;==============DEFINO VARIABLES================== .DEF .DEF .DEF .DEF .DEF .DEF .DEF .DEF AUX PULSA =R17 TEMP =R18 DATO =R19 CENTENAS DECENAS UNIDAD CONTROL =R16
;==============DEFINO PUNTOS DE SALTO============ .ORG .ORG 0X0000 RJMP 0X0004 RJMP PULSADOR INICIO
;==============INICIALIZO VARIABLES=============== INICIO: CLR CLR CLR CLR PULSA TEMP DATO CONTROL
;==============DEFINO PUERTOS E/S================= CLR OUT SER OUT OUT LDI OUT AUX DDRC,AUX AUX DDRB,AUX DDRA,AUX AUX,0b11110111 DDRD,AUX
;==============INICIALIZO STACK POINTER============ LDI OUT LDI OUT AUX,HIGH(RAMEND) SPH,AUX AUX,LOW(RAMEND) SPL,AUX
;==============CONFIGURO INTERRUPCIONES============ LDI AUX,0b00101010 STS EICRA, AUX LDI AUX,0b00000010 OUT EIMSK,AUX SEI ;==============PROGRAMA PRINCIPAL============ MAIN: IN OUT CPI BRNE CALL CALL CALL CALL RJMP Most_disp: MOV CALL CALL CALL CALL RJMP DATO,PINC PORTB,DATO PULSA,0 Most_disp BIN_HEX Most_CENT Most_DECE Most_UNI MAIN TEMP,DATO BIN_BCD Most_CENT Most_DECE Most_UNI MAIN
;==========SUBRUTINAS DE INTERRUPCION========= PULSADOR: IN PUSH COM POP OUT RETI AUX,SREG AUX PULSA AUX SREG,AUX
;==========SUBRUTINAS DE CONVERTIR HEXADECIMAL========= BIN_HEX: CLR CLR CLR MOV ANDI MOV ANDI SWAP RET CENTENAS DECENAS UNIDAD UNIDAD,DATO UNIDAD,0b00001111 DECENAS,DATO DECENAS,0b11110000 DECENAS
;======================== Subrutina Mostrar Display ============================== Most_CENT: MOV CALL SBR OUT CALL CBR OUT CALL RET Most_DECE: MOV CALL SBR OUT CALL CBR OUT CALL RET Most_UNI: MOV CALL SBR OUT CALL CBR OUT CALL RET TEMP,UNIDAD MOSTRAR_BCD CONTROL,0b00000100 PORTA,CONTROL retardo CONTROL,0b00000100 PORTA,CONTROL retardo TEMP,DECENAS MOSTRAR_BCD CONTROL,0b00000010 PORTA,CONTROL retardo CONTROL,0b00000010 PORTA,CONTROL retardo TEMP,CENTENAS MOSTRAR_BCD CONTROL,0b00000001 PORTA,CONTROL retardo CONTROL,0b00000001 PORTA,CONTROL retardo
;======================== Subrutina Binario a BCD ============================== BIN_BCD: CLR CLR CLR CENT: CPI BRSH RJMP MAYOR_A_100: SUBI DECE: BRSH MAYOR_A_10: SUBI UNID: MOV RET UNIDAD,TEMP INC TEMP,10 RJMP DECE DECENAS CPI MAYOR_A_10 RJMP UNID TEMP,10 INC TEMP,100 RJMP CENT CENTENAS TEMP,100 MAYOR_A_100 DECE CENTENAS DECENAS UNIDAD
;==================== ===========Mostrar a BCD =============================== MOSTRAR_BCD: LDI LDI ADD CLR ADC LPM OUT RET TEMP,Z PORTD,TEMP TEMP ZH,TEMP ZH,HIGH(TABLA<<1) ZL,LOW(TABLA<<1) ZL,TEMP
;==========TABLA PARA DISPLAY CATODO COMUN========= ; -GFEDCBA TABLA: .DB .DB .DB .DB .DB .DB .DB .DB 0b10001000,0b11111001 0b01001100,0b01101000 0b00111001,0b00101010 0b00001010,0b11111000 0b00001000,0b00101000 0b00011000,0b00001011 0b10001110,0b01001001 0b00001110,0b00011110
' declaracin de entradas y salidas Config Portc = Input Config Porta = Output Porta = &B00000000 Config Portb = Output Config Portd = Output Config Portd.3 = Input 'declaracin de variables Dim Cont As Byte Dim Centena As Byte
Dim Decena As Byte Dim Unidad As Byte Dim Residuo As Byte Dim Limite As Byte Dim Aux As Byte Cont = 0 Centena = 0 Decena = 0 Unidad = 0 Residuo = 0 Aux = 0 'configuraciones Config Int1 = Rising On Int1 Pulsante0 Enable Int1 Enable Interrupts
' Programa principal Main: Limite = Pinc Portb = Limite If Aux = 0 Then Goto Salir Centena = 0 Unidad = Limite And &B00001111 Decena = Limite And &B11110000 Swap Decena Centena = Lookup(centena , Tabla) Decena = Lookup(decena , Tabla) Unidad = Lookup(unidad , Tabla) Porta = &B00000001 Portd = Centena Waitus 500 Porta = &B00000000 Waitus 500 Porta = &B00000010 Portd = Decena Waitus 500 Porta = &B00000000 Waitus 500 Porta = &B00000100 Portd = Unidad Waitus 500 Porta = &B00000000 Waitus 500 Goto Main Salir: Centena = Limite / 100
Residuo = Limite Mod 100 Decena = Residuo / 10 Unidad = Residuo Mod 10 Centena = Lookup(centena , Tabla) Decena = Lookup(decena , Tabla) Unidad = Lookup(unidad , Tabla) Porta = &B00000001 Portd = Centena Waitus 500 Porta = &B00000000 Waitus 500 Porta = &B00000010 Portd = Decena Waitus 500 Porta = &B00000000 Waitus 500 Porta = &B00000100 Portd = Unidad Waitus 500 Porta = &B00000000 Waitus 500 Goto Main
Tabla: Data &H88 , &HF9 , &H4C , &H68 , &H39 , &H2A , &H0A , &HF8 , &H08 , &H28 , &H18 , &H0B , &H8E , &H49 , &H0E , &H1E HARDWARE:
Diagrama de Flujo:
INICIO
MAIN
Config_entrada
Most_led
MAIN
RETARDO
Apago los Leds Enciendo los Display
MAIN
MOST_LED
MOST_CENT
LDI
Z + temp LPM
Out PORTB,Z
RET
BIN_BCD
SI Carry = 1 NO
BIN1
RET