domingo, 18 de noviembre de 2012

Panel 8x8 con PIC16F628A

Para los alumnos de microcontroladores implementar  el Laboratorio :"Panel 8x8 con PIC16F628A"
Hacer las siguientes modificaciones:
A.- Modificar el tipo de letra que se muestra, pasar a letra corrida, si la memoria del micro no alcanza pasarlo al PIC16F877A o similar
B. Implementar  Panel de mensajes 8x48 con  PIC16F877A.

A continuación les mostrare que si se puede implementar un pequeño panel 8x8 de solo mensajes con el PIC 16F628A simulado en el ISIS PROTEUS., Cuando lo implementen y los led no tienen mucho brillo agregar
8 transistores para las FIlas y el ULN2803 para las columnas









'******************************************************************************
define OSC 8
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 4800
RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
INTCON = %11000000 ' Enable interrupts
ON INTERRUPT GoTo MSG ' Declare interrupt handler routine
PIE1.5 = 1 ' Enable interrupt on USART
'******************************************************************************
'VARAIABLES PARA MENSAJE O VISUALIZACION EN PANEL
B1 var Byte:B var Byte : X VAR Byte:I VAR Word : V VAR Byte : B2 VAR BYTE
C VAR Word : W VAR WORD:Velocidad VAR Byte
Col_texto VAR Word:y var byte:dato var byte:d var byte:direccion var word
Cuadro_temp  VAR Byte [8]:Dat VAR Byte [9]
mensaje VAR Byte [40]:Longitud var Word:Letra var byte
Dirf2 VAR Word :CAR VAR BYTE:
'*******************************************************************************
'PINES DE USADOS PARA MEMORIA SERIAL
SDA VAR PORTA.3
SCK VAR PORTA.4
cont Con %10100000
'********************************************************************************
TRISA=0  :PORTA=0
CAR=1
'*******************************************************************************
I2cREAD SDA,SCK,CONT,510,[COL_TEXTO]
pause 100
'*******************************************************************************
'///////////////////////////////////////////////////////////////////////////////

INICIO:
    CAR=1
    w=0
    For I = 1 To Col_texto
        W = I
        For B = 1 To 8'Columnas
            I2CREAD SDA,SCK,CONT,W,[B1]
            'B1.0=B2.7:B1.1=B2.6:B1.2=B2.5: B1.3=B2.4
            'B1.4=B2.3:B1.5=B2.2:B1.6=B2.1: B1.7=B2.0
            Cuadro_temp[b] = ~B1
            W = W + 1
        Next B
        Gosub Desplegar
    Next I
    GOTO INICIO
'*******************************************************************************
Desplegar:
    FOR V = 0 To 10'velocidad                                   'Velocidad
        PORTA.1=1  ' DATOS REGISTRO
        For X = 1 To 8'Columnas
            Toggle PortA.0   ' CLOCK DEL REGISTRO
            PORTA.1=0
            Toggle PortA.0
            Toggle PortA.2   ' LATCH DEL REGISTRO
            Shiftout Portb.3 , Portb.0 ,4,[Cuadro_temp(x)]
            Toggle Portb.4
            Toggle Portb.4
            Toggle PortA.2
            PAUSEUS 800' TIEMPO
            'portb = 255
        Next X
    Next V
    Return
'*******************************************************************************
 disable
'///////////////////////////////////////////////////////////////////////////////
'****/////RUTINA GRABA MENSAJE EN MEMORIA FLASH EEPROM 24C32 ///////***********
'***** SI SE RECIBE BYTE "*"  SE PROCEDE HA LEER MENSAJE Y GRABAR EN EEPROM*****
MSG:

HSERIN [WAIT ("*"),STR MENSAJE \60\"."]
I=0
WHILE  CAR <> 0

    LETRA= MENSAJE(I)
    I=I+1
    IF LETRA="," THEN
        CAR=0
    ENDIF
WEND
LONGITUD=I
'*******************************************************************************
Direccion = 7
'SI MENSAJE ES MEOR A 3 CARACTERES NO SE MUESTRA SOLO SE GUARDA EFECTO
IF LONGITUD < 3 THEN
    RESUME
ENDIF
'################################################################################
'Lee letra por letra y graba en memoria serial 24C32
For I = 0 To Longitud
   LETRA=MENSAJE(I)
   Select Case Letra
'***************************LETRAS MAYUSCULAS***********************************

      Case "A","a"
         Dat(1) = 63
         Dat(2) = 127
         Dat(3) = 200
         Dat(4) = 72
         Dat(5) = 63
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "B","b"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 110
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "C","c"
         Dat(1) = 126
         Dat(2) = 255
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 66
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "D","d"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 126
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "E","e"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 129
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "F","f"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "G","g"
         Dat(1) = 126
         Dat(2) = 255
         Dat(3) = 139
         Dat(4) = 139
         Dat(5) = 78
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "H","h"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 16
         Dat(4) = 16
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "I","i"
         Dat(1) = 129
         Dat(2) = 129
         Dat(3) = 255
         Dat(4) = 129
         Dat(5) = 129
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "J","j"
         Dat(1) = 135
         Dat(2) = 129
         Dat(3) = 129
         Dat(4) = 255
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "K","k"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 40
         Dat(4) = 68
         Dat(5) = 131
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "L","l"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 1
         Dat(4) = 1
         Dat(5) = 1
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "M","m"
         Dat(1) = 255
         Dat(2) = 64
         Dat(3) = 32
         Dat(4) = 64
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "N","n"
         Dat(1) = 255
         Dat(2) = 64
         Dat(3) = 32
         Dat(4) = 16
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "+"
         Dat(1) = 63
         Dat(2) = 160
         Dat(3) = 144
         Dat(4) = 136
         Dat(5) = 63
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "O","o"
         Dat(1) = 126
         Dat(2) = 129
         Dat(3) = 129
         Dat(4) = 129
         Dat(5) = 126
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "P","p"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 112
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "Q","q"
         Dat(1) = 126
         Dat(2) = 129
         Dat(3) = 141
         Dat(4) = 130
         Dat(5) = 125
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "R","r"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 152
         Dat(4) = 148
         Dat(5) = 146
         Dat(6) = 97
         Dat(7) = 0
         Y = 7
         Gosub Grabar

      Case "S","s"
         Dat(1) = 98
         Dat(2) = 145
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 78
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "T","t"
         Dat(1) = 128
         Dat(2) = 128
         Dat(3) = 255
         Dat(4) = 128
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "U","u"
         Dat(1) = 255
         Dat(2) = 255
         Dat(3) = 1
         Dat(4) = 1
         Dat(5) = 254
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "V","v"
         Dat(1) = 252
         Dat(2) = 2
         Dat(3) = 1
         Dat(4) = 2
         Dat(5) = 252
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "W","w"
         Dat(1) = 255
         Dat(2) = 2
         Dat(3) = 4
         Dat(4) = 2
         Dat(5) = 255
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "X","x"
         Dat(1) = 129
         Dat(2) = 66
         Dat(3) = 36
         Dat(4) = 24
         Dat(5) = 36
         Dat(6) = 66
         Dat(7) = 129
         Dat(8) = 0
         Y = 8
         Gosub Grabar

      Case "Y","y"
         Dat(1) = 128
         Dat(2) = 64
         Dat(3) = 63
         Dat(4) = 64
         Dat(5) = 128
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "Z","z"
         Dat(1) = 135
         Dat(2) = 137
         Dat(3) = 145
         Dat(4) = 161
         Dat(5) = 193
         Dat(6) = 0
         Y = 6
         Gosub Grabar
'************************************NUMEROS************************************
      Case "1"
         Dat(1) = 16
         Dat(2) = 32
         Dat(3) = 64
         Dat(4) = 255
         Dat(5) = 0
         Y = 5
         Gosub Grabar

      Case "2"
         Dat(1) = 67
         Dat(2) = 133
         Dat(3) = 137
         Dat(4) = 145
         Dat(5) = 97
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "3"
         Dat(1) = 66
         Dat(2) = 129
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 118
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "4"
         Dat(1) = 8
         Dat(2) = 24
         Dat(3) = 40
         Dat(4) = 72
         Dat(5) = 255
         Dat(6) = 8
         Dat(7) = 0
         Y = 7
         Gosub Grabar

      Case "5"
         Dat(1) = 241
         Dat(2) = 145
         Dat(3) = 145
         Dat(4) = 145
         Dat(5) = 142
         Dat(6) = 0
         Y = 6
         Gosub Grabar

      Case "6"
         Dat(1) = 126
         Dat(2) = 137
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 70
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "7"
         Dat(1) = 128
         Dat(2) = 128
         Dat(3) = 135
         Dat(4) = 136
         Dat(5) = 240
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "8"
         Dat(1) = 118
         Dat(2) = 137
         Dat(3) = 137
         Dat(4) = 137
         Dat(5) = 118
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "9"
         Dat(1) = 112
         Dat(2) = 136
         Dat(3) = 136
         Dat(4) = 136
         Dat(5) = 127
         Dat(6) = 0
         Y = 6
         Gosub Grabar
      Case "0"
         Dat(1) = 126
         Dat(2) = 225
         Dat(3) = 145
         Dat(4) = 137
         Dat(5) = 135
         Dat(6) = 126
         Dat(7) = 0
         Y = 7
         Gosub Grabar

'***********************************SIGNOS**************************************
   
   Case " "                                                 'espacio
         Dat(1) = 0
         Dat(2) = 0
         Dat(3) = 0
         Y = 3
         Gosub Grabar
 
 
    Case "%"                                                ' cara feliz

         Dat(1) = 60
         Dat(2) = 66
         Dat(3) = 169
         Dat(4) = 133
         Dat(5) = 133
         Dat(6) = 169
         Dat(7) = 66
         Dat(8) = 60
         Dat(9) = 0
         Y = 9
         Gosub Grabar
     Case ")"                                               ' cara TRISTE

         Dat(1) = 60
         Dat(2) = 66
         Dat(3) = 165
         Dat(4) = 137
         Dat(5) = 137
         Dat(6) = 165
         Dat(7) = 66
         Dat(8) = 60
         Dat(9) = 0
         Y = 9
         Gosub Grabar
    Case "$"                                               'corazon
         Dat(1) = 112
         Dat(2) = 248
         Dat(3) = 124
         Dat(4) = 62
         Dat(5) = 63
         Dat(6) = 124
         Dat(7) = 248
         Dat(8) = 112
         Dat(9) = 0
         Y = 9
         Gosub Grabar  
      Case "&"                                              'corazon ROTO
         Dat(1) = 112
         Dat(2) = 248
         Dat(3) = 120
         Dat(4) = 54
         Dat(5) = 39
         Dat(6) = 92
         Dat(7) = 152
         Dat(8) = 112
         Dat(9) = 0
         Y = 9
         Gosub Grabar
      Case "?"                                                 'interrogacion
         Dat(1) = 64
         Dat(2) = 128
         Dat(3) = 128
         Dat(4) = 141
         Dat(5) = 144
         Dat(6) = 96
         Dat(7) = 0
         Y = 7
         Gosub Grabar
      Case "("                                                ' telefono
         Dat(1) = 14
         Dat(2) = 7
         Dat(3) = 7
         Dat(4) = 14
         Dat(5) = 220
         Dat(6) = 248
         Dat(7) = 112
         Dat(8) = 0
         Y = 8
         Gosub Grabar  
       
     
 '*******************************letras minusculas******************************
      Case Else
         Dat(1) = 0
         Y = 1
         Gosub Grabar
 
   End Select
 
Next I
    COL_TEXTO = Direccion  ' total de bytes incluido los 48 bytes iniciales
    Dirf2 = COL_TEXTO + 8  ' sele agrega 48 ceros al final
    Dato = 0
    For I = COL_TEXTO To Dirf2
        I2cWRITE SDA,SCK,CONT,i,[dato] ' graba 48 ceros al final de mensaje
    pause 10
    Next I
    'GRABA EL VALOR DE LA CANTIDAD DE BYTES DEL MENSAJE EN LA POSICION 510
    I2cWRITE SDA,SCK,CONT,510,[COL_TEXTO]
    pause 10
    Dato = 0
    For I = 0 To 7                                          
        I2cWRITE SDA,SCK,CONT,i,[dato]
        pause 10
    Next I
RESUME

'################################################################################
'*******************************************************************************
grabar: ' grabar en memoria los bytes de las letras del mensaje
    For D = 1 To Y
         Direccion = Direccion + 1
         Dato = Dat(d)
         I2cWRITE SDA,SCK,CONT,DIRECCION,[dato]
         pause 10
    Next d
 
 return
'******************************************************************************

viernes, 16 de noviembre de 2012

CONTROL REMOTO IR -PIC : PROTOCOLO SIRC SONY Y RC5 PHILLIPS

Para los Alumnos de Microcontroladores y los  que deseen implementarlo...
Les dejo imágenes  y código de programa que les ayudara ha realizar un  Control Remoto Universal. Los protocolos que tienen que implementar se encuentran en este Enlace.
El control remoto que se implementado y simulado en ISIS PROTEUS simula los protocolos IR: SIRC  de SONY y RC5 PHILLIPS, con este ejemplo ya  pueden culminar su trabajo.
Tiene comunicación Serial por el se envía los comandos respectivos tiene el siguiente formato:
$Dirección-Comando.
La "Dirección" es de tres digitos al igual que el "Comando" Ejemplo: "$005053."






'*******************************************************************************
'Interupción del puerto USART
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 2400
RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
INTCON = %11000000 ' Enable interrupts
ON INTERRUPT GoTo PROTOCOLO ' Declare interrupt handler routine
PIE1.5 = 1 ' Enable interrupt on USART
'*******************************************************************************                 
'// Define variables
Ciclos   VAR BYTE     '// numero de ciclos 
Index    VAR BYTE     '// Index 
DBYTE    VAR BYTE     '// Byte de datos
ABYTE    VAR BYTE     '// 5-bit dirección  - protocolo SIRC
Cabecera var byte
Cero var byte
Uno var byte
RETARDO VAR word
RETARDO1 VAR byte
RET VAR byte
'*******************************************************************************
COMANDO VAR BYTE[7]
MARCA VAR BYTE : TIPO1 VAR BYTE : TIPO2 VAR BYTE : TIPO3 VAR BYTE
ACCION1 VAR BYTE : ACCION2 VAR BYTE : ACCION3 VAR BYTE : I var byte
TRISB.7 = 0             
TRISB.1 = 0             
portb.1=0
'*******************************************************************************
INICIO:
    pause 10
    PORTB.7 = 0                
GOTO INICIO
DISABLE
'*******************************************************************************
PROTOCOLO:      'SELECIONAR PROTOCOLO
    HSerin [WAIT ("$"),STR COMANDO \8\"."] 
    MARCA = COMANDO[0]  ' MARCA , SONY, LG ETC
   
    SELECT CASE MARCA
        CASE "A" ' MARCA SONY EJECUTAR PROTOCOLO SIRC
            Cabecera=96 '// Cabecera = (96 * 25uS) = 2.4mS de duración
            Cero=24     '// Cero = (24 * 25uS) = 0.6mS  de duración
            Uno=48      '// Uno = (48 * 25uS) = 1.2mS de duración
            ret=150
            FOR I=0 TO 100
                GOSUB SIRC
            NEXT I
    
        CASE "B"
            Cero=32     '// Cero = (32 * 28uS) = 0.889mS  de duración
            Uno=32    '// Uno = (32 * 28uS) = 0.889MS de duración
            RETARDO = 889
            ret=156
            FOR I=0 TO 100
                GOSUB RC5
            NEXT I
        CASE "C"
    
        CASE "D"
    
    END SELECT
    
RESUME
'*******************************************************************************   
'//////////////////////////////PROTOCOLO SIRC///////////////////////////////////
SIRC:
    DBYTE = (COMANDO[4]-48)*100 +(COMANDO[5]-48)*10+ COMANDO[6]-48
    ABYTE = (COMANDO[1]-48)*100 +(COMANDO[2]-48)*10+ COMANDO[3]-48
    GOSUB ENVIAR_SIRC
RETURN
'*******************************************************************************
   '// Send Cabecera Pulsos + 13-bit data/address packet on keypress
ENVIAR_SIRC:    
   Ciclos = Cabecera    
   CALL Pulsos         
   '// Enviar 7 bits de datos
   FOR Index = 0 TO 6 
    IF DBYTE.0[Index] = 0 THEN 
      Ciclos = Cero
      retardo=ret
    ELSE
      Ciclos = Uno
      retardo=ret
    ENDIF
    CALL Pulsos       
   NEXT Index         
  '// Enviar 5-bit de dirección
    FOR Index = 0 TO 4 
    IF ABYTE.0[Index] = 0 THEN
      Ciclos = Cero   
      retardo=ret
    ELSE
      Ciclos = Uno    
      retardo=ret
    ENDIF
    CALL Pulsos       
   NEXT Index         
   PAUSE  25          '// 25mS delay entre paquetes  
   return       
'*******************************************************************************
Pulsos:                '// Genera 40kHz                  ;
ASM 
Pulso   bsf PORTB, 7       ;// 1uS, LED=on [necesita 25uS total]
        goto $+1           ;// 3uS (2uS por goto $+1)
        goto $+1           ;// 5uS
        goto $+1           ;// 7uS
        goto $+1           ;// 9uS
        goto $+1           ;// 11uS
        goto $+1           ;// 13uS 
        bcf PORTB, 7       ;// 14uS, LED=off
        goto $+1           ;// 16uS
        goto $+1           ;// 18uS
        goto $+1           ;// 20uS
        goto $+1           ;// 22uS
        decfsz _Ciclos,f   ;// 23uS
        goto Pulso        ;// 25us 
        goto $+1          ;//2
salto   decfsz _RETARDO,f ;// 3
        goto salto        ;// 4 
ENDASM
RETURN             '// Retorna programa Enviar_SIRC
'*******************************************************************************   
'//////////////////////////////FIN PROTOCOLO SIRC///////////////////////////////
'-------------------------------------------------------------------------------
'//////////////////////////////PROTOCOLO RC5///////////////////////////////////
RC5:  
    DBYTE = (COMANDO[4]-48)*100 +(COMANDO[5]-48)*10+ COMANDO[6]-48
    ABYTE = (COMANDO[1]-48)*100 +(COMANDO[2]-48)*10+ COMANDO[3]-48 +192
    GOSUB ENVIAR_RC5
RETURN
'*******************************************************************************
   '// Send Cabecera Pulsos + 13-bit data/address packet on keypress
ENVIAR_RC5:                            
   '// Enviar 8 bits  direccion mas cabecera
   FOR Index = 7 TO 0 STEP-1 
    IF ABYTE.0[Index] = 0 THEN 
      Ciclos = Cero
      CALL FREC36
      ELSE
      Ciclos = Uno
      retardo1=ret
      CALL FREC36b
     ENDIF
    NEXT Index         
  '// Enviar 6-bit de datos
    FOR Index = 5 TO 0 STEP-1 
    IF DBYTE.0[Index] = 0 THEN
      Ciclos = Cero
      CALL FREC36
    ELSE
      Ciclos = Uno
      retardo1=ret
      CALL FREC36b    
    ENDIF 
    NEXT Index         
   PAUSE  25          '// 25mS delay entre paquetes         
   return
'*******************************************************************************
FREC36: ' GENERA FRECUENCIA DE 36KHZ APROX , BIT 0
ASM                   ;
FRE36   bsf PORTB, 7       ;// 1uS, LED=on [necesita 28uS total]
        goto $+1           ;// 3uS (2uS por goto $+1)
        goto $+1           ;// 5uS
        goto $+1           ;// 7uS
        goto $+1           ;// 9uS
        goto $+1           ;// 11uS
        goto $+1           ;// 13uS 
        bcf PORTB, 7       ;// 14uS, LED=off
        goto $+1           ;// 16uS
        goto $+1           ;// 18uS
        goto $+1           ;// 20uS
        goto $+1           ;// 22uS
        goto $+1           ;// 24uS
        NOP                ;// 25US
        decfsz _Ciclos,f   ;// 27uS
        goto FRE36        ;// 28us            
ENDASM
PAUSEUS RETARDO
RETURN             '// Retorna programa Enviar_RC5
'******************************************************************************
FREC36b:' GENERA FRECUENCIA DE 36KHZ APROX , BIT 1
ASM     
salto1  goto $+1           ;// 2uS
        decfsz _RETARDO1,f ;// 3us
        goto salto1        ;// 5us
        nop                ;// 6us                 ;
FRE     bsf PORTB, 7       ;// 1uS, LED=on [necesita 25uS total]
        goto $+1           ;// 3uS (2uS por goto $+1)
        goto $+1           ;// 5uS
        goto $+1           ;// 7uS
        goto $+1           ;// 9uS
        goto $+1           ;// 11uS
        goto $+1           ;// 13uS 
        bcf PORTB, 7       ;// 14uS, LED=off
        goto $+1           ;// 16uS
        goto $+1           ;// 18uS
        goto $+1           ;// 20uS
        goto $+1           ;// 22uS
        NOP                ;// 23uS
        decfsz _Ciclos,f   ;// 24uS
        goto FRE           ;// 26us            
ENDASM
RETURN                     '// Retorna programa Enviar_RC5
'*******************************************************************************   
'//////////////////////////////FIN PROTOCOLO RC5/////////////////////////////// 
'-------------------------------------------------------------------------------



miércoles, 24 de octubre de 2012