attiny841.pp 25 KB

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