CONTADOR (EN LENGUAJE ENSAMBLADOR)

El programa es capaz de contar los pulsos que le lleguen al pin 6 (donde se encuentra el timer0 external clock input).  Además de que se pueda visualizar el conteo por medio de dos displays, los cuales se verá el conteo desde 00 hasta FF.
  • Código:
#include <clase2.h>
#define Dir_C 0xF94
#define Dir_D 0xF95
#define Puerto_C 0xF82
#define Puerto_D 0xF83
#define T0CON 0xFD5     //REGISTRO DE CONTROL DEL TIMER  para configurar timer0
#define TMR0 0xFD6      //REGISTRO DE CONTROL DEL TMR0 
#define PRODL 0xFF3     //REGISTRO DEL MULTIPLICADOR
#define PCL 0xFF9     //REGISTRO BAJO DEL CONTADOR DE PROGRAMA
int temp;

void main()
{
#asm
   inicio:
         movlw    0x00 //a {w}<-0
         movwf    Dir_C //(TRISC)<-{w} configuramos como salida
         movlw    0x00 //dato
         movwf    Dir_D // (TRISD)<-{w} conf como salida
         //para config el timer0 CON ver pag. 127 del manual = E8
         movlw    0xE8
         movwf    T0CON //conf timer0 como contador de 8 bits
        
   ciclo:
            //para utilidad de ejemplo se quiere mostrar la explicacion para que los 2 displays muestren A5
            //el timer en RA4 se le dran pulsos y contara de 00 a FF
            //se debe partir en 2
            bsf      Puerto_C, 1 //bit set file RC1=1, pone a ese pin en 1, despues de la coma va el # de pin
           //display con 02 en hex = 6 decimal
           // movlw    0x02
            //movwf    Puerto_D
            //bcf      Puerto_C, 0 //bit clear file RC0=0, pone a ese pin en 0
            //call     tiempo
            //1° display con 24 en hex = 2 decimal
            //bsf      Puerto_C, 0
            movf     TMR0, 0 //W<- Timer00
            andlw    0x0F  //and    (multiplica para quitar la A y dejar el bit)  w <- w and 0xoF,
            //si queremos un A5, le quitara la A y dejara el 05  (A5*0F)=05
            call     display //llama a display (ver etiqueta de display
            //el puerto D manda dato al display y el puerto C manda voltaje para activar display
            movwf    Puerto_D // ahora vale w=12
            bcf      Puerto_C, 0 //activamos digito y muestra el 5
            call     tiempo
            swapf    TMR0,0   //intercambio, se tenia A5, con swapf da 5A
            andlw    0x0F  // queda 0A
            call     display
            bsf      Puerto_C,0
            movwf    Puerto_D
            bcf      Puerto_C, 1
            call     tiempo
            bra      ciclo   
  
   display:
            //se tiene primero 5
            //luego se tiene la A
            //recordar que el contador de programa va de 2 en 2
            mullw    0x02     //multiplica w por 2,  5*2= 0A
            movf     PRODL,0  //w= 0A el resultado de la multiplicacion se almacena en PRODL
            addwf    PCL      //el contador del programa tiene un num que es 4C
            // se suma lo de w + 4C + 2 = 4C + 0A + 2 = 58, se va al registro 58, en el cual esta retlw con el dato 0x12 = 5 en display
            retlw    0x40  //CERO
            retlw    0x79  //UNO
            retlw    0x24  //DOS
            retlw    0x30  //TRES
            retlw    0x19  //CUATRO
            retlw    0x12  //CINCO
            retlw    0x02  //SEIS
            retlw    0x78  //SIETE
            retlw    0x00  //OCHO
            retlw    0x18  //NUEVE
            retlw    0x08  // A
            retlw    0x03  // B
            retlw    0x46  // C
            retlw    0x21  // D
            retlw    0x06  // E
            retlw    0x0E  // F
           
           
   tiempo:
            decfsz   temp //decfsz ocupa de 2 ciclos
            bra      tiempo
            retlw    0

  #endasm
}

  • Simulación en proteus:

  • Armado y ejecución:

No hay comentarios:

Publicar un comentario

Ultima entrada ingresada

SISTEMA DE RIEGO AUTOMÁTICO CON MÚSICA

El objetivo era hacer un programa que pueda activar una bomba de agua en la noche, y que por las mañanas reproduzca música para las plantas....