blob: 1f65ba3328a67f49f18b7d0dda4809971d294326 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
|
;***************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number :AVR000
;* File Name :"m16def.inc"
;* Title :Register/Bit Definitions for the ATmega16
;* Date :07.09.2001
;* Version :1.00
;* Support telephone :+47 72 88 87 20 (ATMEL Norway)
;* Support fax :+47 72 88 87 18 (ATMEL Norway)
;* Support E-mail :avr@atmel.no
;* Target MCU :ATmega16
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;***************************************************************************
;***** Specify Device
.device ATmega16
;***** I/O Register Definitions
.equ SREG =$3f
.equ SPH =$3e
.equ SPL =$3d
.equ OCR0 =$3c
.equ GICR =$3b ; New name for GIMSK
.equ GIMSK =$3b
.equ GIFR =$3a
.equ TIMSK =$39
.equ TIFR =$38
.equ SPMCR =$37
.equ I2CR =$36
.equ TWCR =$36
.equ MCUCR =$35
.equ MCUSR =$34
.equ MCUCSR =$34 ; New name for MCUSR
.equ TCCR0 =$33
.equ TCNT0 =$32
.equ OSCCAL =$31
.equ SFIOR =$30
.equ TCCR1A =$2f
.equ TCCR1B =$2e
.equ TCNT1H =$2d
.equ TCNT1L =$2c
.equ OCR1AH =$2b
.equ OCR1AL =$2a
.equ OCR1BH =$29
.equ OCR1BL =$28
.equ ICR1H =$27
.equ ICR1L =$26
.equ TCCR2 =$25
.equ TCNT2 =$24
.equ OCR2 =$23
.equ ASSR =$22
.equ WDTCR =$21
.equ UBRRHI =$20
.equ UBRRH =$20 ; New name for UBRRHI
.equ EEARH =$1f
.equ EEARL =$1e
.equ EEDR =$1d
.equ EECR =$1c
.equ PORTA =$1b
.equ DDRA =$1a
.equ PINA =$19
.equ PORTB =$18
.equ DDRB =$17
.equ PINB =$16
.equ PORTC =$15
.equ DDRC =$14
.equ PINC =$13
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.equ SPDR =$0f
.equ SPSR =$0e
.equ SPCR =$0d
.equ UDR =$0c
.equ UCSRA =$0b
.equ USR =$0b ; For compatibility with S8535
.equ UCSRB =$0a
.equ UCR =$0a ; For compatibility with S8535
.equ UCSRC =$20 ; Note! UCSRC equals UBRRH
.equ UBRR =$09
.equ UBRRL =$09 ; New name for UBRR
.equ ACSR =$08
.equ ADMUX =$07
.equ ADCSR =$06
.equ ADCH =$05
.equ ADCL =$04
.equ TWDR =$03
.equ TWAR =$02
.equ TWSR =$01
.equ TWBR =$00
.equ I2DR =$03
.equ I2AR =$02
.equ I2SR =$01
.equ I2BR =$00
;***** Bit Definitions
; GIMSK / GICR
.equ INT1 =7
.equ INT0 =6
.equ INT2 =5
.equ IVSEL =1
.equ IVCE =0
; GIFR
.equ INTF1 =7
.equ INTF0 =6
.equ INTF2 =5
; TIMSK
.equ TOIE0 =0
.equ OCIE0 =1
.equ TOIE1 =2
.equ OCIE1B =3
.equ OCIE1A =4
.equ TICIE1 =5
.equ TOIE2 =6
.equ OCIE2 =7
; TIFR
.equ TOV0 =0
.equ OCF0 =1
.equ TOV1 =2
.equ OCF1B =3
.equ OCF1A =4
.equ ICF1 =5
.equ TOV2 =6
.equ OCF2 =7
; SPMCR
.equ SPMIE =7
.equ ASB =6
.equ ASRE =4
.equ BLBSET =3
.equ PGWRT =2
.equ PGERS =1
.equ SPMEN =0
; TWCR
.equ TWINT =7
.equ TWEA =6
.equ TWSTA =5
.equ TWSTO =4
.equ TWWC =3
.equ TWEN =2
.equ TWIE =0
; MCUCR
.equ SM2 =7
.equ SE =6
.equ SM1 =5
.equ SM0 =4
.equ ISC11 =3
.equ ISC10 =2
.equ ISC01 =1
.equ ISC00 =0
; MCUSR
.equ JTD =7
.equ ISC2 =6
.equ WDRF =3
.equ BORF =2
.equ EXTRF =1
.equ PORF =0
; TCCR0
.equ FOC0 =7
.equ PWM0 =6 ;OBSOLETE! Use WGM00
.equ WGM00 =6
.equ COM01 =5
.equ COM00 =4
.equ CTC0 =3 ;OBSOLETE! Use WGM01
.equ WGM01 =3
.equ CS02 =2
.equ CS01 =1
.equ CS00 =0
; SFIOR
.equ ADTS2 =7
.equ ADTS1 =6
.equ ADTS0 =5
.equ ADHSM =4
.equ ACME =3
.equ PUD =2
.equ PSR2 =1
.equ PSR10 =0
; TCCR1A
.equ COM1A1 =7
.equ COM1A0 =6
.equ COM1B1 =5
.equ COM1B0 =4
.equ FOC1A =3
.equ FOC1B =2
.equ PWM11 =1 ; OBSOLETE! Use WGM11
.equ PWM10 =0 ; OBSOLETE! Use WGM10
.equ WGM11 =1
.equ WGM10 =0
; TCCR1B
.equ ICNC1 =7
.equ ICES1 =6
.equ CTC11 =4 ; OBSOLETE! Use WGM13
.equ CTC10 =3 ; OBSOLETE! Use WGM12
.equ CTC1 =3 ; OBSOLETE! Use WGM12
.equ WGM13 =4
.equ WGM12 =3
.equ CS12 =2
.equ CS11 =1
.equ CS10 =0
; TCCR2
.equ FOC2 =7
.equ PWM2 =6 ; OBSOLETE! Use WGM20
.equ WGM20 =6
.equ COM21 =5
.equ COM20 =4
.equ CTC2 =3 ; OBSOLETE! Use WGM21
.equ WGM21 =3
.equ CS22 =2
.equ CS21 =1
.equ CS20 =0
; ASSR
.equ AS2 =3
.equ TCN2UB =2
.equ OCR2UB =1
.equ TCR2UB =0
; WDTCR
.equ WDTOE =4
.equ WDE =3
.equ WDP2 =2
.equ WDP1 =1
.equ WDP0 =0
; EECR
.equ EERIE =3
.equ EEMWE =2
.equ EEWE =1
.equ EERE =0
; PORTA
.equ PA7 =7
.equ PA6 =6
.equ PA5 =5
.equ PA4 =4
.equ PA3 =3
.equ PA2 =2
.equ PA1 =1
.equ PA0 =0
; DDRA
.equ DDA7 =7
.equ DDA6 =6
.equ DDA5 =5
.equ DDA4 =4
.equ DDA3 =3
.equ DDA2 =2
.equ DDA1 =1
.equ DDA0 =0
; PINA
.equ PINA7 =7
.equ PINA6 =6
.equ PINA5 =5
.equ PINA4 =4
.equ PINA3 =3
.equ PINA2 =2
.equ PINA1 =1
.equ PINA0 =0
; PORTB
.equ PB7 =7
.equ PB6 =6
.equ PB5 =5
.equ PB4 =4
.equ PB3 =3
.equ PB2 =2
.equ PB1 =1
.equ PB0 =0
; DDRB
.equ DDB7 =7
.equ DDB6 =6
.equ DDB5 =5
.equ DDB4 =4
.equ DDB3 =3
.equ DDB2 =2
.equ DDB1 =1
.equ DDB0 =0
; PINB
.equ PINB7 =7
.equ PINB6 =6
.equ PINB5 =5
.equ PINB4 =4
.equ PINB3 =3
.equ PINB2 =2
.equ PINB1 =1
.equ PINB0 =0
; PORTC
.equ PC7 =7
.equ PC6 =6
.equ PC5 =5
.equ PC4 =4
.equ PC3 =3
.equ PC2 =2
.equ PC1 =1
.equ PC0 =0
; DDRC
.equ DDC7 =7
.equ DDC6 =6
.equ DDC5 =5
.equ DDC4 =4
.equ DDC3 =3
.equ DDC2 =2
.equ DDC1 =1
.equ DDC0 =0
; PINC
.equ PINC7 =7
.equ PINC6 =6
.equ PINC5 =5
.equ PINC4 =4
.equ PINC3 =3
.equ PINC2 =2
.equ PINC1 =1
.equ PINC0 =0
; PORTD
.equ PD7 =7
.equ PD6 =6
.equ PD5 =5
.equ PD4 =4
.equ PD3 =3
.equ PD2 =2
.equ PD1 =1
.equ PD0 =0
; DDRD
.equ DDD7 =7
.equ DDD6 =6
.equ DDD5 =5
.equ DDD4 =4
.equ DDD3 =3
.equ DDD2 =2
.equ DDD1 =1
.equ DDD0 =0
; PIND
.equ PIND7 =7
.equ PIND6 =6
.equ PIND5 =5
.equ PIND4 =4
.equ PIND3 =3
.equ PIND2 =2
.equ PIND1 =1
.equ PIND0 =0
; SPSR
.equ SPIF =7
.equ WCOL =6
.equ SPI2X =0
; SPCR
.equ SPIE =7
.equ SPE =6
.equ DORD =5
.equ MSTR =4
.equ CPOL =3
.equ CPHA =2
.equ SPR1 =1
.equ SPR0 =0
; UCSRA
.equ RXC =7
.equ TXC =6
.equ UDRE =5
.equ FE =4
.equ OR =3
.equ DOR =3 ;New name for OR
.equ PE =2
.equ U2X =1
.equ MPCM =0
; UCSRB
.equ RXCIE =7
.equ TXCIE =6
.equ UDRIE =5
.equ RXEN =4
.equ TXEN =3
.equ CHR9 =2
.equ UCSZ2 =2 ; New name for CHR9
.equ RXB8 =1
.equ TXB8 =0
;UCSRC
.equ URSEL =7
.equ UMSEL =6
.equ UPM1 =5
.equ UPM0 =4
.equ USBS =3
.equ UCSZ1 =2
.equ UCSZ0 =1
.equ UCPOL =0
; ACSR
.equ ACD =7
.equ ACBG =6
.equ ACO =5
.equ ACI =4
.equ ACIE =3
.equ ACIC =2
.equ ACIS1 =1
.equ ACIS0 =0
; ADMUX
.equ REFS1 =7
.equ REFS0 =6
.equ ADLAR =5
.equ MUX4 =4
.equ MUX3 =3
.equ MUX2 =2
.equ MUX1 =1
.equ MUX0 =0
; ADCSR
.equ ADEN =7
.equ ADSC =6
.equ ADATE =5
.equ ADFR =5
.equ ADIF =4
.equ ADIE =3
.equ ADPS2 =2
.equ ADPS1 =1
.equ ADPS0 =0
; TWAR
.equ TWGCE =0
.def XL =r26
.def XH =r27
.def YL =r28
.def YH =r29
.def ZL =r30
.def ZH =r31
.equ RAMEND =$45F
.equ BOOTSTART =$1E00 ;OBSOLETE!!! temporarily kept for compatibility
;.equ LARGEBOOTSTART =$0C00 ;largest boot block is 2KB
;.equ SMALLBOOTSTART =$0F80 ;smallest boot block is 256B
.equ SMALLBOOTSTART =0b1111110000000 ;($1F80) smallest boot block is 256B
.equ SECONDBOOTSTART =0b1111100000000 ;($1F00) second boot block size is 512B
.equ THIRDBOOTSTART =0b1111000000000 ;($1E00) third boot block size is 1KB
.equ LARGEBOOTSTART =0b1110000000000 ;($1C00) largest boot block is 2KB
.equ PAGESIZE =64 ;number of WORDS in a page
.equ FLASHEND =$1fff
.equ INT0addr=$002 ;External Interrupt0 Vector Address
.equ INT1addr=$004 ;External Interrupt1 Vector Address
.equ OC2addr =$006 ;Output Compare2 Interrupt Vector Address
.equ OVF2addr=$008 ;Overflow2 Interrupt Vector Address
.equ ICP1addr=$00A ;Input Capture1 Interrupt Vector Address
.equ OC1Aaddr=$00C ;Output Compare1A Interrupt Vector Address
.equ OC1Baddr=$00E ;Output Compare1B Interrupt Vector Address
.equ OVF1addr=$010 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$012 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$014 ;SPI Interrupt Vector Address
.equ URXCaddr=$016 ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$018 ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$01A ;UART Transmit Complete Interrupt Vector Address
.equ ADCCaddr=$01C ;ADC Interrupt Vector Address
.equ ERDYaddr=$01E ;EEPROM Interrupt Vector Address
.equ ACIaddr =$020 ;Analog Comparator Interrupt Vector Address
.equ TWIaddr =$022 ;Irq. vector address for Two-Wire Interface
.equ INT2addr=$024 ;External Interrupt2 Vector Address
.equ OC0addr =$026 ;Output Compare0 Interrupt Vector Address
.equ SPMRaddr=$028 ;Store Program Memory Ready Interrupt Vector Address
|