Programa pic.asm

Embed Size (px)

Citation preview

1. ;Comunicacin con RS232;con el PIC16F84 y un XTAL de 4MHz list p=16F84 radix HEX;*****************************Declaracin de los puertos***********************TMR_OptEQU0x01Estado EQU0x03PA_TA EQU0x05PB_TB EQU0x06Intcon EQU0x0BRxdreg EQU0x0C;registro de recepcinTxdreg EQU0x0D;registro de transmisinCont EQU 0x0E ;contador de bits transmitidosDlycnt EQU0x0F;contador de retraso#defineRXport PA_TA,1;llamamos RXport a PA1configurado comola seal RX#defineTXport PA_TA,0;llamamos TXport a PA0configurado comola seal TX#defineSAportPA_TA,3;llamamos SAport a PA3configurado comola seal que activa las salidas#defineENportPA_TA,2;llamamos ENport a PA2configurado comola seal que activa las entradas ORG 0;****************Programacin de laspuertas**************************************** clrfIntcon ;prohibicin de las interrupciones bsf Estado,5 ;seleccin del banco 1 clrfPA_TA;Programacin del PA clrfPB_TB;Programacin del PB bcf Estado,5 ;seleccin del banco 0;****************Inicializacin delcircuito***************************************bsf TXport ;Activacin de Tx porque si no estariatransmitiendobsf ENport ;reseteo de las salidas del circuitoclrf PB_TBbsf SAportbsf Estado,5;seleccin del banco 1bsf RXport;Progracin de RX port como entradabcf Estado,5;seleccin del banco 0bcf SAportIniciocall RxDbtfss Rxdreg,0;Comprueba que orden se le ha mandado de lectura oescrituragoto Salidagoto Entrada;********Programacin como salidas***************************Salida bsf SAport ;se activa el 74373call RxD;leemos dato del ordenadorbsfEstado,5 ;Seleccin del banco 1clrf PB_TB;programacin del PB como salidasbcfEstado,5 ;Seleccin del banco 0 2. movfRxdreg,W ;Movemos el dato recibido a la salidamovwf PB_TBborra bcf SAport;desactivacin del 74373btfsc SAport;comprueba que se ha desactivado el 74373gotoborragotoInicio;*******Programacin como entradas******************************Entrada bcf ENport ;activacin del 74245clrfTxdreg ;reseteo del registro de transmisinbsf Estado,5 ;seleccin del banco 1movlw 0xFF ;programacin de PB como entradamovwf PB_TBbcf Estado,5 ;seleccin delbanco 0movfPB_TB,W;llevamos dato de PB al registro detransmisinmovwf TxdregcallTxD;transmisin del datobsf ENport ;desactivacin del 74245bsf Estado,5 ;seleccin del banco 1clrfPB_TB;programacin del PB como salidasbcf Estado,5 ;seleccin del banco 0clrfPB_TB;reseteo de las salidasgotoInicio;*********************Rutina de recepcin*********************RxD clrf Rxdreg ;reseto del registro de recepcinbtfsc RXport;comprueba que se ha mandado el bit deiniciogoto RxD;si no see ha mandado espera a que lo mandencall Dly_Ini;si se ha mandado hace el retardocorrespondiente al bit de iniciomovlw 0x08;mueve el nmero de bits a recibir al contadormovwf ContRxD_Bit call Dly_bit;hace el retardo del bitbtfsc RXport;comprueba que dato se le ha mandadobsf Rxdreg,7;si es un uno se activa el bit 7 del registro derecepcinbtfss RXportbcf Rxdreg,7;si es un cero se desactiva el bitdecfszCont,W;decrementa el contador y lo guarda enW para rotar slo 6 vecesrrf Rxdreg,f;rota a la derecha el registro de recepcinsi el esultado anterior no es cerodecfszCont,f;decrementa el contador para ve si haterminadogoto RxD_Bit;va a leer otro bitcall Dly_bit;hace el retardo del bit de stopreturn;regresa al salto;*********************Rutina de transmisin*****************************TxD movlw 0x08 ;mueve el nmero de bits a transmitir al contadormovwf Contbcf TXport;envia el bit de iniciocallDly_bit ;hace el retardo del bitTxd_Bit btfsc Txdreg,0;comprueba si es un 0 o un 1 lo que hay queenviarbsf TXport;si es un 1 activa el puerto de transmisinbtfss Txdreg,0bcf TXport;si es un 0 desactiva el puertorrf Txdreg,f;rota a la derecha el registro de 3. transmisincall Dly_bit ;hace el retardodecfszCont,f ;decrementa el contador de bitsgoto Txd_Bit ;si no se han mandado todos los bits va aseguir enviandobsf TXport ;envio del bit de STOPcall Dly_bitcall Dly_bit ;se hacen dos retardos para centrar tiemposreturn;*********************Temporizador de retardo entre bit ybit**********************Dly_bit movlw 0x1D;se hace un retardo de 833us que es eltiempo que se tarda en transmitir;un bit a 9600 baudiosmovwf Dlycntgoto Dly;salto a la rutina de temorizacin;********************Temporizador de retardo del bit deinicio**********************Dly_Ini movlw 0x08 ;retardo equivalente a la mitad del tiempoque tarda entre bit y bitmovwf Dlycntgoto Dly ;salto a la rutina de temporizacin;*********************Rutina detemporizacin****************************************Dly decfszDlycnt,f ;decrementa el contador de temporizacin, siel resultado es 0 saltagoto Dly ;si es 1 vuelve a decrementarreturn ;si es 0 regresa a donde se hizo el salto end