attiny441.pp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. unit ATtiny441;
  2. {$goto on}
  3. interface
  4. var
  5. ADCSRB: byte absolute $24; // ADC Control and Status Register B
  6. ADCSRA: byte absolute $25; // The ADC Control and Status register
  7. ADC: word absolute $26; // ADC Data Register Bytes
  8. ADCL: byte absolute $26; // ADC Data Register Bytes
  9. ADCH: byte absolute $27; // ADC Data Register Bytes;
  10. ADMUXB: byte absolute $28; // The ADC multiplexer Selection Register B
  11. ADMUXA: byte absolute $29; // The ADC multiplexer Selection Register A
  12. ACSR0A: byte absolute $2A; // Analog Comparator 0 Control And Status Register A
  13. ACSR0B: byte absolute $2B; // Analog Comparator 0 Control And Status Register B
  14. ACSR1A: byte absolute $2C; // Analog Comparator 1 Control And Status Register A
  15. ACSR1B: byte absolute $2D; // Analog Comparator 1 Control And Status Register B
  16. TIFR1: byte absolute $2E; // Timer/Counter Interrupt Flag register
  17. TIMSK1: byte absolute $2F; // Timer/Counter1 Interrupt Mask Register
  18. TIFR2: byte absolute $30; // Timer/Counter Interrupt Flag register
  19. TIMSK2: byte absolute $31; // Timer/Counter2 Interrupt Mask Register
  20. PCMSK0: byte absolute $32; // Pin Change Enable Mask 0
  21. GPIOR0: byte absolute $33; // General Purpose I/O Register 0
  22. GPIOR1: byte absolute $34; // General Purpose I/O Register 1
  23. GPIOR2: byte absolute $35; // General Purpose I/O Register 2
  24. PINB: byte absolute $36; // Port B Data register
  25. DDRB: byte absolute $37; // Data Direction Register, Port B
  26. PORTB: byte absolute $38; // Input Pins, Port B
  27. PINA: byte absolute $39; // Port A Input Pins
  28. DDRA: byte absolute $3A; // Data Direction Register, Port A
  29. PORTA: byte absolute $3B; // Port A Data Register
  30. EECR: byte absolute $3C; // EEPROM Control Register
  31. EEDR: byte absolute $3D; // EEPROM Data Register
  32. EEAR: word absolute $3E; // EEPROM Address Register Bytes
  33. EEARL: byte absolute $3E; // EEPROM Address Register Bytes
  34. EEARH: byte absolute $3F; // EEPROM Address Register Bytes;
  35. PCMSK1: byte absolute $40; // Pin Change Enable Mask 1
  36. WDTCSR: byte absolute $41; // Watchdog Timer Control and Status Register
  37. TCCR1C: byte absolute $42; // Timer/Counter1 Control Register C
  38. GTCCR: byte absolute $43; // General Timer/Counter Control Register
  39. ICR1: word absolute $44; // Timer/Counter1 Input Capture Register Bytes
  40. ICR1L: byte absolute $44; // Timer/Counter1 Input Capture Register Bytes
  41. ICR1H: byte absolute $45; // Timer/Counter1 Input Capture Register Bytes;
  42. OCR1B: word absolute $48; // Timer/Counter1 Output Compare Register B Bytes
  43. OCR1BL: byte absolute $48; // Timer/Counter1 Output Compare Register B Bytes
  44. OCR1BH: byte absolute $49; // Timer/Counter1 Output Compare Register B Bytes;
  45. OCR1A: word absolute $4A; // Timer/Counter1 Output Compare Register A Bytes
  46. OCR1AL: byte absolute $4A; // Timer/Counter1 Output Compare Register A Bytes
  47. OCR1AH: byte absolute $4B; // Timer/Counter1 Output Compare Register A Bytes;
  48. TCNT1: word absolute $4C; // Timer/Counter1 Bytes
  49. TCNT1L: byte absolute $4C; // Timer/Counter1 Bytes
  50. TCNT1H: byte absolute $4D; // Timer/Counter1 Bytes;
  51. TCCR1B: byte absolute $4E; // Timer/Counter1 Control Register B
  52. TCCR1A: byte absolute $4F; // Timer/Counter1 Control Register A
  53. TCCR0A: byte absolute $50; // Timer/Counter Control Register A
  54. TCNT0: byte absolute $52; // Timer/Counter0
  55. TCCR0B: byte absolute $53; // Timer/Counter Control Register B
  56. MCUSR: byte absolute $54; // MCU Status Register
  57. MCUCR: byte absolute $55; // MCU Control Register
  58. OCR0A: byte absolute $56; // Timer/Counter0 Output Compare Register A
  59. SPMCSR: byte absolute $57; // Store Program Memory Control and Status Register
  60. TIFR0: byte absolute $58; // Timer/Counter0 Interrupt Flag Register
  61. TIMSK0: byte absolute $59; // Timer/Counter Interrupt Mask Register
  62. GIFR: byte absolute $5A; // General Interrupt Flag register
  63. GIMSK: byte absolute $5B; // General Interrupt Mask Register
  64. OCR0B: byte absolute $5C; // Timer/Counter0 Output Compare Register B
  65. SP: word absolute $5D; // Stack Pointer
  66. SPL: byte absolute $5D; // Stack Pointer
  67. SPH: byte absolute $5E; // Stack Pointer ;
  68. SREG: byte absolute $5F; // Status Register
  69. DIDR0: byte absolute $60; // Digital Input Disable Register 0
  70. DIDR1: byte absolute $61; // Digital Input Disable Register 1
  71. PUEB: byte absolute $62; // Pull-up Enable Control Register
  72. PUEA: byte absolute $63; // Pull-up Enable Control Register
  73. PORTCR: byte absolute $64; // Port Control Register
  74. REMAP: byte absolute $65; // Remap Port Pins
  75. TOCPMCOE: byte absolute $66; // Timer Output Compare Pin Mux Channel Output Enable
  76. TOCPMSA0: byte absolute $67; // Timer Output Compare Pin Mux Selection 0
  77. TOCPMSA1: byte absolute $68; // Timer Output Compare Pin Mux Selection 1
  78. PHDE: byte absolute $6A; // Port High Drive Enable Register
  79. PRR: byte absolute $70; // Power Reduction Register
  80. CCP: byte absolute $71; // Configuration Change Protection
  81. CLKCR: byte absolute $72; // Clock Control Register
  82. CLKPR: byte absolute $73; // Clock Prescale Register
  83. OSCCAL0: byte absolute $74; // Oscillator Calibration Register 8MHz
  84. OSCTCAL0A: byte absolute $75; // Oscillator Temperature Calibration Register A
  85. OSCTCAL0B: byte absolute $76; // Oscillator Temperature Calibration Register B
  86. OSCCAL1: byte absolute $77; // Oscillator Calibration Register 32kHz
  87. UDR0: byte absolute $80; // USART I/O Data Register
  88. UBRR0: word absolute $81; // USART Baud Rate Register Bytes
  89. UBRR0L: byte absolute $81; // USART Baud Rate Register Bytes
  90. UBRR0H: byte absolute $82; // USART Baud Rate Register Bytes;
  91. UCSR0D: byte absolute $83; // USART Control and Status Register D
  92. UCSR0C: byte absolute $84; // USART Control and Status Register C
  93. UCSR0B: byte absolute $85; // USART Control and Status Register B
  94. UCSR0A: byte absolute $86; // USART Control and Status Register A
  95. UDR1: byte absolute $90; // USART I/O Data Register
  96. UBRR1: word absolute $91; // USART Baud Rate Register Bytes
  97. UBRR1L: byte absolute $91; // USART Baud Rate Register Bytes
  98. UBRR1H: byte absolute $92; // USART Baud Rate Register Bytes;
  99. UCSR1D: byte absolute $93; // USART Control and Status Register D
  100. UCSR1C: byte absolute $94; // USART Control and Status Register C
  101. UCSR1B: byte absolute $95; // USART Control and Status Register B
  102. UCSR1A: byte absolute $96; // USART Control and Status Register A
  103. TWSD: byte absolute $A0; // TWI Slave Data Register
  104. TWSAM: byte absolute $A1; // TWI Slave Address Mask Register
  105. TWSA: byte absolute $A2; // TWI Slave Address Register
  106. TWSSRA: byte absolute $A3; // TWI Slave Status Register A
  107. TWSCRB: byte absolute $A4; // TWI Slave Control Register B
  108. TWSCRA: byte absolute $A5; // TWI Slave Control Register A
  109. SPDR: byte absolute $B0; // SPI Data Register
  110. SPSR: byte absolute $B1; // SPI Status Register
  111. SPCR: byte absolute $B2; // SPI Control Register
  112. ICR2: word absolute $C0; // Timer/Counter2 Input Capture Register Bytes
  113. ICR2L: byte absolute $C0; // Timer/Counter2 Input Capture Register Bytes
  114. ICR2H: byte absolute $C1; // Timer/Counter2 Input Capture Register Bytes;
  115. OCR2B: word absolute $C2; // Timer/Counter2 Output Compare Register B Bytes
  116. OCR2BL: byte absolute $C2; // Timer/Counter2 Output Compare Register B Bytes
  117. OCR2BH: byte absolute $C3; // Timer/Counter2 Output Compare Register B Bytes;
  118. OCR2A: word absolute $C4; // Timer/Counter2 Output Compare Register A Bytes
  119. OCR2AL: byte absolute $C4; // Timer/Counter2 Output Compare Register A Bytes
  120. OCR2AH: byte absolute $C5; // Timer/Counter2 Output Compare Register A Bytes;
  121. TCNT2: word absolute $C6; // Timer/Counter2 Bytes
  122. TCNT2L: byte absolute $C6; // Timer/Counter2 Bytes
  123. TCNT2H: byte absolute $C7; // Timer/Counter2 Bytes;
  124. TCCR2C: byte absolute $C8; // Timer/Counter2 Control Register C
  125. TCCR2B: byte absolute $C9; // Timer/Counter2 Control Register B
  126. TCCR2A: byte absolute $CA; // Timer/Counter2 Control Register A
  127. const
  128. // ADC Control and Status Register B
  129. ADTS0 = $00; // ADC Auto Trigger Sources
  130. ADTS1 = $01; // ADC Auto Trigger Sources
  131. ADTS2 = $02; // ADC Auto Trigger Sources
  132. ADLAR = $03;
  133. // The ADC Control and Status register
  134. ADPS0 = $00; // ADC Prescaler Select Bits
  135. ADPS1 = $01; // ADC Prescaler Select Bits
  136. ADPS2 = $02; // ADC Prescaler Select Bits
  137. ADIE = $03;
  138. ADIF = $04;
  139. ADATE = $05;
  140. ADSC = $06;
  141. ADEN = $07;
  142. // The ADC multiplexer Selection Register B
  143. GSEL0 = $00; // Gain Selection Bits
  144. GSEL1 = $01; // Gain Selection Bits
  145. REFS0 = $05; // Reference Selection Bits
  146. REFS1 = $06; // Reference Selection Bits
  147. REFS2 = $07; // Reference Selection Bits
  148. // The ADC multiplexer Selection Register A
  149. MUX0 = $00; // Analog Channel and Gain Selection Bits
  150. MUX1 = $01; // Analog Channel and Gain Selection Bits
  151. MUX2 = $02; // Analog Channel and Gain Selection Bits
  152. MUX3 = $03; // Analog Channel and Gain Selection Bits
  153. MUX4 = $04; // Analog Channel and Gain Selection Bits
  154. MUX5 = $05; // Analog Channel and Gain Selection Bits
  155. // Analog Comparator 0 Control And Status Register A
  156. ACIS00 = $00; // Analog Comparator 0 Interrupt Mode Select bits
  157. ACIS01 = $01; // Analog Comparator 0 Interrupt Mode Select bits
  158. ACIC0 = $02;
  159. ACIE0 = $03;
  160. ACI0 = $04;
  161. ACO0 = $05;
  162. ACPMUX2 = $06;
  163. ACD0 = $07;
  164. // Analog Comparator 0 Control And Status Register B
  165. ACPMUX0 = $00; // Analog Comparator 0 Positive Input Multiplexer Bits 1:0
  166. ACPMUX1 = $01; // Analog Comparator 0 Positive Input Multiplexer Bits 1:0
  167. ACNMUX0 = $02; // Analog Comparator 0 Negative Input Multiplexer
  168. ACNMUX1 = $03; // Analog Comparator 0 Negative Input Multiplexer
  169. ACOE0 = $04;
  170. HLEV0 = $06;
  171. HSEL0 = $07;
  172. // Analog Comparator 1 Control And Status Register A
  173. ACIS10 = $00; // Analog Comparator 1 Interrupt Mode Select bits
  174. ACIS11 = $01; // Analog Comparator 1 Interrupt Mode Select bits
  175. ACIC1 = $02;
  176. ACIE1 = $03;
  177. ACI1 = $04;
  178. ACO1 = $05;
  179. ACBG1 = $06;
  180. ACD1 = $07;
  181. // Analog Comparator 1 Control And Status Register B
  182. ACME1 = $02;
  183. ACOE1 = $04;
  184. HLEV1 = $06;
  185. HSEL1 = $07;
  186. // Timer/Counter Interrupt Flag register
  187. TOV1 = $00;
  188. OCF1A = $01;
  189. OCF1B = $02;
  190. ICF1 = $05;
  191. // Timer/Counter1 Interrupt Mask Register
  192. TOIE1 = $00;
  193. OCIE1A = $01;
  194. OCIE1B = $02;
  195. ICIE1 = $05;
  196. // Timer/Counter Interrupt Flag register
  197. TOV2 = $00;
  198. OCF2A = $01;
  199. OCF2B = $02;
  200. ICF2 = $05;
  201. // Timer/Counter2 Interrupt Mask Register
  202. TOIE2 = $00;
  203. OCIE2A = $01;
  204. OCIE2B = $02;
  205. ICIE2 = $05;
  206. // Pin Change Enable Mask 0
  207. PCINT0 = $00;
  208. PCINT1 = $01;
  209. PCINT2 = $02;
  210. PCINT3 = $03;
  211. PCINT4 = $04;
  212. PCINT5 = $05;
  213. PCINT6 = $06;
  214. PCINT7 = $07;
  215. // Input Pins, Port B
  216. PB0 = $00;
  217. PB1 = $01;
  218. PB2 = $02;
  219. PB3 = $03;
  220. // Port A Data Register
  221. PA0 = $00;
  222. PA1 = $01;
  223. PA2 = $02;
  224. PA3 = $03;
  225. PA4 = $04;
  226. PA5 = $05;
  227. PA6 = $06;
  228. PA7 = $07;
  229. // EEPROM Control Register
  230. EERE = $00;
  231. EEPE = $01;
  232. EEMPE = $02;
  233. EERIE = $03;
  234. EEPM0 = $04; // EEPROM Programming Mode Bits
  235. EEPM1 = $05; // EEPROM Programming Mode Bits
  236. // Pin Change Enable Mask 1
  237. PCINT8 = $00;
  238. PCINT9 = $01;
  239. PCINT10 = $02;
  240. PCINT11 = $03;
  241. // Watchdog Timer Control and Status Register
  242. WDE = $03;
  243. WDP0 = $00; // Watchdog Timer Prescaler Bits
  244. WDP1 = $01; // Watchdog Timer Prescaler Bits
  245. WDP2 = $02; // Watchdog Timer Prescaler Bits
  246. WDP3 = $05; // Watchdog Timer Prescaler Bits
  247. WDIE = $06;
  248. WDIF = $07;
  249. // Timer/Counter1 Control Register C
  250. FOC1B = $06;
  251. FOC1A = $07;
  252. // General Timer/Counter Control Register
  253. PSR = $00;
  254. TSM = $07;
  255. // Timer/Counter1 Control Register B
  256. CS10 = $00; // Clock Select bits
  257. CS11 = $01; // Clock Select bits
  258. CS12 = $02; // Clock Select bits
  259. ICES1 = $06;
  260. ICNC1 = $07;
  261. // Timer/Counter1 Control Register A
  262. WGM10 = $00; // Pulse Width Modulator Select Bits
  263. WGM11 = $01; // Pulse Width Modulator Select Bits
  264. COM1B0 = $04; // Compare Output Mode 1B, bits
  265. COM1B1 = $05; // Compare Output Mode 1B, bits
  266. COM1A0 = $06; // Compare Output Mode 1A, bits
  267. COM1A1 = $07; // Compare Output Mode 1A, bits
  268. // Timer/Counter Control Register A
  269. WGM00 = $00; // Waveform Generation Mode bits
  270. WGM01 = $01; // Waveform Generation Mode bits
  271. COM0B0 = $04; // Compare Match Output B Mode bits
  272. COM0B1 = $05; // Compare Match Output B Mode bits
  273. COM0A0 = $06; // Compare Match Output A Mode bits
  274. COM0A1 = $07; // Compare Match Output A Mode bits
  275. // Timer/Counter Control Register B
  276. CS00 = $00; // Clock Select bits
  277. CS01 = $01; // Clock Select bits
  278. CS02 = $02; // Clock Select bits
  279. WGM02 = $03;
  280. FOC0B = $06;
  281. FOC0A = $07;
  282. // MCU Status Register
  283. PORF = $00;
  284. EXTRF = $01;
  285. BORF = $02;
  286. WDRF = $03;
  287. // MCU Control Register
  288. ISC00 = $00;
  289. ISC01 = $01;
  290. SM0 = $03; // Sleep Mode Select Bits
  291. SM1 = $04; // Sleep Mode Select Bits
  292. SE = $05;
  293. // Store Program Memory Control and Status Register
  294. SPMEN = $00;
  295. PGERS = $01;
  296. PGWRT = $02;
  297. RFLB = $03;
  298. CTPB = $04;
  299. RSIG = $05;
  300. // Timer/Counter0 Interrupt Flag Register
  301. TOV0 = $00;
  302. OCF0A = $01;
  303. OCF0B = $02;
  304. // Timer/Counter Interrupt Mask Register
  305. TOIE0 = $00;
  306. OCIE0A = $01;
  307. OCIE0B = $02;
  308. // General Interrupt Flag register
  309. PCIF0 = $04; // Pin Change Interrupt Flags
  310. PCIF1 = $05; // Pin Change Interrupt Flags
  311. INTF0 = $06;
  312. // General Interrupt Mask Register
  313. PCIE0 = $04; // Pin Change Interrupt Enables
  314. PCIE1 = $05; // Pin Change Interrupt Enables
  315. INT0 = $06;
  316. // Status Register
  317. C = $00;
  318. Z = $01;
  319. N = $02;
  320. V = $03;
  321. S = $04;
  322. H = $05;
  323. T = $06;
  324. I = $07;
  325. // Digital Input Disable Register 0
  326. ADC0D = $00;
  327. ADC1D = $01;
  328. ADC2D = $02;
  329. ADC3D = $03;
  330. ADC4D = $04;
  331. ADC5D = $05;
  332. ADC6D = $06;
  333. ADC7D = $07;
  334. // Digital Input Disable Register 1
  335. ADC11D = $00;
  336. ADC10D = $01;
  337. ADC8D = $02;
  338. ADC9D = $03;
  339. // Port Control Register
  340. BBMA = $00;
  341. BBMB = $01;
  342. // Remap Port Pins
  343. U0MAP = $00;
  344. SPIMAP = $01;
  345. // Timer Output Compare Pin Mux Channel Output Enable
  346. TOCC0OE = $00;
  347. TOCC1OE = $01;
  348. TOCC2OE = $02;
  349. TOCC3OE = $03;
  350. TOCC4OE = $04;
  351. TOCC5OE = $05;
  352. TOCC6OE = $06;
  353. TOCC7OE = $07;
  354. // Timer Output Compare Pin Mux Selection 0
  355. TOCC0S0 = $00; // Timer Output Compare Channel 0 Selection Bits
  356. TOCC0S1 = $01; // Timer Output Compare Channel 0 Selection Bits
  357. TOCC1S0 = $02; // Timer Output Compare Channel 1 Selection Bits
  358. TOCC1S1 = $03; // Timer Output Compare Channel 1 Selection Bits
  359. TOCC2S0 = $04; // Timer Output Compare Channel 2 Selection Bits
  360. TOCC2S1 = $05; // Timer Output Compare Channel 2 Selection Bits
  361. TOCC3S0 = $06; // Timer Output Compare Channel 3 Selection Bits
  362. TOCC3S1 = $07; // Timer Output Compare Channel 3 Selection Bits
  363. // Timer Output Compare Pin Mux Selection 1
  364. TOCC4S0 = $00; // Timer Output Compare Channel 4 Selection Bits
  365. TOCC4S1 = $01; // Timer Output Compare Channel 4 Selection Bits
  366. TOCC5S0 = $02; // Timer Output Compare Channel 5 Selection Bits
  367. TOCC5S1 = $03; // Timer Output Compare Channel 5 Selection Bits
  368. TOCC6S0 = $04; // Timer Output Compare Channel 6 Selection Bits
  369. TOCC6S1 = $05; // Timer Output Compare Channel 6 Selection Bits
  370. TOCC7S0 = $06; // Timer Output Compare Channel 7 Selection Bits
  371. TOCC7S1 = $07; // Timer Output Compare Channel 7 Selection Bits
  372. // Port High Drive Enable Register
  373. PHDEA0 = $00; // PortA High Drive Enable
  374. PHDEA1 = $01; // PortA High Drive Enable
  375. // Power Reduction Register
  376. PRADC = $00;
  377. PRTIM0 = $01;
  378. PRTIM1 = $02;
  379. PRTIM2 = $03;
  380. PRSPI = $04;
  381. PRUSART0 = $05;
  382. PRUSART1 = $06;
  383. PRTWI = $07;
  384. // Clock Control Register
  385. CKSEL0 = $00; // Clock Select Bits
  386. CKSEL1 = $01; // Clock Select Bits
  387. CKSEL2 = $02; // Clock Select Bits
  388. CKSEL3 = $03; // Clock Select Bits
  389. SUT = $04;
  390. CKOUTC = $05;
  391. CSTR = $06;
  392. OSCRDY = $07;
  393. // Clock Prescale Register
  394. CLKPS0 = $00; // Clock Prescaler Select Bits
  395. CLKPS1 = $01; // Clock Prescaler Select Bits
  396. CLKPS2 = $02; // Clock Prescaler Select Bits
  397. CLKPS3 = $03; // Clock Prescaler Select Bits
  398. // USART Control and Status Register D
  399. SFDE0 = $05;
  400. RXS0 = $06;
  401. RXSIE0 = $07;
  402. // USART Control and Status Register C
  403. UCPOL0 = $00;
  404. UCSZ00 = $01; // Character Size
  405. UCSZ01 = $02; // Character Size
  406. USBS0 = $03;
  407. UPM00 = $04; // Parity Mode Bits
  408. UPM01 = $05; // Parity Mode Bits
  409. UMSEL00 = $06; // USART Mode Select
  410. UMSEL01 = $07; // USART Mode Select
  411. // USART Control and Status Register B
  412. TXB80 = $00;
  413. RXB80 = $01;
  414. UCSZ02 = $02;
  415. TXEN0 = $03;
  416. RXEN0 = $04;
  417. UDRIE0 = $05;
  418. TXCIE0 = $06;
  419. RXCIE0 = $07;
  420. // USART Control and Status Register A
  421. MPCM0 = $00;
  422. U2X0 = $01;
  423. UPE0 = $02;
  424. DOR0 = $03;
  425. FE0 = $04;
  426. UDRE0 = $05;
  427. TXC0 = $06;
  428. RXC0 = $07;
  429. // USART Control and Status Register D
  430. SFDE1 = $05;
  431. RXS1 = $06;
  432. RXSIE1 = $07;
  433. // USART Control and Status Register C
  434. UCPOL1 = $00;
  435. UCSZ10 = $01; // Character Size
  436. UCSZ11 = $02; // Character Size
  437. USBS1 = $03;
  438. UPM10 = $04; // Parity Mode Bits
  439. UPM11 = $05; // Parity Mode Bits
  440. UMSEL10 = $06; // USART Mode Select
  441. UMSEL11 = $07; // USART Mode Select
  442. // USART Control and Status Register B
  443. TXB81 = $00;
  444. RXB81 = $01;
  445. UCSZ12 = $02;
  446. TXEN1 = $03;
  447. RXEN1 = $04;
  448. UDRIE1 = $05;
  449. TXCIE1 = $06;
  450. RXCIE1 = $07;
  451. // USART Control and Status Register A
  452. MPCM1 = $00;
  453. U2X1 = $01;
  454. UPE1 = $02;
  455. DOR1 = $03;
  456. FE1 = $04;
  457. UDRE1 = $05;
  458. TXC1 = $06;
  459. RXC1 = $07;
  460. // TWI Slave Data Register
  461. TWSD0 = $00; // TWI slave data bit
  462. TWSD1 = $01; // TWI slave data bit
  463. TWSD2 = $02; // TWI slave data bit
  464. TWSD3 = $03; // TWI slave data bit
  465. TWSD4 = $04; // TWI slave data bit
  466. TWSD5 = $05; // TWI slave data bit
  467. TWSD6 = $06; // TWI slave data bit
  468. TWSD7 = $07; // TWI slave data bit
  469. // TWI Slave Address Mask Register
  470. TWAE = $00;
  471. TWSAM1 = $01; // TWI Address Mask Bits
  472. TWSAM2 = $02; // TWI Address Mask Bits
  473. TWSAM3 = $03; // TWI Address Mask Bits
  474. TWSAM4 = $04; // TWI Address Mask Bits
  475. TWSAM5 = $05; // TWI Address Mask Bits
  476. TWSAM6 = $06; // TWI Address Mask Bits
  477. TWSAM7 = $07; // TWI Address Mask Bits
  478. // TWI Slave Status Register A
  479. TWAS = $00;
  480. TWDIR = $01;
  481. TWBE = $02;
  482. TWC = $03;
  483. TWRA = $04;
  484. TWCH = $05;
  485. TWASIF = $06;
  486. TWDIF = $07;
  487. // TWI Slave Control Register B
  488. TWCMD0 = $00;
  489. TWCMD1 = $01;
  490. TWAA = $02;
  491. TWHNM = $03;
  492. // TWI Slave Control Register A
  493. TWSME = $00;
  494. TWPME = $01;
  495. TWSIE = $02;
  496. TWEN = $03;
  497. TWASIE = $04;
  498. TWDIE = $05;
  499. TWSHE = $07;
  500. // SPI Status Register
  501. SPI2X = $00;
  502. WCOL = $06;
  503. SPIF = $07;
  504. // SPI Control Register
  505. SPR0 = $00; // SPI Clock Rate Selects
  506. SPR1 = $01; // SPI Clock Rate Selects
  507. CPHA = $02;
  508. CPOL = $03;
  509. MSTR = $04;
  510. DORD = $05;
  511. SPE = $06;
  512. SPIE = $07;
  513. // Timer/Counter2 Control Register C
  514. FOC2B = $06;
  515. FOC2A = $07;
  516. // Timer/Counter2 Control Register B
  517. CS20 = $00; // Clock Select bits
  518. CS21 = $01; // Clock Select bits
  519. CS22 = $02; // Clock Select bits
  520. ICES2 = $06;
  521. ICNC2 = $07;
  522. // Timer/Counter2 Control Register A
  523. WGM20 = $00; // Pulse Width Modulator Select Bits
  524. WGM21 = $01; // Pulse Width Modulator Select Bits
  525. COM2B0 = $04; // Compare Output Mode 2B, bits
  526. COM2B1 = $05; // Compare Output Mode 2B, bits
  527. COM2A0 = $06; // Compare Output Mode 2A, bits
  528. COM2A1 = $07; // Compare Output Mode 2A, bits
  529. implementation
  530. {$define RELBRANCHES}
  531. {$i avrcommon.inc}
  532. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
  533. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 2 Pin Change Interrupt Request 0
  534. procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 3 Pin Change Interrupt Request 1
  535. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 4 Watchdog Time-out Interrupt
  536. procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 5 Timer/Counter1 Capture Event
  537. procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 6 Timer/Counter1 Compare Match A
  538. procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 7 Timer/Counter1 Compare Match B
  539. procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 8 Timer/Counter1 Overflow
  540. procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 9 TimerCounter0 Compare Match A
  541. procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 10 TimerCounter0 Compare Match B
  542. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 11 Timer/Couner0 Overflow
  543. procedure ANA_COMP0_ISR; external name 'ANA_COMP0_ISR'; // Interrupt 12 Analog Comparator 0
  544. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 13 ADC Conversion Complete
  545. procedure EE_RDY_ISR; external name 'EE_RDY_ISR'; // Interrupt 14 EEPROM Ready
  546. procedure ANA_COMP1_ISR; external name 'ANA_COMP1_ISR'; // Interrupt 15 Analog Comparator 1
  547. procedure TIMER2_CAPT_ISR; external name 'TIMER2_CAPT_ISR'; // Interrupt 16 Timer/Counter2 Capture Event
  548. procedure TIMER2_COMPA_ISR; external name 'TIMER2_COMPA_ISR'; // Interrupt 17 Timer/Counter2 Compare Match A
  549. procedure TIMER2_COMPB_ISR; external name 'TIMER2_COMPB_ISR'; // Interrupt 18 Timer/Counter2 Compare Match B
  550. procedure TIMER2_OVF_ISR; external name 'TIMER2_OVF_ISR'; // Interrupt 19 Timer/Counter2 Overflow
  551. procedure SPI_ISR; external name 'SPI_ISR'; // Interrupt 20 Serial Peripheral Interface
  552. procedure USART0_START_ISR; external name 'USART0_START_ISR'; // Interrupt 21 USART0, Start
  553. procedure USART0_RX_ISR; external name 'USART0_RX_ISR'; // Interrupt 22 USART0, Rx Complete
  554. procedure USART0_UDRE_ISR; external name 'USART0_UDRE_ISR'; // Interrupt 23 USART0 Data Register Empty
  555. procedure USART0_TX_ISR; external name 'USART0_TX_ISR'; // Interrupt 24 USART0, Tx Complete
  556. procedure USART1_START_ISR; external name 'USART1_START_ISR'; // Interrupt 25 USART1, Start
  557. procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 26 USART1, Rx Complete
  558. procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 27 USART1 Data Register Empty
  559. procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 28 USART1, Tx Complete
  560. procedure TWI_SLAVE_ISR; external name 'TWI_SLAVE_ISR'; // Interrupt 29 Two-wire Serial Interface
  561. procedure _FPC_start; assembler; nostackframe;
  562. label
  563. _start;
  564. asm
  565. .init
  566. .globl _start
  567. rjmp _start
  568. rjmp INT0_ISR
  569. rjmp PCINT0_ISR
  570. rjmp PCINT1_ISR
  571. rjmp WDT_ISR
  572. rjmp TIMER1_CAPT_ISR
  573. rjmp TIMER1_COMPA_ISR
  574. rjmp TIMER1_COMPB_ISR
  575. rjmp TIMER1_OVF_ISR
  576. rjmp TIMER0_COMPA_ISR
  577. rjmp TIMER0_COMPB_ISR
  578. rjmp TIMER0_OVF_ISR
  579. rjmp ANA_COMP0_ISR
  580. rjmp ADC_ISR
  581. rjmp EE_RDY_ISR
  582. rjmp ANA_COMP1_ISR
  583. rjmp TIMER2_CAPT_ISR
  584. rjmp TIMER2_COMPA_ISR
  585. rjmp TIMER2_COMPB_ISR
  586. rjmp TIMER2_OVF_ISR
  587. rjmp SPI_ISR
  588. rjmp USART0_START_ISR
  589. rjmp USART0_RX_ISR
  590. rjmp USART0_UDRE_ISR
  591. rjmp USART0_TX_ISR
  592. rjmp USART1_START_ISR
  593. rjmp USART1_RX_ISR
  594. rjmp USART1_UDRE_ISR
  595. rjmp USART1_TX_ISR
  596. rjmp TWI_SLAVE_ISR
  597. {$i start.inc}
  598. .weak INT0_ISR
  599. .weak PCINT0_ISR
  600. .weak PCINT1_ISR
  601. .weak WDT_ISR
  602. .weak TIMER1_CAPT_ISR
  603. .weak TIMER1_COMPA_ISR
  604. .weak TIMER1_COMPB_ISR
  605. .weak TIMER1_OVF_ISR
  606. .weak TIMER0_COMPA_ISR
  607. .weak TIMER0_COMPB_ISR
  608. .weak TIMER0_OVF_ISR
  609. .weak ANA_COMP0_ISR
  610. .weak ADC_ISR
  611. .weak EE_RDY_ISR
  612. .weak ANA_COMP1_ISR
  613. .weak TIMER2_CAPT_ISR
  614. .weak TIMER2_COMPA_ISR
  615. .weak TIMER2_COMPB_ISR
  616. .weak TIMER2_OVF_ISR
  617. .weak SPI_ISR
  618. .weak USART0_START_ISR
  619. .weak USART0_RX_ISR
  620. .weak USART0_UDRE_ISR
  621. .weak USART0_TX_ISR
  622. .weak USART1_START_ISR
  623. .weak USART1_RX_ISR
  624. .weak USART1_UDRE_ISR
  625. .weak USART1_TX_ISR
  626. .weak TWI_SLAVE_ISR
  627. .set INT0_ISR, Default_IRQ_handler
  628. .set PCINT0_ISR, Default_IRQ_handler
  629. .set PCINT1_ISR, Default_IRQ_handler
  630. .set WDT_ISR, Default_IRQ_handler
  631. .set TIMER1_CAPT_ISR, Default_IRQ_handler
  632. .set TIMER1_COMPA_ISR, Default_IRQ_handler
  633. .set TIMER1_COMPB_ISR, Default_IRQ_handler
  634. .set TIMER1_OVF_ISR, Default_IRQ_handler
  635. .set TIMER0_COMPA_ISR, Default_IRQ_handler
  636. .set TIMER0_COMPB_ISR, Default_IRQ_handler
  637. .set TIMER0_OVF_ISR, Default_IRQ_handler
  638. .set ANA_COMP0_ISR, Default_IRQ_handler
  639. .set ADC_ISR, Default_IRQ_handler
  640. .set EE_RDY_ISR, Default_IRQ_handler
  641. .set ANA_COMP1_ISR, Default_IRQ_handler
  642. .set TIMER2_CAPT_ISR, Default_IRQ_handler
  643. .set TIMER2_COMPA_ISR, Default_IRQ_handler
  644. .set TIMER2_COMPB_ISR, Default_IRQ_handler
  645. .set TIMER2_OVF_ISR, Default_IRQ_handler
  646. .set SPI_ISR, Default_IRQ_handler
  647. .set USART0_START_ISR, Default_IRQ_handler
  648. .set USART0_RX_ISR, Default_IRQ_handler
  649. .set USART0_UDRE_ISR, Default_IRQ_handler
  650. .set USART0_TX_ISR, Default_IRQ_handler
  651. .set USART1_START_ISR, Default_IRQ_handler
  652. .set USART1_RX_ISR, Default_IRQ_handler
  653. .set USART1_UDRE_ISR, Default_IRQ_handler
  654. .set USART1_TX_ISR, Default_IRQ_handler
  655. .set TWI_SLAVE_ISR, Default_IRQ_handler
  656. end;
  657. end.