Advertisement
Guest User

Untitled

a guest
Oct 15th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;$INCLUDE   (reg_c51.INC)
  2. transmit_completed      BIT 20H.1; software flag
  3. serial_data             DATA 08H
  4. data_save               DATA 09H
  5. data_example            DATA 0AH;
  6. ; SPI
  7. SPCON                   DATA    0C3H
  8. SPSTA                   DATA    0C4H
  9. SPDAT                   DATA    0C5H
  10. ; WATCHDOG TIMER
  11. IEN1                    DATA    0B1H
  12.  
  13. ORG 0000h
  14.     JMP SET_INTERRUPT
  15.  
  16. ORG 4Bh                 ; Endereço da interrupção SPI
  17.     LJMP it_SPI         ; Programa para onde vai a rotina de interrupção
  18.  
  19. ORG 0100h
  20.    
  21. SET_INTERRUPT:
  22.     MOV data_example,#55h;           /* data example */
  23.  
  24.     ORL SPCON,#10h;                  /* Master mode */
  25.     SETB P1.1;                       /* enable master */
  26.     ORL SPCON,#82h;                  /* Fclk Periph/128 */
  27.     ANL SPCON,#0F7h;                 /* CPOL=0; transmit mode example */
  28.     ORL SPCON,#04h;                  /* CPHA=1; transmit mode example */
  29.     ORL IEN1,#04h;                   /* enable spi interrupt */
  30.     ORL SPCON,#20h                  ; DESABILITA SS
  31.     ORL SPCON,#40h;                  /* run spi */
  32.     CLR transmit_completed;          /* clear software transfert flag */
  33.     SETB EA;                         /* enable interrupts */
  34.  
  35. BEGIN:
  36.     MOV P2, #0xFF                       ; Inicializa a porta P2
  37.    
  38.     MOV A, #0xFE
  39.     MOV P2, A
  40.     NOP
  41.     MOV A, P2
  42.     CJNE A, #0xFE, LINHA4
  43.    
  44.     MOV A, #0xFD
  45.     MOV P2, A
  46.     NOP
  47.     MOV A, P2
  48.     CJNE A, #0xFD, LINHA3
  49.    
  50.     MOV A, #0xFB
  51.     MOV P2, A
  52.     NOP
  53.     MOV A, P2
  54.     CJNE A, #0xFB, LINHA2
  55.  
  56.     MOV A, #0xF7
  57.     MOV P2, A
  58.     NOP
  59.     MOV A, P2
  60.     CJNE A, #0xF7, LINHA1
  61.    
  62.     JMP BEGIN
  63.  
  64. LINHA4:
  65.     CALL DEBOUNCE
  66.     JNB P2.7, ASTERICO
  67.     JNB P2.6, ZERO
  68.     JNB P2.5, HASH
  69.     JNB P2.4, DDD
  70.     JMP BEGIN
  71. DDD:
  72.     ;MOV A, #44h                            ; D ASCII
  73.     JMP BEGIN
  74. ZERO:
  75.     ;MOV A, #30h                            ; 1 ASCII
  76.     JMP BEGIN
  77. HASH:
  78.     ;MOV A, #23h                            ; # ASCII
  79.     JMP BEGIN
  80. ASTERICO:
  81.     ;MOV A, #2Ah                            ; * ASCII
  82.     LJMP TRANSMIT
  83.    
  84. LINHA3:
  85.     CALL DEBOUNCE
  86.     JNB P2.7, SETE
  87.     JNB P2.6, OITO
  88.     JNB P2.5, NOVE
  89.     JNB P2.4, CCC
  90.     JMP BEGIN
  91. SETE:
  92.     ;MOV A, #37h                            ; 7 ASCII
  93.     MOV A, #07h
  94.     JMP BEGIN
  95. OITO:
  96.     ;MOV A, #38h                            ; 8 ASCII
  97.     MOV A, #08h
  98.     JMP BEGIN
  99. NOVE:
  100.     ;MOV A, #39h                            ; 9 ASCII
  101.     MOV A, #09h
  102.     JMP BEGIN
  103. CCC:
  104.     ;MOV A, #43h                            ; C ASCII
  105.     JMP BEGIN
  106. LINHA2:
  107.     CALL DEBOUNCE
  108.     JNB P2.7, QUATRO
  109.     JNB P2.6, CINCO
  110.     JNB P2.5, SEIS
  111.     JNB P2.4, BBB
  112.     JMP BEGIN
  113. QUATRO:
  114.     ;MOV A, #34h                            ; 4 ASCII
  115.     MOV A, #04h
  116.     JMP BEGIN
  117. CINCO:
  118.     ;MOV A, #35h                            ; 5 ASCII
  119.     MOV A, #05h
  120.     JMP BEGIN
  121. SEIS:
  122.     ;MOV A, #36h                            ; 6 ASCII
  123.     MOV A, #06h
  124.     JMP BEGIN
  125. BBB:
  126.     ;MOV A, #42h                            ; B ASCII
  127.     JMP BEGIN
  128. LINHA1:
  129.     CALL DEBOUNCE
  130.     JNB P2.7, UM
  131.     JNB P2.6, DOIS
  132.     JNB P2.5, TRES
  133.     JNB P2.4, AAA
  134.     JMP BEGIN
  135. UM:
  136.     ;MOV A, #31h                            ; 1 ASCII
  137.     MOV A, #01h
  138.     JMP BEGIN
  139. DOIS:
  140.     ;MOV A, #32h                            ; 2 ASCII
  141.     MOV A, #02h
  142.     JMP BEGIN
  143. TRES:
  144.     ;MOV A, #33h                            ; 3 ASCII
  145.     MOV A, #03h
  146.     JMP BEGIN
  147. AAA:
  148.     ;MOV A, #41h                            ; A ASCII
  149.     JMP BEGIN
  150.    
  151. CALC_FREQ:
  152.    
  153.  
  154. TRANSMIT:
  155.     MOV R0, #06h
  156.     MOV SPDAT, R0
  157.     JNB transmit_completed,$;     /* wait end of transmition */
  158.     CLR transmit_completed;       /* clear software transfert flag */
  159.  
  160.     MOV SPDAT,#00h;               /* data is send to generate SCK signal */
  161.     JNB transmit_completed,$;     /* wait end of transmition */
  162.     CLR transmit_completed;       /* clear software transfert flag */
  163.     MOV data_save,serial_data;    /* save receive data */  
  164.     JMP BEGIN
  165.  
  166. MINI_DELAY:
  167.     MOV R3, #0FFH
  168.     DJNZ R3, $
  169.     RET
  170.    
  171. DEBOUNCE:      
  172.     CALL DELAY
  173.     MOV R1, #250            ; VARIAVEL DE CONTROLE PARA 20 LEITURAS SUCESSIVAS
  174. LOOPDEBOUNCE:      
  175.     MOV A, P2               ; MOVE O BYTE LIDO NO P2 PARA O ACUMULADOR P/ COMPARAÇÃO
  176.     NOP
  177.     CJNE A, P2, DEBOUNCEFAIL
  178.     ;CALL MINI_DELAY
  179.     DJNZ R1, LOOPDEBOUNCE   ; CASO A LEITURA SEJA CONFIRMADA, PARTE PARA AS LEITURAS SUCESSIVAS RESTANTES
  180.     RET                     ; CASO FIM DE DEBOUNCE COM SUCESSO, RETORNA PARA VALIDAR A TECLA
  181. DEBOUNCEFAIL:  
  182.     JMP BEGIN           ;
  183.    
  184. DELAY:
  185.     MOV R3, #2                              ; CARREGA O REGISTRO DE CONTROLE DE TEMPO PARA APROXIMADAMENTE 200MS
  186. LOOP3:     
  187.     MOV R4, #0FFH                           ; CARREGA O VALOR MAXIMO EM R4
  188. LOOP4:     
  189.     MOV R2, #0FFH                           ; CARREGA O VALOR MAXIMO EM R2
  190.     DJNZ R2, $                              ; DECREMENTA R2 PARA GASTAR TEMPO
  191.     DJNZ R4, LOOP4                          ; DECREMENTA R4 APÓS 255 DECREMENTOS DE R2 PARA GASTAR TEMPO
  192.     DJNZ R3, LOOP3                          ; DECREMENTA R3 APÓS 255 DECREMENTOS DE R4 PARA GASTAR TEMPO
  193.     RET
  194.    
  195. ;/**
  196. ; * FUNCTION_PURPOSE:interrupt
  197. ; * FUNCTION_INPUTS: void
  198. ; * FUNCTION_OUTPUTS: transmit_complete is software transfert flag
  199. ; */
  200.  
  201. it_SPI:;                         /* interrupt address is 0x004B */
  202.  
  203.     MOV R7,SPSTA;
  204.     MOV ACC,R7
  205.     JNB ACC.7,break1;case 0x80:
  206.     MOV serial_data,SPDAT;       /* read receive data */
  207.     SETB transmit_completed;     /* set software flag */
  208. break1:
  209.  
  210. JNB ACC.4,break2;case 0x10:
  211. ;         /* put here for mode fault tasking */
  212. break2:;
  213.    
  214. JNB ACC.6,break3;case 0x40:
  215. ;         /* put here for overrun tasking */   
  216. break3:;
  217.  
  218. RETI
  219. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement