1 | ;***************************************************************************
|
2 | ;***** lkw.ASM
|
3 | ;***** Wunner Patrick 14.11.2008
|
4 | ;***** LKW Hydraulik Motor Steuerung
|
5 | ;***************************************************************************
|
6 |
|
7 |
|
8 | ;***************************************************************************
|
9 | ;***** PIC intialisieren
|
10 | ;***************************************************************************
|
11 |
|
12 | #include<P16F684.INC>
|
13 |
|
14 | __CONFIG 0x3fC4
|
15 |
|
16 | List P = 16F684
|
17 |
|
18 |
|
19 | ;***************************************************************************
|
20 | ;***** Vektoren vergabe
|
21 | ;***************************************************************************
|
22 |
|
23 | org 0x00
|
24 | goto start
|
25 |
|
26 | org 0x04
|
27 | retfie
|
28 |
|
29 |
|
30 | ;***************************************************************************
|
31 | ;***** Register definieren
|
32 | ;***************************************************************************
|
33 |
|
34 | anzahl equ 0x21
|
35 | vZeit1 equ 0x22
|
36 | vZeit2 equ 0x23
|
37 | vZeit3 equ 0x24
|
38 | ergebnis equ 0x25
|
39 | rueck_erg equ 0x26
|
40 | vor_erg equ 0x27
|
41 |
|
42 |
|
43 |
|
44 | ;***************************************************************************
|
45 | ;***** Variablen definieren
|
46 | ;***************************************************************************
|
47 |
|
48 |
|
49 |
|
50 | ;***************************************************************************
|
51 | ;***** Tabellen
|
52 | ;***************************************************************************
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | ;***************************************************************************
|
58 | ;***** Makros definieren
|
59 | ;***************************************************************************
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | ;***************************************************************************
|
68 | ;***** Initialisierung
|
69 | ;***************************************************************************
|
70 |
|
71 | start
|
72 |
|
73 | bsf STATUS,RP0
|
74 | movlw b'01110000'
|
75 | MOVWF ADCON1
|
76 |
|
77 | clrf TRISC ; TRISC als Ausgang
|
78 | movlw b'00111111'
|
79 | movwf TRISA ; TRISA als Eingang
|
80 |
|
81 | clrf ANSEL
|
82 | bsf ANSEL,0 ; RA0 Analoger Eingang
|
83 | ; Ein- und Ausgänge definieren
|
84 |
|
85 | bcf STATUS,RP0
|
86 | ;movlw 07h
|
87 | ;movwf CMCON0
|
88 |
|
89 | MOVLW b'10000001' ;
|
90 | MOVWF ADCON0 ; Vdd Vref, AN0, On
|
91 |
|
92 | call vZeitschleife ; zeit abwarten
|
93 |
|
94 | ;clrf PORTA ; Register zu beginn löschen
|
95 | clrf PORTC
|
96 | clrf anzahl
|
97 |
|
98 |
|
99 |
|
100 |
|
101 | ;***************************************************************************
|
102 | ;***** Hauptprogramm
|
103 | ;***************************************************************************
|
104 |
|
105 | prog
|
106 |
|
107 | call vZeitschleife ; zeit abwarten
|
108 |
|
109 | clrf ergebnis
|
110 |
|
111 | bsf ADCON0,GO ; AD-Wandler einschalten
|
112 | BTFSC ADCON0,GO ; Uebertragung zuende?
|
113 | GOTO $-1 ; wenn nicht neu testen ;
|
114 | MOVFW ADRESH ; Lese die höherwertigen Bits
|
115 | movwf ergebnis
|
116 |
|
117 |
|
118 | rrf ergebnis ; ergebnis durch 2 teilen
|
119 | bcf ergebnis,7 ; Bit 7 löschen
|
120 | rrf ergebnis ; ergebnis durch 2 teilen
|
121 | bcf ergebnis,7 ; Bit 6 löschen
|
122 |
|
123 | btfsc ergebnis,5 ; Testen ob größer oder kleiner 2,5V
|
124 | goto vorwaerts ; Wenn größer gehe zu vorwärts
|
125 |
|
126 |
|
127 | rueckwaerts
|
128 |
|
129 | movfw ergebnis
|
130 | movwf rueck_erg
|
131 | comf rueck_erg,f ; Komplementiere rueck_erg
|
132 | movlw d'32' ; 32 nach Arbeitsregister
|
133 | subwf rueck_erg,f ; Subtrahiere 32 von rueck_erg
|
134 | bcf rueck_erg,7
|
135 | bcf rueck_erg,6
|
136 | bcf rueck_erg,5
|
137 |
|
138 | movfw rueck_erg ; Ergebnis nach PORTC schreiben
|
139 | movwf PORTC
|
140 |
|
141 | goto prog
|
142 |
|
143 | vorwaerts
|
144 |
|
145 | movfw ergebnis
|
146 | movwf vor_erg
|
147 | movlw d'32' ; 32 nach Arbeitsregister
|
148 | subwf vor_erg,f ; Subtrahiere 32 von rueck_erg
|
149 |
|
150 | movfw vor_erg ; Ergebnis nach PORTC schreiben
|
151 | movwf PORTC
|
152 |
|
153 | goto prog
|
154 |
|
155 |
|
156 | ;***************************************************************************
|
157 | ;***** Unterprogramme
|
158 | ;***************************************************************************
|
159 |
|
160 | vZeitschleife
|
161 |
|
162 |
|
163 | movlw d'20'
|
164 | movwf vZeit1
|
165 | movwf vZeit2
|
166 |
|
167 | vschleife1
|
168 |
|
169 | decfsz vZeit1
|
170 | goto vschleife2
|
171 | return
|
172 |
|
173 | vschleife2
|
174 |
|
175 | movwf vZeit2
|
176 |
|
177 | vschleife2_1
|
178 |
|
179 | decfsz vZeit2
|
180 | goto vschleife3
|
181 | goto vschleife1
|
182 |
|
183 | vschleife3
|
184 |
|
185 | movwf vZeit3
|
186 |
|
187 | vschleife3_1
|
188 |
|
189 | decfsz vZeit3
|
190 | goto vschleife3_1
|
191 | goto vschleife2_1
|
192 |
|
193 |
|
194 | end
|