Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. ;-------------------------------------------------------------------------------------------------
  2. ; Projektname : Erstes Projekt
  3. ; Prozessor/Takt : PIC16F887 / interner Oszillator 4 Mhz
  4. ; Beschaltung PORTA :
  5. ; Beschaltung PORTB :
  6. ; Beschaltung PORTC :
  7. ; Beschaltung PORTD :
  8. ; Beschaltung PORTE :
  9. ; Datum :
  10. ; Bearbeiter :
  11. ; letzte Aenderung :
  12. ; Bearbeiter :
  13. ;-------------------------------------------------------------------------------------------------
  14. listp=16F887
  15. #include<p16f887.inc>
  16. errorlevel -302
  17. errorlevel -305
  18. __CONFIG _CONFIG1, 0x20E4
  19. __CONFIG _CONFIG2, 0x3FFF
  20. ;------------------------------------------------------------------------------------------------
  21. ; Variablen und Konstanten
  22. ;-------------------------------------------------------------------------------------------------
  23.  
  24. org 0x00
  25. Z2 equ 0x29
  26. Z1 equ 0x30
  27. Z0 equ 0x31
  28.  
  29. ;-------------------------------------------------------------------------------------------------
  30. ;Hardware - (Setup)
  31. ;-------------------------------------------------------------------------------------------------
  32.  
  33. banksel TRISC ; Bank 1 setzen
  34. clrf TRISC ; clear von TRISC
  35. clrf TRISD ; clear von TRISD
  36. clrf TRISA
  37. comf TRISD ; setzen TRISD 0 (also der Schalter EINGANG)
  38. banksel PORTC ; Bank auf Bank 0
  39. clrf PORTC ; clear PORTC
  40. clrf PORTD ; clear PORTD
  41. clrf TRISA
  42.  
  43. ;-------------------------------------------------------------------------------------------------
  44. ; Hauptprogramm - (loop)
  45. ;-------------------------------------------------------------------------------------------------
  46. ;lauti
  47. ;call DELAYI
  48. ;bsf PORTA, 0
  49. ;call DELAYI
  50. ;bcf PORTA, 0
  51. ;goto lauti
  52. ;call DELAYLANG
  53. ;return
  54.  
  55. call Resetall ;Unterprogramm Resetall aufrufen
  56. Schalter1
  57. btfss PORTD, 1 ;bit 1 von PORTD testen, wenn 1 nächsten Befehl überspringen
  58. goto Schalter2 ;springe zu Schalter2
  59. call Waagerecht ;Unterprogramm Waagerecht aufrufen
  60. Schalter2
  61. btfss PORTD, 2 ;bit 2 von PORTD testen, wenn 1 nächsten Befehl überspringen
  62. goto Schalter3 ;springe zu Schalter3
  63. call Waagerecht ;Unterprogramm Waagerecht aufrufen
  64. Schalter3
  65. btfss PORTD, 3 ;bit 3 von PORTD testen, wenn 1 nächsten Befehl überspringen
  66. goto Schalter1 ;springe zu Schalter1 <<<<<<<<<
  67. call Waagerecht ;Unterprogramm Waagerecht aufrufen
  68.  
  69. ;-------------------------------------------------------------------------------------------------
  70. ; Unterprogramme - (Funktionen)
  71. ;-------------------------------------------------------------------------------------------------
  72. Resetall
  73. bcf PORTC, 2 ;2 bit auf PORTC clearen
  74. bsf PORTC, 1 ;1 bit auf PORTC setzen
  75. call DELAY ;Unterprogramm DELAY aufrufen
  76. bcf PORTC, 1 ;1 bit auf PORTC clearen
  77. bsf PORTC, 0 ;0 bit auf PORTC setzen
  78. bcf PORTC, 7 ;7 bit auf PORTC clearen
  79. bsf PORTC, 6 ;6 bit auf PORTC setzen
  80. call DELAY ;Unterprogramm DELAY aufrufen
  81.  
  82. bcf PORTC, 3 ;3 bit auf PORTC clearen
  83. bsf PORTC, 4 ;4 bit auf PORTC setzen
  84. call DELAY ;Unterprogramm DELAY aufrufen
  85. bcf PORTC, 4 ;4 bit auf PORTC clearen
  86. bsf PORTC, 5 ;5 bit auf PORTC setzen
  87. return ;zurück zum entsprechenden call
  88.  
  89.  
  90. Waagerecht
  91. call DELAYLANG ;Unterprogramm DELAYLANG aufrufen
  92. bcf PORTC, 5 ;5 bit auf PORTC clearen
  93. bsf PORTC, 4 ;4 bit auf PORTC setzen
  94. call DELAY ;Unterprogramm DELAY aufrufen
  95. bcf PORTC, 4 ;4 bit auf PORTC clearen
  96. bsf PORTC, 3 ;3 bit auf PORTC setzen
  97. call DELAY ;Unterprogramm DELAY aufrufen
  98. call Senkrecht ;Unterprogramm Senkrecht aufrufen
  99. call Resetall ;springe zu resetall
  100. return ;zurück zum entsprechenden call
  101.  
  102. Senkrecht
  103. call DELAY
  104. bcf PORTC, 0 ;0 bit auf PORTC clearen
  105. bsf PORTC, 1 ;1 bit auf PORTC setzen
  106. call DELAY ;Unterprogramm DELAY aufrufen
  107. bcf PORTC, 1 ;1 bit auf PORTC clearen
  108. bcf PORTC, 6 ;6 bit auf PORTC clearen
  109. bsf PORTC, 7 ;7 bit auf PORTC setzen
  110. bsf PORTC, 2 ;2 bit auf PORTC setzen
  111. call lauti
  112. ;call DELAYLANG ;Unterprogramm DELAYLANG aufrufen 7s
  113. return ;zurück zum entsprechenden call
  114.  
  115. DELAYLANG
  116. movlw d'35' ; Wert von 35 festlegen für Arbeitsregister
  117. movwf Z2 ; Wert vom Arbeitsregister wird angenommen
  118. movlw d'0' ; Wert von 0 festlegen für Arbeitsregister
  119. movwf Z1 ; Wert vom Arbeitsregister wird angenommen
  120. movlw d'0' ; Wert von 0 in Arbeitsregister
  121. movwf Z0 ; Wert angenommen
  122. decfsz Z0 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  123. goto $-1 ;eine Zeile zurück gehen
  124. decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  125. goto $-5 ;zurück um 5
  126. decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  127. goto $-9 ;zurück um 9
  128.  
  129. return ;zurück zum entsprechenden call
  130.  
  131.  
  132. DELAY
  133. movlw d'5' ; Wert von 5 festlegen für Arbeitsregister
  134. movwf Z2 ; Wert vom Arbeitsregister wird angenommen
  135. movlw d'0' ; Wert von 0 festlegen für Arbeitsregister
  136. movwf Z1 ; Wert vom Arbeitsregister wird angenommen
  137. movlw d'0' ; Wert von 0 in Arbeitsregister
  138. movwf Z0 ; Wert angenommen
  139. decfsz Z0 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  140. goto $-1 ;eine Zeile zurück gehen
  141. decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  142. goto $-5 ;zurück um 5
  143. decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  144. goto $-9 ;zurück um 9
  145.  
  146. return
  147.  
  148. DELAYI
  149. movlw d'85' ; Wert von 5 festlegen für Arbeitsregister
  150. movwf Z2 ; Wert vom Arbeitsregister wird angenommen
  151. movlw d'10' ; Wert von 0 festlegen für Arbeitsregister
  152. movwf Z1 ; Wert vom Arbeitsregister wird angenommen
  153. decfsz Z1 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  154. goto $-1 ;zurück um 5
  155. decfsz Z2 ;Wird runtergezählt, wenn auf 0 wird der nächste Befehl übersprungen
  156. goto $-5 ;zurück um 9
  157.  
  158. return ;zurück zum entsprechenden call
  159.  
  160. lauti ;funktioniert noch nicht
  161. movlw d'41'
  162. movwf Z2
  163. movlw d'41'
  164. movwf Z1
  165. call DELAYI
  166. bsf PORTA, 0
  167. call DELAYI
  168. bcf PORTA, 0
  169. decfsz Z1
  170. goto $-5
  171. decfsz Z2
  172. goto $-9
  173.  
  174. return
  175.  
  176. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement