Guest User

Untitled

a guest
Dec 10th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 1.99 KB | None | 0 0
  1.     list p=12f675 ; Processador utilizado.
  2.     #include <p12f675.inc> ; Biblioteca do PIC.
  3.  
  4.     __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF ; Configuração, _INTRC_OSC_NOCLKOUT: Ativa clock interno (4MHz).
  5.    
  6. ; Variáveis (0x20 = ínicio da RAM de acesso livre)
  7.  
  8. contador1 equ 0x20
  9. contador2 equ 0x22
  10. contador3 equ 0x24
  11.    
  12. ;  ---------------------------------------------------------------------------------------
  13.     org 0x000 ; RESET
  14.     goto inicio
  15.  
  16. ; ----------------------------------------------------------------------------------------
  17.     org 0x004 ; INTERRUPÇÃO
  18.     retfie
  19.  
  20. inicio:
  21.  
  22.     bsf STATUS, RP0 ; RP0 é o 5º bit do STATUS, o bit set seta ele para 1 e muda para o banco 1.
  23.    
  24.     movlw B'00000001' ; Move 00000001 para o registrador W.
  25.     movwf TRISIO ; Bota o pino GP0 (pino 7 do diagrama) como entrada e o resto como saída.
  26.     movwf ANSEL ; Seta entrada analógica AN0
  27.    
  28.     ; bcf OPTION_REG, 5 ; Desativa comparador analógico.
  29.    
  30.     bcf STATUS, RP0 ; Seta banco 0.
  31.  
  32.     movwf ADCON0 ; Ativa conversor A/D
  33.    
  34. codigo:
  35.     bsf ADCON0, 1
  36.  
  37.     call esperar100ms
  38.  
  39.     btfsc ADRESH, 3
  40.     bsf GPIO, 1 ; Acende led.
  41.    
  42.     btfss ADRESH, 3
  43.     bcf GPIO, 1 ; Apaga led.
  44.  
  45.     bcf ADCON0, 1
  46.  
  47.     goto codigo
  48.  
  49. ; 1 ciclo = 2,5 us
  50. ; total = 5 + 35 (=40 ciclos) = call+return-1+movlw+movwf + decfsz+goto (instruções) = 12,5us + 87,5us (tempo)
  51. esperar100us: ; 2 ciclos
  52.     movlw 0xB ; 1 ciclo
  53.     movwf contador1 ; 1 ciclo
  54.    
  55.     decfsz contador1, f ; 2 ciclos
  56.     goto $-1 ; 1 ciclo
  57.    
  58.     return ; 2 ciclos
  59.  
  60. ; total = 5 + 3995 (=4000 ciclos) = 12,5us + 9987,5us
  61. esperar10ms: ; 2 ciclos
  62.     movlw 0x5D ; 1 ciclo
  63.     movwf contador2 ; 1 ciclo
  64.    
  65.     call esperar100us ; 40 ciclos
  66.     decfsz contador2, f ; 2 ciclos
  67.     goto $-2 ; 1 ciclo
  68.    
  69.     return ; 2 ciclos
  70.  
  71. ; total = 5 + 39995 (=40000 ciclos) = 12,5us + 99987,5us
  72. esperar100ms: ; 2 ciclos
  73.     movlw 0xA ; 1 ciclo
  74.     movwf contador3 ; 1 ciclo
  75.    
  76.     call esperar10ms ; 4000 ciclos
  77.     decfsz contador3, f ; 2 ciclos
  78.     goto $-2 ; 1 ciclo
  79.    
  80.     return ; 2 ciclos
  81.    
  82.    
  83.     END
Add Comment
Please, Sign In to add comment