Advertisement
Guest User

Seminario micro

a guest
Oct 7th, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;===============================================================================
  2. ; Fatec Sorocaba
  3. ;
  4. ; Eletrônica Automotiva
  5. ; Seminario Microcontroladores
  6. ; Tema: Implementar um contador decrescente de 99 a 0 com intervalo de 100mS
  7. ;
  8. ; Grupo:
  9. ; André Sampaio
  10. ; Artur Alves
  11. ; Elizio Junior
  12. ; João Pedro
  13. ;
  14. ;
  15. ;
  16. ; Projeto: Template_20180903
  17. ; Arquivo: Seminario.asm
  18. ;
  19. ; PIC 16F877A
  20. ; Clock 4MHz
  21. ;
  22. ; demo IDE MPLABx v 2.15v - Assembly Linguagem
  23. ;
  24. ; Baseado no Hardware da PCI Placa Mini Didativa V 0.1
  25. ;
  26. ; Princípio de operação das rotinas : Timer via SW (300mS)
  27. ;                                     Timer HW (Timer 0)
  28. ;                                     Timer 0 com interrupção
  29. ;===============================================================================
  30. ;
  31. ; Detalhes do hardware: O latch 74LS573 passa o dado do PORTD para os Leds, o pino
  32. ;                       de controle do latch correspondente é controlado pelo pino
  33. ;                       RE2 (LED-LE) Que deve ser mantido em nivel 1.
  34. ;                       Os CD4511 acionam os display de 7seg que também esta
  35. ;                       pino de controle desses latchas: PORTE pino RE1.
  36. ;                       Deve ser mantido baixo para escrever nos display de LED.
  37. ;
  38. ; Display LCD : C3 = RS
  39. ;               C4 = E
  40. ;               Dados = PORTD ( sem latch)
  41. ;==========================PIC Escolhido========================================
  42. ;
  43. #include <P16F877A.inc>   ;Arquivo padrão MC p/ UCP PIC16F877A
  44. ;
  45. ;===============================================================================
  46.  __CONFIG _HS_OSC & _WDT_OFF
  47. ;
  48. ;===============================================================================
  49. ;
  50. #DEFINE BANK0 BCF STATUS,RP0 ;seta bank 0 de memória
  51. #DEFINE BANK1 BSF STATUS,RP0 ;seta bank 1 de memória
  52. ;
  53.         cblock 0X20                  ;end.incial mem.usuário
  54.                 cont
  55.                 cont0                ;contador 0
  56.                 cont1                ;contador 1
  57.                 cont2                ;contador 2
  58.                 cont3                ;contador 3
  59.                 flags                ;registrador de flags de uso geral
  60.                 aux1                 ;reg auxiliar 1
  61.                 aux2                 ;reg auxiliar 2
  62.                 leds                 ;leds de uso geral
  63.                 reg_gira             ;red auxiliar
  64.                 salva_w              ;preserva reg w
  65.                 salva_status         ;preserva status
  66.                 nr_duzias            ;contador de nr de duzias produzidas
  67.                 tempo                ;tempo de pwm
  68.  
  69.  
  70.         endc                             ;fim do bloco de memória
  71. ;
  72. ;=========================Define entradas e saidas==============================
  73. ;
  74. #DEFINE LED_0       PORTD,3         ;led pisca
  75. #DEFINE LED_1       PORTD,4         ;led pisca
  76. #DEFINE LED_2       PORTD,5         ;led pisca
  77. #DEFINE LED_3       PORTD,6         ;led pisca
  78. ;
  79. ;===============================Vetor de Reset==================================
  80. ;
  81.         ORG 0x00            ;end. incial de proc.
  82.         goto            inicio
  83. ;
  84. ;====================================EEPROM=====================================
  85. ;
  86. ;não utilizada
  87. ;
  88. ;==============================Inicio da Interrupção============================
  89. ;
  90. ;  rotina de contagem de duzias via interrupção
  91. ;
  92.         ORG 0x04             ;vetor de atendimento a interrupção
  93.         retfie
  94. ;===============================================================================
  95. ;
  96. ;                               INICIALIZAÇÃO
  97. ;
  98. ;===============================================================================
  99. ;
  100. ;inicialização dos REGs internos
  101. ;
  102.     inicio
  103.             BANK1
  104.                   movlw b'11111111'     ;todas entradas
  105.                   movwf TRISA           ;PORT onde estão entradas analogicas
  106.                   movlw b'00011111'
  107.                   movwf TRISB           ;PORT onde estão as chaves
  108.                   movlw b'00000000'     ;1 = entrada, 0 = saida
  109.                   movwf TRISC
  110.                   movlw b'00000000'     ;todas saidas(porta do LED)
  111.                   movwf TRISD
  112.                   movlw b'00000000'     ;todas saidas(porta do stroube com PSP=1)
  113.                   movwf TRISE
  114.                   movlw b'00000111'
  115.                   movwf OPTION_REG
  116.                   movlw b'00000000'
  117.                   movwf INTCON          ;todas interrupções desabilitadas
  118.                   bcf   TRISE,4         ;PORTD normal (não PSP)
  119.  
  120. ;Configuração do Timer0
  121.                   movlw b'00000111' ;Move a Configuração do Timer0 em binario para o work
  122.                   movwf OPTION_REG  ;Move do work para o option_reg  
  123. ;inicializa variaveis
  124.             BANK0
  125.                   clrf aux1
  126.                   clrf aux2  
  127. ;===============================================================================
  128. ;Programa        
  129.           movlw h'99'       ;Move 99 em hexadecimal para começar o programa
  130.           movwf PORTD       ;Move os 99 para o PORTD         
  131.     start
  132.           call delay_50ms
  133.           call delay_50ms
  134. ;Unidades----------------------------------------------------------------------
  135.           decf PORTD        ;Decrementa o PORTD em 1
  136.           movlw h'0f'       ;Move '00001111' para o work
  137.           andwf PORTD, w    ;Testa
  138.           movwf aux1        ;Move a variavel do and para o auxiliar 1
  139.           bcf STATUS,Z      ;Limpa a flag do Status Register
  140.           movlw h'0f'       ;Move '00001111' para work
  141.           xorwf aux1        ;Faz o teste auxiliar
  142.           btfsc STATUS,Z    ;
  143.           call subtrai_6
  144. ;Dezenas-----------------------------------------------------------------------
  145.           movlw h'F0'
  146.           andwf PORTD, w
  147.           bcf STATUS,Z      ;Limpa a flag do Status Register
  148.           movwf aux2        ; Move a variavel do and para o auxiliar 1
  149.           movlw h'F0'       ; Move o valor para o work da variavel de teste
  150.           xorwf aux2        ; faz o teste auxiliar
  151.           btfsc STATUS,Z
  152.           call subtrai_96
  153.          
  154.           goto start               
  155. ;===============================================================================
  156. ;Rotina timer0
  157.     delay_50ms
  158.           movlw .60         ;Move 60 para o work
  159.           movwf TMR0        ;Move para o TMR0
  160.           bcf INTCON, TMR0IF    ;Limpa a flag do timer0
  161.     loop2 btfss INTCON, TMR0IF  ;testa a flag do timer0
  162.           goto loop2
  163.           return         
  164. ;===============================================================================
  165. ;Rotina que subtrai 6 caso seja F
  166.     subtrai_6
  167.           movlw .6      ;Move 6 para o work
  168.           subwf PORTD   ;Subtrai 6 do PORTD
  169.           return        ;Retorna
  170. ;===============================================================================
  171. ;Rotina que subtrai 96 caso seja F
  172.     subtrai_96
  173.           movlw .96     ;Move 96 para o work
  174.           subwf PORTD       ;Subtrai 96 do PORTD
  175.           return        ;Retorna
  176. ;===============================================================================
  177. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement