- Código:
#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