- Código:
#include <clase1.h>
//declaramos tris B, D y puertos B y D
//definimos los SFR utilizados a variables
#define Dir_B 0xF93
#define Dir_D 0xF95
#define Puerto_B 0xF81
#define Puerto_D 0xF83
int temp; //variable temporal para tiempo
//declaramos tris B, D y puertos B y D
//definimos los SFR utilizados a variables
#define Dir_B 0xF93
#define Dir_D 0xF95
#define Puerto_B 0xF81
#define Puerto_D 0xF83
int temp; //variable temporal para tiempo
void main()
{
#asm //se pone porque escribimos en ensamblador
inicio: //etiqueta
movlw 0x00 //a {w}<-0
movwf Dir_B //(TRISB)<-{w} configuramos como salida
movlw 0xFF //dato
movwf Dir_D // (TRISB)<-{w} conf como entrada
ciclo: //etiqueta
//bit test file skip if set (lo del if) va a saltar si NO cumple condicion, si no lee la sig linea
//si es 1 salta la linea de bra ciclo1, sino la lee y se va a la etiqueta ciclo1
btfss Puerto_D,0 //rd0 =0?
//cuando RD=1
bra ciclo1 //salta a etiqueta de ciclo 1
movlw 0
movwf Puerto_B
call tiempo
movlw 0xFF //mientras sea 1 hara este bloque de lineas
movwf Puerto_B
call tiempo
bra ciclo
ciclo1:
movlw 0xAA
movwf Puerto_B
call tiempo
movlw 0x55
movwf Puerto_B
call tiempo
bra ciclo
tiempo: //funcion repetitiva de tiempo
//checar los ciclos de maquina de los comandos 1 ciclo de maquina= (Frec de osc)/4
//31kHz/4 = tardara 100ms
decfsz temp //decfsz ocupa de 2 ciclos
bra tiempo
sub:
decfsz temp //decfsz ocupa de 2 ciclos
bra sub
retlw 0
{
#asm //se pone porque escribimos en ensamblador
inicio: //etiqueta
movlw 0x00 //a {w}<-0
movwf Dir_B //(TRISB)<-{w} configuramos como salida
movlw 0xFF //dato
movwf Dir_D // (TRISB)<-{w} conf como entrada
ciclo: //etiqueta
//bit test file skip if set (lo del if) va a saltar si NO cumple condicion, si no lee la sig linea
//si es 1 salta la linea de bra ciclo1, sino la lee y se va a la etiqueta ciclo1
btfss Puerto_D,0 //rd0 =0?
//cuando RD=1
bra ciclo1 //salta a etiqueta de ciclo 1
movlw 0
movwf Puerto_B
call tiempo
movlw 0xFF //mientras sea 1 hara este bloque de lineas
movwf Puerto_B
call tiempo
bra ciclo
ciclo1:
movlw 0xAA
movwf Puerto_B
call tiempo
movlw 0x55
movwf Puerto_B
call tiempo
bra ciclo
tiempo: //funcion repetitiva de tiempo
//checar los ciclos de maquina de los comandos 1 ciclo de maquina= (Frec de osc)/4
//31kHz/4 = tardara 100ms
decfsz temp //decfsz ocupa de 2 ciclos
bra tiempo
sub:
decfsz temp //decfsz ocupa de 2 ciclos
bra sub
retlw 0
#endasm
}
- Simulación en proteus:
- Armado y ejecución:
No hay comentarios:
Publicar un comentario