lugotache
Usuario (México)
que tal banda, aqui les dejo como hacer un contador en ensamblador usando 3 push button, un pic 16f84a y un display de 7 segmentos hay diferentes formas de hacerlo, aqui es usando solo comparaciones el primer push cuenta de 0 hasta 9 el segundo push cuenta de 0 hasta 5 el tercer push cuenta de 0 hasta 7 y aquie el .asm ;---------------------------------------------------------------- ;ZONA DE DATOS __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC LIST P=16F84A INCLUDE<P16F84A.INC> CBLOCK 0x0C ENDC ORG 0 inicio bsf STATUS,RP0 clrf TRISB movlw b'00111111' movwf TRISA bcf STATUS,RP0 movlw b'00111111' movwf PORTB boton0 btfsc PORTA,0;si vale uno ejecuta la siguiente instruccion goto boton1 goto apagado boton1 btfsc PORTA,1;si vale uno ejecuta la siguiente instruccion goto boton2 goto aapagado boton2 btfsc PORTA,2;si vale uno ejecuta la siguiente instruccion goto principal goto xapagado principal movfw PORTB movwf PORTB goto boton0 apagado ;rlf PORTB,1 movlw b'00111111' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual1 ;no es igual goto igual1 ;si es igual ;call Retardo_100ms ;goto boton igual1 movlw b'00000110';1 movwf PORTB call Retardo_100ms goto principal noigual1 movlw b'00000110' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual2 ;no es igual goto igual2 ;si es igual igual2 movlw b'01011011';2 movwf PORTB call Retardo_100ms goto principal noigual2 movlw b'01011011' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual3 ;no es igual goto igual3 ;si es igual igual3 movlw b'01001111';3 movwf PORTB call Retardo_100ms goto principal noigual3 movlw b'01001111' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual4 ;no es igual goto igual4 ;si es igual igual4 movlw b'01100110';4 movwf PORTB call Retardo_100ms goto principal noigual4 movlw b'01100110' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual5 ;no es igual goto igual5 ;si es igual igual5 movlw b'01101101';5 movwf PORTB call Retardo_100ms goto principal noigual5 movlw b'01101101' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual6 ;no es igual goto igual6 ;si es igual igual6 movlw b'01111101';6 movwf PORTB call Retardo_100ms goto principal noigual6 movlw b'01111101' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual7 ;no es igual goto igual7 ;si es igual igual7 movlw b'00000111';7 movwf PORTB call Retardo_100ms goto principal noigual7 movlw b'00000111' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual8 ;no es igual goto igual8 ;si es igual igual8 movlw b'11111111';8 movwf PORTB call Retardo_100ms goto principal noigual8 movlw b'11111111' subwf PORTB,W btfss STATUS,Z ;compruebo goto noigual9 ;no es igual goto igual9 ;si es igual igual9 movlw b'01100111' movwf PORTB call Retardo_100ms goto principal noigual9 movlw b'01100111' subwf PORTB,W btfss STATUS,Z ;compruebo goto iguala ;no es igual goto iguala ;si es igual iguala movlw b'00111111' movwf PORTB call Retardo_100ms goto principal ;boton 1 aapagado ;rlf PORTB,1 movlw b'00111111' subwf PORTB,W btfss STATUS,Z ;compruebo goto nnoigual1 ;no es igual goto iigual1 ;si es igual ;call Retardo_100ms ;goto boton iigual1 movlw b'00000110';1 movwf PORTB call Retardo_100ms goto principal nnoigual1 movlw b'00000110' subwf PORTB,W btfss STATUS,Z ;compruebo goto nnoigual2 ;no es igual goto iigual2 ;si es igual iigual2 movlw b'01011011';2 movwf PORTB call Retardo_100ms goto principal nnoigual2 movlw b'01011011' subwf PORTB,W btfss STATUS,Z ;compruebo goto nnoigual3 ;no es igual goto iigual3 ;si es igual iigual3 movlw b'01001111';3 movwf PORTB call Retardo_100ms goto principal nnoigual3 movlw b'01001111' subwf PORTB,W btfss STATUS,Z ;compruebo goto nnoigual4 ;no es igual goto iigual4 ;si es igual iigual4 movlw b'01100110';4 movwf PORTB call Retardo_100ms goto principal nnoigual4 movlw b'01100110' subwf PORTB,W btfss STATUS,Z ;compruebo goto nnoigual5 ;no es igual goto iigual5 ;si es igual iigual5 movlw b'01101101';5 movwf PORTB call Retardo_100ms goto principal nnoigual5 movlw b'01101101' subwf PORTB,W btfss STATUS,Z ;compruebo goto iigual6 ;no es igual goto iigual6 ;si es igual iigual6 movlw b'00111111';6 movwf PORTB call Retardo_100ms goto principal ;boton2 xapagado ;rlf PORTB,1 movlw b'00111111' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual1 ;no es igual goto xigual1 ;si es igual ;call Retardo_100ms ;goto boton xigual1 movlw b'00000110';1 movwf PORTB call Retardo_100ms goto principal xnoigual1 movlw b'00000110' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual2 ;no es igual goto xigual2 ;si es igual xigual2 movlw b'01011011';2 movwf PORTB call Retardo_100ms goto principal xnoigual2 movlw b'01011011' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual3 ;no es igual goto xigual3 ;si es igual xigual3 movlw b'01001111';3 movwf PORTB call Retardo_100ms goto principal xnoigual3 movlw b'01001111' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual4 ;no es igual goto xigual4 ;si es igual xigual4 movlw b'01100110';4 movwf PORTB call Retardo_100ms goto principal xnoigual4 movlw b'01100110' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual5 ;no es igual goto xigual5 ;si es igual xigual5 movlw b'01101101';5 movwf PORTB call Retardo_100ms goto principal xnoigual5 movlw b'01101101' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual6 ;no es igual goto xigual6 ;si es igual xigual6 movlw b'01111101';6 movwf PORTB call Retardo_100ms goto principal xnoigual6 movlw b'01111101' subwf PORTB,W btfss STATUS,Z ;compruebo goto xnoigual7 ;no es igual goto xigual7 ;si es igual xigual7 movlw b'00000111';7 movwf PORTB call Retardo_100ms goto principal xnoigual7 movlw b'00000111' subwf PORTB,W btfss STATUS,Z ;compruebo goto xigual8 ;no es igual goto xigual8 ;si es igual xigual8 movlw b'00111111';8 movwf PORTB call Retardo_100ms goto principal INCLUDE <RETARDOS.INC> END
Aqui les dejo una pila en c++ con memoria dinamica, esta echa con una lista doblemente enlazada, espero que les sirva!primero declaramos nuestra estructura con los elementos que va a tenerstruct lista{ int dato; lista *ant; lista *sig;};insertar datosaki en la primera vuelta nos va a crear un nodo llamado inicio que contine dos punteros y un espacio para un entero, el puntero llamado "ant" que apunta a NULL y otro llamado "sig" que tambien apunta a NULLif(inicio==NULL){ inicio=new lista; printf("ingresa dato " ); scanf("%d",&inicio->dato) ; inicio->sig=NULL; inicio->ant=NULL; aux=inicio; aux1=inicio;}else{ aux=new lista; printf("ingresa dato " ); scanf("%d",&aux->dato); aux->sig=NULL; aux1->sig=aux; aux->ant=aux1; aux1=aux;}en la segunda vuelta ya la condicion de inicio==NULL ya no se cumple asi que va a pasar al "else", ahi va a crear otro nodo llamado "aux" y lo va a enlazar con el nodo anterior que se llama "aux1"Para borrar aux=aux1; aux1=aux->ant; aux=NULL; aux1->sig=NULL; aux=aux1;aux va a moverse asta el ultimo nodo que actualmente se llama aux1, despues aux1 va a moverse al nodo anterior, entonces queda aux1 y sigue aux, ahora solo liberamos aux y ese nodo ya queda eliminado , ahora regresamos a aux a donde esta aux1 por si queremos seguir eliminandoimprimiraux=inicio; while(aux!=NULL){ printf(" %d ",aux->dato); aux=aux->sig; } }por ultimo para imprimir regresamos a al inicio de nuestra pila, de ahi partimos para ir imprimiendo nodo por nodo, con el while estamos aciendo que aux se imprima y que avance un nodo, y va terminar cuabndo aux ya no tenga valory aqui el codigo completo y validado#include<stdio.h>struct lista{ int dato; lista *ant; lista *sig;};int main(){ char a; lista *inicio,*aux,*aux1; inicio=NULL; do{ printf("PILA 1-push 2-pop 3-imprimir 4-salir " ); scanf("%s",&a );switch(a){ case '1': if(inicio==NULL){ inicio=new lista; printf("ingresa dato " ); scanf("%d",&inicio->dato); inicio->sig=NULL; inicio->ant=NULL; aux=inicio; aux1=inicio;}else{ aux=new lista; printf("ingresa dato " ); scanf("%d",&aux->dato); aux->sig=NULL; aux1->sig=aux; aux->ant=aux1; aux1=aux;}break;case '2':if(inicio==NULL){ printf("no hay mas que borrar" );}else{if(inicio==aux1){ inicio=NULL;}else{ aux=aux1; aux1=aux->ant; aux=NULL; aux1->sig=NULL; aux=aux1; }}break;case '3':if(inicio==NULL){ printf("pila vacia" );}else{ aux=inicio; while(aux!=NULL){ printf("%d",aux->dato); aux=aux->sig; } }break;default: puts("esa no es una opcion intenta de nuevo" ) ;}}while(a!='4');}