Advertisement
ericksm

Receptor_RF_433MHz

May 9th, 2024
1,715
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 10.04 KB | None | 0 0
  1.  __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC; MCP19110 Configuration Bit Settings
  2. ; Assembly source line config statements
  3.  
  4.  LIST      P=16F84A
  5.  INCLUDE  <P16F84A.INC>
  6.  
  7.    ERRORLEVEL -302
  8.    
  9. variables udata_shr 0x0C
  10. cuenta      res 1       ; El contador a visualizar.
  11. Count1      res 1
  12. contador    res 1
  13. datoserie   res 1
  14. R_ContA     res 1       ; Contadores para los retardos.
  15. R_ContB     res 1
  16. R_ContC     res 1
  17.  
  18.  
  19. ; ZONA DE CÓDIGOS ********************************************************************
  20.  
  21.     ORG     0x00        ; El programa comienza en la dirección 0.
  22.     goto    Inicio
  23.     org     0x04
  24.     goto    Timer0_interrupcion
  25. Inicio
  26.     bsf     STATUS,RP0      ; Acceso al Banco 1.
  27.     clrf    TRISB       ; Las líneas del Puerto B se configuran como salida.
  28.     movlw   b'00000001'     ; Las 4 líneas del Puerto A se configuran como entrada.
  29.     movwf   TRISA
  30.     movlw   b'00000111'
  31.     movwf   OPTION_REG      ;prescaler a 256  
  32.     bcf     STATUS,RP0      ; Acceso al Banco 0.
  33.     clrf    PORTB
  34. Principal
  35.     movlw   0x08
  36.     movwf   cuenta
  37.     movlw   0x04
  38.     movwf   contador
  39.     btfsc   PORTA,0
  40.     goto    Principal
  41. ;hay un tiempo aleatorio que debo esperar para obtener el uno del dato star.
  42. EsperoUno
  43.     btfss   PORTA,0
  44.     goto    EsperoUno
  45.  
  46. ;tiempo para reconocer 1 de dato STAR  (5ms)
  47. TiempoUno
  48.     ;se testea en cada momento
  49.     btfss   PORTA,0     ; sigue siendo 1?
  50.     goto    Fin
  51.     call    Retardo_500micros
  52.     decfsz  cuenta,1
  53.     goto    TiempoUno
  54.     bsf     PORTB,7     ; PRUEBASSS
  55.     movlw   0x08
  56.     movwf   cuenta
  57. ;tiempo que es cero de dato STAR  (5ms)
  58.     call    Retardo_1ms
  59. TiempoCero
  60. ;se testea en cada momento
  61.     call    Retardo_500micros
  62.     btfsc   PORTA,0     ; sigue siendo 1?
  63.     goto    Fin
  64.     decfsz  cuenta,1
  65.     goto    TiempoCero
  66.     clrf    datoserie
  67. ; verifico dato enviado durante 20ms
  68.     call    Retardo_1ms
  69.     movlw   d'14'
  70.     movwf   TMR0        ; CARGO EL TIMER0
  71.     movlw   b'10100000'    
  72.     movwf   INTCON      ; AUTORIZO INTERRUPCION DEL TIMER0
  73.  
  74. LOOPDATOS
  75.     call    Retardo_1ms
  76.     movf    PORTA,0
  77.     movwf   Count1
  78.     call    Retardo_1ms
  79.     movf    Count1,0
  80.     subwf   PORTA,0
  81.     btfss   STATUS,2
  82.     goto    Fin
  83.     call    Retardo_1ms
  84.     movf    Count1,0
  85.     subwf   PORTA,0
  86.     btfss   STATUS,2
  87.     goto    Fin
  88.     bsf     STATUS,0
  89.     btfss   Count1,0
  90.     bcf     STATUS,0
  91.     rrf     datoserie,1  
  92.     call    Retardo_2ms
  93.     decfsz  contador,1
  94.     goto    LOOPDATOS
  95. ;continua. El swapf es para obtener el verdadero dato     DATO ->  DATOSERIE
  96. ;se divide en 2 segmentos de 4 bits, el swapf cambia, luego    (DSERIE1)(DSERIE2)  ->  (DSERIE2)(DSERIE1)
  97.     swapf   datoserie,1
  98.     movf    datoserie,0
  99.     movwf   PORTB
  100. ;espero un tiempo menor a 40ms
  101.     call    Retardo_10ms
  102.     goto    Principal
  103. Fin
  104.     clrf    PORTB
  105.     goto    Principal
  106.    
  107. ;Temporizacion por desbordamiento del Timer0
  108. Timer0_interrupcion    
  109.     btfss   PORTA,0
  110.     clrf    PORTB
  111.     ;TEST/////////////////////////
  112.     movlw   0x80
  113.     xorwf   PORTB,F
  114.     ;////////////////////////////////
  115.     bcf     INTCON,T0IF
  116.     retfie
  117. ;---------------------------------------------
  118.  
  119.  
  120. ;//////////////// RETARDOS ///////////////////////
  121. ;   ===================================================================
  122. ;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  123. ;     E. Palacios, F. Remiro y L. López.       www.pic16f84a.com
  124. ;     Editorial Ra-Ma.  www.ra-ma.es
  125. ;   ===================================================================
  126. ; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
  127. ;
  128. Retardo_500micros           ; La llamada "call" aporta 2 ciclos máquina.
  129.     nop             ; Aporta 1 ciclo máquina.
  130.     movlw   d'164'          ; Aporta 1 ciclo máquina. Este es el valor de "K".
  131.     goto    RetardoMicros       ; Aporta 2 ciclos máquina.
  132. Retardo_200micros               ; La llamada "call" aporta 2 ciclos máquina.
  133.     nop             ; Aporta 1 ciclo máquina.
  134.     movlw   d'64'           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  135.     goto    RetardoMicros       ; Aporta 2 ciclos máquina.
  136. Retardo_100micros               ; La llamada "call" aporta 2 ciclos máquina.
  137.     movlw   d'31'           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  138.     goto    RetardoMicros       ; Aporta 2 ciclos máquina.
  139. Retardo_50micros                ; La llamada "call" aporta 2 ciclos máquina.
  140.     nop             ; Aporta 1 ciclo máquina.
  141.     movlw   d'14'           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  142.     goto    RetardoMicros       ; Aporta 2 ciclos máquina.
  143. Retardo_20micros                ; La llamada "call" aporta 2 ciclos máquina.
  144.     movlw   d'5'            ; Aporta 1 ciclo máquina. Este es el valor de "K".
  145. ;
  146. ; El próximo bloque "RetardoMicros" tarda:
  147. ; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
  148. ;
  149. RetardoMicros
  150.     movwf   R_ContA         ; Aporta 1 ciclo máquina.
  151. Rmicros_Bucle
  152.     decfsz  R_ContA,F       ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  153.     goto    Rmicros_Bucle       ; Aporta (K-1)x2 ciclos máquina.
  154.     return              ; El salto del retorno aporta 2 ciclos máquina.
  155. ;
  156. ;En total estas subrutinas tardan:
  157. ; - Retardo_500micros:  2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
  158. ; - Retardo_200micros:  2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
  159. ; - Retardo_100micros:  2     + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
  160. ; - Retardo_50micros :  2 + 1 + 1 + 2 + (2 + 3K) =  50 cm =  50 µs. (para K= 14 y 4 MHz).
  161. ; - Retardo_20micros :  2     + 1     + (2 + 3K) =  20 cm =  20 µs. (para K=  5 y 4 MHz).
  162.        
  163.    
  164. ; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
  165.  
  166. Retardo_200ms               ; La llamada "call" aporta 2 ciclos máquina.
  167.     movlw   d'200'          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  168.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  169. Retardo_100ms               ; La llamada "call" aporta 2 ciclos máquina.
  170.     movlw   d'100'          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  171.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  172. Retardo_50ms                ; La llamada "call" aporta 2 ciclos máquina.
  173.     movlw   d'50'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  174.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  175. Retardo_20ms                ; La llamada "call" aporta 2 ciclos máquina.
  176.     movlw   d'20'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  177.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  178. Retardo_10ms                ; La llamada "call" aporta 2 ciclos máquina.
  179.     movlw   d'10'           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  180.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  181. Retardo_5ms             ; La llamada "call" aporta 2 ciclos máquina.
  182.     movlw   d'5'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  183.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  184. Retardo_2ms             ; La llamada "call" aporta 2 ciclos máquina.
  185.     movlw   d'2'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  186.     goto    Retardos_ms     ; Aporta 2 ciclos máquina.
  187. Retardo_1ms             ; La llamada "call" aporta 2 ciclos máquina.
  188.     movlw   d'1'            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  189. ;
  190. ; El próximo bloque "Retardos_ms" tarda:
  191. ; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
  192. ; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
  193. ; que a 4 MHz son 1002 µs = 1 ms.
  194. ;
  195. Retardos_ms
  196.     movwf   R_ContB         ; Aporta 1 ciclo máquina.
  197. R1ms_BucleExterno
  198.     movlw   d'249'          ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
  199.     movwf   R_ContA         ; Aporta Mx1 ciclos máquina.
  200. R1ms_BucleInterno
  201.     nop             ; Aporta KxMx1 ciclos máquina.
  202.     decfsz  R_ContA,F       ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
  203.     goto    R1ms_BucleInterno       ; Aporta (K-1)xMx2 ciclos máquina.
  204.     decfsz  R_ContB,F       ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  205.     goto    R1ms_BucleExterno   ; Aporta (M-1)x2 ciclos máquina.
  206.     return              ; El salto del retorno aporta 2 ciclos máquina.
  207.  
  208. ; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
  209. ;
  210. Retardo_20s             ; La llamada "call" aporta 2 ciclos máquina.
  211.     movlw   d'200'          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  212.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  213. Retardo_10s             ; La llamada "call" aporta 2 ciclos máquina.
  214.     movlw   d'100'          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  215.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  216. Retardo_5s              ; La llamada "call" aporta 2 ciclos máquina.
  217.     movlw   d'50'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  218.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  219. Retardo_2s              ; La llamada "call" aporta 2 ciclos máquina.
  220.     movlw   d'20'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  221.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  222. Retardo_1s              ; La llamada "call" aporta 2 ciclos máquina.
  223.     movlw   d'10'           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  224.     goto    Retardo_1Decima     ; Aporta 2 ciclos máquina.
  225. Retardo_500ms               ; La llamada "call" aporta 2 ciclos máquina.
  226.     movlw   d'5'            ; Aporta 1 ciclo máquina. Este es el valor de "N".
  227. ;
  228. ; El próximo bloque "Retardo_1Decima" tarda:
  229. ; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
  230. ;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
  231. ; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
  232. ; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
  233. ;
  234. Retardo_1Decima
  235.     movwf   R_ContC         ; Aporta 1 ciclo máquina.
  236. R1Decima_BucleExterno2
  237.     movlw   d'100'          ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
  238.     movwf   R_ContB         ; Aporta Nx1 ciclos máquina.
  239. R1Decima_BucleExterno
  240.     movlw   d'249'          ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
  241.     movwf   R_ContA         ; Aporta MxNx1 ciclos máquina.
  242. R1Decima_BucleInterno          
  243.     nop             ; Aporta KxMxNx1 ciclos máquina.
  244.     decfsz  R_ContA,F       ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
  245.     goto    R1Decima_BucleInterno   ; Aporta (K-1)xMxNx2 ciclos máquina.
  246.     decfsz  R_ContB,F       ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
  247.     goto    R1Decima_BucleExterno   ; Aporta (M-1)xNx2 ciclos máquina.
  248.     decfsz  R_ContC,F       ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  249.     goto    R1Decima_BucleExterno2  ; Aporta (N-1)x2 ciclos máquina.
  250.     return              ; El salto del retorno aporta 2 ciclos máquina.   
  251.    
  252.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement