Advertisement
ericksm

Transmisor_RF_433MHz

May 9th, 2024 (edited)
1,844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 7.19 KB | None | 0 0
  1.  __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  2.  LIST P=16F84A
  3.  INCLUDE  <P16F84A.INC>
  4.  
  5.   ERRORLEVEL -302
  6.  
  7. variables udata_shr 0x0C
  8. Contador    res 1       ; El contador a visualizar.
  9. Count1      res 1
  10. R_ContA     res 1       ; Contadores para los retardos.
  11. R_ContB     res 1
  12. R_ContC     res 1
  13.    
  14.  
  15. ; ZONA DE CÓDIGOS ********************************************************************
  16.     org     0x00
  17.     goto    INICIO
  18.  
  19. INICIO
  20.     bsf     STATUS,RP0      ; Acceso al Banco 1.
  21.     clrf    TRISB       ; Las líneas del Puerto B se configuran como salida.
  22.     movlw   b'00001111'     ; Las 4 líneas del Puerto A se configuran como entrada.
  23.     movwf   TRISA
  24.     bcf     STATUS,RP0      ; Acceso al Banco 0.
  25.     clrf    PORTB       ; comenzamos con bit 0 en la salida
  26. Principal
  27.     movf    PORTA,W     ; Lee el valor de las variables de entrada.
  28.     andlw   b'00001111'     ; Se queda con los 4 bits bajos de entrada.
  29.     movwf   Contador        ; guardo dato enviado
  30.     btfsc   STATUS,2
  31.     goto    Fin
  32.     call    Retardo_20ms    ; Espera que se estabilicen los niveles de tensión.
  33. ;compruebo que sea el mismo dato
  34.     movf    PORTA,W     ; Lee el valor de las variables de entrada.
  35.     andlw   b'00001111'     ; Se queda con los 4 bits bajos de entrada.
  36.     subwf   Contador,0
  37.     btfss   STATUS,2        ; Comprueba si es un rebote.
  38.     goto    Fin         ; Era un rebote y sale fuera.
  39.     clrf    Count1
  40. ;Pulsador correcto, procedo a enviar datos.  
  41.     bsf     PORTB,3
  42. ;envia los datos
  43.     bsf     PORTB,1     ; activa el tx
  44. ;primero envia el dato STAR   (1 7ms y 0 5ms)
  45.     call    DATOUNO
  46.     bcf     PORTB,0
  47.     call    Retardo_5ms
  48. ;envio dato
  49. BITS
  50.     btfss   Contador,0
  51.     goto    PREDATO
  52.     call    DATOUNO
  53. CONTINUAR
  54.     rrf     Contador,1
  55.     incf    Count1
  56.     movf    Count1,W        ; Lee el valor de las variables de entrada.
  57.     sublw   d'4'
  58.     btfss   STATUS,2
  59.     goto    BITS
  60. ;espacio entre dato y dato enviado
  61.     bcf     PORTB,0
  62.     bcf     PORTB,1
  63.     bcf     PORTB,3
  64.     call    Retardo_20ms
  65. Fin
  66.     goto    Principal
  67.  
  68. PREDATO
  69.    call     DATOCERO
  70.    goto     CONTINUAR
  71. DATOUNO
  72.    bsf      PORTB,0
  73.    call     Retardo_5ms
  74.    return
  75. DATOCERO
  76.    bcf      PORTB,0
  77.    call     Retardo_5ms
  78.    return
  79.  
  80. ;//////////////// RETARDOS ///////////////////////
  81. ;   ===================================================================
  82. ;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  83. ;     E. Palacios, F. Remiro y L. López.       www.pic16f84a.com
  84. ;     Editorial Ra-Ma.  www.ra-ma.es
  85. ;   ===================================================================
  86. ; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
  87.  
  88. Retardo_200ms               ; La llamada "call" aporta 2 ciclos máquina.
  89.     movlw   d'200'          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  90.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  91. Retardo_100ms               ; La llamada "call" aporta 2 ciclos máquina.
  92.     movlw   d'100'          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  93.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  94. Retardo_50ms                ; La llamada "call" aporta 2 ciclos máquina.
  95.     movlw   d'50'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  96.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  97. Retardo_20ms                ; La llamada "call" aporta 2 ciclos máquina.
  98.     movlw   d'20'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  99.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  100. Retardo_10ms                ; La llamada "call" aporta 2 ciclos máquina.
  101.     movlw   d'10'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  102.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  103. Retardo_5ms             ; La llamada "call" aporta 2 ciclos máquina.
  104.     movlw   d'5'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  105.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  106. Retardo_2ms             ; La llamada "call" aporta 2 ciclos máquina.
  107.     movlw   d'2'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  108.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  109. Retardo_1ms             ; La llamada "call" aporta 2 ciclos máquina.
  110.     movlw   d'1'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  111. ;
  112. ; El próximo bloque "Retardos_ms" tarda:
  113. ; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
  114. ; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
  115. ; que a 4 MHz son 1002 µs = 1 ms.
  116. ;
  117. Retardos_ms
  118.     movwf   R_ContB         ; Aporta 1 ciclo máquina.
  119. R1ms_BucleExterno
  120.     movlw   d'249'          ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
  121.     movwf   R_ContA         ; Aporta Mx1 ciclos máquina.
  122. R1ms_BucleInterno
  123.     nop             ; Aporta KxMx1 ciclos máquina.
  124.     decfsz  R_ContA,F       ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
  125.     goto    R1ms_BucleInterno       ; Aporta (K-1)xMx2 ciclos máquina.
  126.     decfsz  R_ContB,F       ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  127.     goto    R1ms_BucleExterno   ; Aporta (M-1)x2 ciclos máquina.
  128.     return              ; El salto del retorno aporta 2 ciclos máquina.
  129.  
  130. ; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
  131. ;
  132. Retardo_20s             ; La llamada "call" aporta 2 ciclos máquina.
  133.     movlw   d'200'          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  134.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  135. Retardo_10s             ; La llamada "call" aporta 2 ciclos máquina.
  136.     movlw   d'100'          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  137.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  138. Retardo_5s              ; La llamada "call" aporta 2 ciclos máquina.
  139.     movlw   d'50'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  140.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  141. Retardo_2s              ; La llamada "call" aporta 2 ciclos máquina.
  142.     movlw   d'20'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  143.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  144. Retardo_1s              ; La llamada "call" aporta 2 ciclos máquina.
  145.     movlw   d'10'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  146.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  147. Retardo_500ms               ; La llamada "call" aporta 2 ciclos máquina.
  148.     movlw   d'5'            ; Aporta 1 ciclo máquina. Este es el valor de "N".
  149. ;
  150. ; El próximo bloque "Retardo_1Decima" tarda:
  151. ; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
  152. ;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
  153. ; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
  154. ; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
  155. ;
  156. Retardo_1Decima
  157.     movwf   R_ContC         ; Aporta 1 ciclo máquina.
  158. R1Decima_BucleExterno2
  159.     movlw   d'100'          ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
  160.     movwf   R_ContB         ; Aporta Nx1 ciclos máquina.
  161. R1Decima_BucleExterno
  162.     movlw   d'249'          ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
  163.     movwf   R_ContA         ; Aporta MxNx1 ciclos máquina.
  164. R1Decima_BucleInterno          
  165.     nop             ; Aporta KxMxNx1 ciclos máquina.
  166.     decfsz  R_ContA,F       ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
  167.     goto    R1Decima_BucleInterno   ; Aporta (K-1)xMxNx2 ciclos máquina.
  168.     decfsz  R_ContB,F       ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
  169.     goto    R1Decima_BucleExterno   ; Aporta (M-1)xNx2 ciclos máquina.
  170.     decfsz  R_ContC,F       ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  171.     goto    R1Decima_BucleExterno2  ; Aporta (N-1)x2 ciclos máquina.
  172.     return              ; El salto del retorno aporta 2 ciclos máquina.
  173.  
  174.    
  175.    
  176.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement