erste_gehversuche.asm


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