include

4
.include "m164pdef.inc" .def tempo=R17 ;definir variables .def contador=R18 .dseg ; guardar un espacio de memoria en la sram binario: .byte 1 ; espacio para el numero en binario bcd0: .byte 4 ; espacio para el numero en BCD digito0: .byte 4 ; espacio para el numero equivalente a los 7 segmentos .cseg ; inicio del programa en la sram .org 0x00 ; inicio del programa en la direccion 0x00 //DEFINIR LOS PUERTOS COMO ENTRADA Y SALIDA Y ACTIVO SUS RESPETIVOS PULL UP PARA LOS DE ENTRADA clr tempo ; pongo tempo a ceros out ddrb,tempo ; declaro el puerto B como entrada out ddrd,tempo ; declarp el puerto D como entrada ser tempo ; declaro tempo a unos out portb,tempo ; activo el pull-up del puerto B out portd,tempo ; activo el pull-up del puerto D ldi tempo,0b01111111 ;cargo a tempo out ddra,tempo ;declaro al puerto A como salida,excepto al pinA7 ldi tempo,0b10000000 ;cargo a tempo out porta,tempo ;activacion de pull up del pinA7 ldi tempo,0b00001111 ;cargo a tempo out ddrc,tempo ;puerto C como salida ldi tempo,0b11110000 ;cargo a tempo out portc,tempo ; activacion del pull- up //INICIALIZACION DE LA STACK ;simpre se inicializa el stack(cuando se trabaja con subrutinas) ldi tempo,high(ramend) ;indicamos q ramend es la direccion mas alta de la SRAM out sph,tempo ldi tempo,low(ramend) out spl,tempo //INICIO DEL PROGRAMA EN SI LO DE LA PARTE DE ARRIBA ERA SOLO ASIGNACION DE PUERTOS //AHORA EMPIEZA LO BUENO inicio: in tempo,pinb ; cargo en tempo lo que ingresa por puerto B //sts binario,tempo ; guardo el valor en binario del puerto B asignado en tempo en el espacio asignado call bcd ; llamo a la subrutina para transformar en BCD

Upload: willy-sebas

Post on 18-Aug-2015

213 views

Category:

Documents


0 download

DESCRIPTION

conversor

TRANSCRIPT

.include "m164pdef.inc" .def tempo=R17;definir variables.def contador=R18 .dseg; guardar un espacio de memoria en la sram binario: .byte 1; espacio para el numero en binario bcd0: .byte 4 ; espacio para el numero en BCD digito0: .byte 4; espacio para el numero equivalente a los 7 segmentos .cseg; inicio del programa en la sram .org 0x00; inicio del programa en la direccion 0x00 //DEFINIR LOS PUERTOS COMO ENTRADA Y SALIDA Y ACTIVO SUS RESPETIVOS PULL UP PARA LOS DE ENTRADA clr tempo ; pongo tempo a ceros out ddrb,tempo; declaro el puerto B como entrada out ddrd,tempo; declarp el puerto D como entrada ser tempo ; declaro tempo a unos out portb,tempo; activo el pull-up del puerto B out portd,tempo; activo el pull-up del puerto D ldi tempo,0b01111111 ;cargo a tempo out ddra,tempo;declaro al puerto A como salida,excepto al pinA7 ldi tempo,0b10000000 ;cargo a tempo out porta,tempo;activacion de pull up del pinA7 ldi tempo,0b00001111;cargo a tempo out ddrc,tempo;puerto C como salida ldi tempo,0b11110000 ;cargo a tempo out portc,tempo; activacion del pull-up //INICIALIZACION DE LA STACK;simpre se inicializa el stack(cuando se trabaja con subrutinas) ldi tempo,high(ramend);indicamos q ramend es la direccion mas alta de la SRAM out sph,tempo ldi tempo,low(ramend) out spl,tempo //INICIO DEL PROGRAMA EN SI LO DE LA PARTE DE ARRIBA ERA SOLO ASIGNACION DE PUERTOS //AHORA EMPIEZA LO BUENO inicio: in tempo,pinb ; cargo en tempo lo que ingresa por puerto B //sts binario,tempo; guardo el valor en binario del puerto B asignado en tempo en el espacio asignado call bcd; llamo a la subrutina para transformar en BCD call T_seg; llamo subrutina digito para transformar a 7 segmentos call barrido; llamo subrutina barrido de display rjmp inicio; salto incondicional //SUBRUTINA TRANSFORMACION A BCD Bcd: push tempo; guardo datos en el stack sabiendo q tempo tiene el dato de binario push contador ; guardo datos en el stack sabiendo q contador no tiene asignado ningun valor //lds tempo,binario; cargo el valor de binario almacenado en la sram al registro tempo //clr contador centenas: subi tempo,100; restamos 100 al tempo brcs decenas; salta si el C=1 es decir tempo se hace negativo inc contador; incremento contador rjmp centenas decenas: sts bcd0+2,contador; guardo el valor del primer digito BCD es decir las centenas en el espacio asignado en la sram subi tempo,-100; obtengo el valor anterior de tempo clr contador; limpio contador decena: subi tempo,10 ; restamos 10 al tempo brcs unidades ; salta si el C=1 es decir tempo se hace negativo inc contador; incrementa contador rjmp decena unidades: subi tempo,-10; recupero el valor anterior del tempo sts bcd0+1,contador; guardo el valor del segundo digito BCD es decir las decenas en el espacio asignado en la sram sts bcd0,tempo; guardo el valor del tercer digito BCD es decir las unidades en el espacio asignado en la sram pop contador; saca los valores del stack pop tempo ret ;retorno de la subrutina //SUBRUTINA T_SEG T_seg: push Zh ;guardo datos en el stack push Zl push Yh push Yl push Xh push Xl push contadorpush tempo ldi Xh,high(bcd0);el puntero x va a apuntar a la primera localidad de la 4 reservadas para bcd0 ldi Xl,low(bcd0) ldi Yh,high(digito0);el puntero y va a apuntar a la primera localidad de la 4 reservadas para digito0 ldi Yl,low(digito0) ldi contador,4 ;3 por q utilizo 3 display T_seg70: ldi Zh,high(tabla