Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. #include <P16F84a.INC>
  2. #include <MACROS.asm>
  3. __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
  4.  
  5. ORG 0
  6. GOTO INIT
  7.  
  8. LOOPCOUNT1 EQU 0x20
  9. COUNT EQU 0x21
  10. DATAREG EQU 0x22
  11. STATUSREG EQU 0x23
  12. CURRENT_READING_BIT EQU 0x24
  13.  
  14. INIT
  15.  
  16. ;========PORT INITIALIZATION========
  17. CLRF PORTB ;Clear PORT B
  18. CLRF PORTA ;Clear PORT A
  19. BSF STATUS, RP0 ;Vælg Bank 1
  20. MOVLW b'00000000' ;Sæt alle ben i PORTB til output
  21. MOVWF TRISB
  22. MOVLW b'00000001' ;Sæt ben 0 i PORTA til input, resten til output
  23. MOVWF TRISA
  24. BCF STATUS, RP0 ; Vælg bank 0 igen
  25. ;===================================
  26.  
  27. CLRF COUNT
  28. CLRF PORTB
  29. CLRF DATAREG
  30. CLRF CURRENT_READING_BIT
  31. CLRF STATUSREG
  32.  
  33. LOOP
  34. BCF PORTA, 1
  35. BCF PORTA, 2
  36. BCF PORTA, 3
  37.  
  38.  
  39. MOVF STATUSREG, W
  40. select
  41. case 0
  42. BSF PORTA, 1
  43. CALL CHECK_FOR_START_BIT
  44. endcase
  45. case 1
  46. BSF PORTA, 2
  47. CALL FULL_DELAY
  48. CALL HALF_DELAY
  49. INCF STATUSREG
  50. endcase
  51. case 2
  52. BSF PORTA, 3
  53. CALL READ_DATA
  54. CALL FULL_DELAY
  55. endcase
  56. endselect
  57.  
  58. MOVF DATAREG, W
  59. MOVWF PORTB
  60.  
  61. GOTO LOOP
  62.  
  63.  
  64. CHECK_FOR_START_BIT
  65. poll PORTA, b'00000001', b'00000001' ;bit 3 1-based index
  66. BSF STATUSREG, 0
  67. endpoll
  68. RETURN
  69.  
  70. READ_DATA
  71. MOVF CURRENT_READING_BIT, W
  72. select
  73. case 0
  74. poll PORTA, b'00000001', b'00000001'
  75. BSF DATAREG, 0
  76. endpoll
  77. INCF CURRENT_READING_BIT
  78. endcase
  79. case 1
  80. poll PORTA, b'00000001', b'00000001'
  81. BSF DATAREG, 1
  82. endpoll
  83. INCF CURRENT_READING_BIT
  84. endcase
  85.  
  86. case 2
  87. poll PORTA, b'00000001', b'00000001'
  88. BSF DATAREG, 2
  89. endpoll
  90. INCF CURRENT_READING_BIT
  91. endcase
  92.  
  93. case 3
  94. poll PORTA, b'00000001', b'00000001'
  95. BSF DATAREG, 3
  96. endpoll
  97. INCF CURRENT_READING_BIT
  98. endcase
  99.  
  100. case 4
  101. poll PORTA, b'00000001', b'00000001'
  102. BSF DATAREG, 4
  103. endpoll
  104. INCF CURRENT_READING_BIT
  105. endcase
  106.  
  107. case 5
  108. poll PORTA, b'00000001', b'00000001'
  109. BSF DATAREG, 5
  110. endpoll
  111. ;INCF CURRENT_READING_BIT
  112. CLRF CURRENT_READING_BIT
  113.  
  114. ;update PORTB with dataREGISTER
  115. MOVF DATAREG, W
  116. MOVWF PORTB
  117. CLRF DATAREG
  118.  
  119. CLRF STATUSREG
  120.  
  121. endcase
  122.  
  123. ;case 6
  124. ; poll PORTA, b'00000001', b'00000001'
  125. ; BSF PORTB, 6
  126. ; endpoll
  127. ; INCF CURRENT_READING_BIT
  128. ;endcase
  129.  
  130. ;case 7
  131. ; poll PORTA, b'00000001', b'00000001'
  132. ; BSF PORTB, 7
  133. ; endpoll
  134. ; INCF CURRENT_READING_BIT
  135. ;endcase
  136.  
  137.  
  138.  
  139.  
  140. endselect
  141. RETURN
  142.  
  143. FULL_DELAY
  144. for COUNT, 0, b'11111110'
  145. NOP
  146. next COUNT
  147. RETURN
  148. HALF_DELAY
  149. for COUNT, 0, b'01111111'
  150. NOP
  151. next COUNT
  152. RETURN
  153. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement