1 | W EQU H'0000'
|
2 | F EQU H'0001'
|
3 |
|
4 | ;----- Register Files------------------------------------------------------
|
5 |
|
6 | INDF EQU H'0000'
|
7 | TMR0 EQU H'0001'
|
8 | PCL EQU H'0002'
|
9 | STATUS EQU H'0003'
|
10 | FSR EQU H'0004'
|
11 | PORTA EQU H'0005'
|
12 | PORTB EQU H'0006'
|
13 |
|
14 | INTCON EQU H'000B'
|
15 | OPTION_REG EQU H'0081'
|
16 | TRISA EQU H'0085'
|
17 | TRISB EQU H'0086'
|
18 | CMCON EQU H'001F'
|
19 |
|
20 | ;----- STATUS Bits --------------------------------------------------------
|
21 | IRP EQU H'0007'
|
22 | RP1 EQU H'0006'
|
23 | RP0 EQU H'0005'
|
24 | NOT_TO EQU H'0004'
|
25 | NOT_PD EQU H'0003'
|
26 | Z EQU H'0002'
|
27 | DC EQU H'0001'
|
28 | C EQU H'0000'
|
29 |
|
30 | ;==========================================================================
|
31 | ;
|
32 | ; RAM Definition
|
33 | ;
|
34 | ;==========================================================================
|
35 |
|
36 | __MAXRAM H'01FF'
|
37 | __BADRAM H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
|
38 | __BADRAM H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
|
39 | __BADRAM H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
|
40 | __BADRAM H'185', H'187'-H'189', H'18C'-H'1EF'
|
41 |
|
42 | ;==========================================================================
|
43 | ;
|
44 | ; Configuration Bits
|
45 | ;
|
46 | ;==========================================================================
|
47 |
|
48 | _BODEN_ON EQU H'3FFF'
|
49 | _BODEN_OFF EQU H'3FBF'
|
50 | _CP_ALL EQU H'03FF'
|
51 | _CP_75 EQU H'17FF'
|
52 | _CP_50 EQU H'2BFF'
|
53 | _CP_OFF EQU H'3FFF'
|
54 | _DATA_CP_ON EQU H'3EFF'
|
55 | _DATA_CP_OFF EQU H'3FFF'
|
56 | _PWRTE_OFF EQU H'3FFF'
|
57 | _PWRTE_ON EQU H'3FF7'
|
58 | _WDT_ON EQU H'3FFF'
|
59 | _WDT_OFF EQU H'3FFB'
|
60 | _LVP_ON EQU H'3FFF'
|
61 | _LVP_OFF EQU H'3F7F'
|
62 | _MCLRE_ON EQU H'3FFF'
|
63 | _MCLRE_OFF EQU H'3FDF'
|
64 | _ER_OSC_CLKOUT EQU H'3FFF'
|
65 | _ER_OSC_NOCLKOUT EQU H'3FFE'
|
66 | _INTRC_OSC_CLKOUT EQU H'3FFD'
|
67 | _INTRC_OSC_NOCLKOUT EQU H'3FFC'
|
68 | _EXTCLK_OSC EQU H'3FEF'
|
69 | _LP_OSC EQU H'3FEC'
|
70 | _XT_OSC EQU H'3FED'
|
71 | _HS_OSC EQU H'3FEE'
|
72 |
|
73 | __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
|
74 |
|
75 | ;==========================================================================
|
76 | ; Variable Definition
|
77 | ;==========================================================================
|
78 | ;INPUTS
|
79 | SW1 EQU H'00' ;SW1 is triggering RA0
|
80 | SW2 EQU H'01' ;SW2 is triggering RA1
|
81 | SW3 EQU H'02' ;SW3 is triggering RA2
|
82 | SW4 EQU H'03' ;SW4 is triggering RA3
|
83 | TIMER1 EQU H'20' ;Used in delay routine
|
84 | TIMER2 EQU H'21' ; " " "
|
85 | PATERN EQU H'22' ;Pattern data for effect's
|
86 |
|
87 |
|
88 | ORG 0 ;Reset vector address
|
89 | GOTO RESET ;goto RESET routine when boot.
|
90 |
|
91 |
|
92 | ; *********************************************
|
93 | ; * delay routine *
|
94 | ; *********************************************
|
95 |
|
96 | DELAY_ROUTINE MOVLW D'100' ;54 Generate approx 10mS delay at 4Mhz CLK
|
97 | MOVWF TIMER2
|
98 | DEL_LOOP1 MOVLW D'100' ;60
|
99 | MOVWF TIMER1
|
100 | DEL_LOOP2 BTFSC PORTA,SW1
|
101 | GOTO MENU
|
102 | BTFSC PORTA,SW2
|
103 | GOTO MENU
|
104 | BTFSC PORTA,SW3
|
105 | GOTO MENU
|
106 | BTFSC PORTA,SW4
|
107 | GOTO MENU
|
108 | DECFSZ TIMER1,F
|
109 | GOTO DEL_LOOP2
|
110 | DECFSZ TIMER2,F
|
111 | GOTO DEL_LOOP1
|
112 | RETLW 0
|
113 |
|
114 |
|
115 | ; **********************************
|
116 | ; ** RESET : main boot routine **
|
117 | ; **********************************
|
118 |
|
119 | RESET MOVLW B'00000111' ;Disable Comparator module's
|
120 | MOVWF CMCON
|
121 | ;
|
122 | BSF STATUS,RP0 ;Switch to register bank 1
|
123 | ;Disable pull-ups
|
124 | ;INT on rising edge
|
125 | ;TMR0 to CLKOUT
|
126 | ;TMR0 Incr low2high trans.
|
127 | ;Prescaler assign to Timer0
|
128 | ;Prescaler rate is 1:256
|
129 | MOVLW B'11010111' ;Set PIC options (See datasheet).
|
130 | MOVWF OPTION_REG ;Write the OPTION register.
|
131 | ;
|
132 | CLRF INTCON ;Disable interrupts
|
133 | MOVLW B'11000000'
|
134 | MOVWF TRISB ;RB7 & RB6 are inputs.
|
135 | ;RB5...RB0 are outputs.
|
136 | MOVLW B'11111111' ;all RA ports are inputs
|
137 | MOVWF TRISA
|
138 | BCF STATUS,RP0 ;Switch Back to reg. Bank 0
|
139 | CLRF PORTB ;lösche Inhalt von PortB
|
140 | GOTO DEFAULT ;Gehe zum Einsprungpunkt DEFAULT
|
141 | ;
|
142 |
|
143 |
|
144 |
|
145 |
|
146 | ; **********************************
|
147 | ; ** Hauptprogramm **
|
148 | ; **********************************
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 | MENU CLRF PORTB ;lösche Inhalt von PORTB
|
156 |
|
157 | BTFSC PORTA,SW1 ;überspringe nächsten, wenn 0
|
158 | GOTO DEFAULT ;gehe zum Einsprungpunkt DEFAULT
|
159 | GOTO MENU
|
160 |
|
161 |
|
162 | DEFAULT ;Einsprungpunkt DEFAULT (Animation und vorbereitung von PORTB)
|
163 | BTFSC PORTA,SW1 ;überspringe nächsten, wenn sw1 nicht gedrückt ist
|
164 | GOTO DEFAULT ;Schleife auf DEFAULT wenn die sw1 noch gedrückt ist
|
165 |
|
166 |
|
167 | MOVLW B'00100001' ;00100001 wird in den AKKU geschrieben
|
168 | MOVWF PORTB ;inhalt von AKKU wird in PORTB geschrieben led #0000#
|
169 | CALL DELAY_ROUTINE ;Die Verzögeung wird ausgeführt
|
170 | MOVLW B'00001100' ;00001100 wird in den AKKU geschrieben
|
171 | MOVWF PORTB ;inhalt von AKKU wird in PORTB geschrieben led 00##00
|
172 | CALL DELAY_ROUTINE ;Die Verzögerung wird ausgeführt
|
173 |
|
174 |
|
175 | MOVLW B'00000001' ;00000001 wird in den AKKU geschrieben
|
176 | MOVWF PORTB ;inhalt von AKKU wird auf PORTB geschrieben
|
177 |
|
178 |
|
179 | INCREMENT ;Einsprungpunkt für INCREMENT
|
180 | BTFSC PORTA,SW4 ;überspringe nächsten, wenn sw4 nicht gedrückt ist
|
181 | GOTO INCREMENT ;Schleife auf INCREMENT wenn die sw4 noch gedrückt ist
|
182 | INCF PORTB,1 ;Inhalt von PORTB wird um 1 erhöht und wird auf PORTB geschrieben
|
183 |
|
184 | I1 ;LOOP, warte auf Eingabe
|
185 | BTFSC PORTA,sw1
|
186 | GOTO DEFAULT
|
187 | BTFSC PORTA,sw4
|
188 | GOTO INCREMENT
|
189 | BTFSC PORTA,sw3
|
190 | GOTO DECREMENT
|
191 | goto I1
|
192 |
|
193 | DECREMENT
|
194 | BTFSC PORTA,SW2 ;überspringe nächsten, wenn sw4 nicht gedrückt ist
|
195 | GOTO DECREMENT ;Schleife auf DECREMENT wenn die sw4 noch gedrückt ist
|
196 | DECF PORTB,1 ;Inhalt von PORTB wird um 1 verringert und wird auf PORTB geschrieben
|
197 |
|
198 | D1 ;LOOP, warte auf Eingabe
|
199 | BTFSC PORTA,sw1
|
200 | GOTO DEFAULT
|
201 | BTFSC PORTA,sw4
|
202 | GOTO INCREMENT
|
203 | BTFSC PORTA,sw3
|
204 | GOTO DECREMENT
|
205 | goto D1
|
206 |
|
207 | END
|