- ;------------------------------------------------------------------------------ 
- ; DECLARACIÓN DE VARIABLES 
- ;------------------------------------------------------------------------------ 
-   
- #Define    RxD  PORTB,4  ; Receive Data 
- #Define    TxD   PORTB,5  ; Transmit Data 
-   
- tempData1  EQU  0x44 
- counter2  EQU  0x45 
- counter1  EQU  0x46 
-   
- ;------------------------------------------------------------------------------ 
-   
- RS232_setUp: 
-   bsf STATUS,RP0  ; Segundo banco 
-   
-   bsf RxD    ; Configura la entrada 
-   bcf TxD    ; Configura la salida 
-   
-   bcf STATUS,RP0  ; Primer banco 
-   
-   return    ; Retorna donde fue llamada 
-   
- ;------------------------------------------------------------------------------ 
-   
- RS232_readData: 
-   
-   movlw 0x08 
-   movwf counter1 
-   
- waitBegin 
-    
-   btfsc RxD  ; Bit de START? 
-   goto waitBegin  ; No, sigue esperando 
-       ; Si, sigue el programa 
-   
-   call wait_mc100  ; Espera a que termine el bit de START 
-   call wait_mc50  ; Espera medio bit para leer el primer bit de 
-       ; datos medio bit retrasado 
- readBit 
-   
-   bcf STATUS,C  ; Supone que es "0" 
-   btfsc RxD  ; Es "0" realmente? 
-   bsf STATUS,C  ; No, es "1" 
-   
-   rrf tempData1,F 
-   call wait_mc100 
-   
-   decfsz counter1,F; Ha leido todos los bits de datos? 
-   goto readBit  ; No, lee el próximo bit 
-   
-   call wait_mc200  ; Si, espera al bit de STOP 
-   movf tempData1,W; Pone el resultado en el acumulador 
-   
-   return    ; Retorna donde fue llamada 
-   
- ;------------------------------------------------------------------------------ 
-   
- RS232_sendAsciiNumber: 
-   addlw '0' 
- RS232_sendData: 
-   movwf tempData1  ; Guarda el contenido del byte a trans- 
-       ;   mitir 
-   movlw 0x08  ; Número de bits a transmitir 
-   movwf counter1 
-   bcf TxD  ; Bit de START 
-   call wait_mc100 
-   
-  sendBit    ; Comienza a enviar tempData1s 
-   rrf tempData1,F  ; Lleva el bit que se quiere enviar al 
-   btfss STATUS,0  ;  Carry para deducir su valor. ¿Es un 
-       ;  "1"  el bit a transmitir? 
-   goto sendZero  ; No, pues envía un "0" 
-   
-  sendOne 
-   bsf TxD  ; Transmite un "1" 
-   goto endSendBit 
-   
-  sendZero 
-   bcf TxD  ; Transmite un "0" 
-   
-  endSendBit 
-   call wait_mc100  ; Este es el tiempo que estará en alto 
-       ;   o bajo 
-   decfsz counter1,1; Comprueba que es el último bit 
-   goto sendBit  ; Como no es el último bit repite la  
-       ;   operación 
-   bsf TxD  ; Envía dos bits de stop 
-   call wait_mc200 
-   
-   return    ; Retorna donde fue llamada 
-   
- ;------------------------------------------------------------------------------ 
-   
- wait_createMc: 
-   movwf counter2  ; Aporta 1 ciclo de máquina 
-   
- waitLoop 
-   decfsz counter2,1; Aporta 1 c.m. cuando no se salta, y 
-       ;  2 c.m. si se salta. 
-   goto waitLoop  ; Aporta 2 ciclos de máquina 
-   
-   return    ; Aporta 2 ciclos de máquina 
-   
-   
- ;------------------------------------------------------------------------------ 
- ; RETARDOS 
- ;------------------------------------------------------------------------------ 
-   
- wait_mc50:    ; La llamada "call" aporta 2 c.m. 
-   nop    ; Aporta 1 ciclo de máquina 
-   movlw 0Eh  ; Aporta 1 ciclo de máquina 
-   goto wait_createMc; Aporta 2 ciclos de máquina 
-   
- wait_mc100:    ; La llamada "call" aporta 2 c.m. 
-   movlw 1Fh  ; Aporta 1 ciclo de máquina 
-   goto wait_createMc; Aporta 2 ciclos de máquina 
-   
- wait_mc200:    ; La llamada "call" aporta 2 c.m. 
-   nop    ; Aporta 1 ciclo de máquina 
-   movlw 40h  ; Aporta 1 ciclo de máquina 
-   goto wait_createMc; Aporta 2 ciclos de máquina 
-