attiny15.pp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. unit ATtiny15;
  2. interface
  3. var
  4. ADC: word absolute $04; // ADC Data Register Bytes
  5. ADCL: byte absolute $04; // ADC Data Register Bytes
  6. ADCH: byte absolute $05; // ADC Data Register Bytes;
  7. ADCSR: byte absolute $06; // The ADC Control and Status register
  8. ADMUX: byte absolute $07; // The ADC multiplexer Selection Register
  9. ACSR: byte absolute $08; // Analog Comparator Control And Status Register
  10. PINB: byte absolute $16; // Input Pins, Port B
  11. DDRB: byte absolute $17; // Data Direction Register, Port B
  12. PORTB: byte absolute $18; // Data Register, Port B
  13. EECR: byte absolute $1C; // EEPROM Control Register
  14. EEDR: byte absolute $1D; // EEPROM Data Register
  15. EEAR: byte absolute $1E; // EEPROM Read/Write Access
  16. WDTCR: byte absolute $21; // Watchdog Timer Control Register
  17. SFIOR: byte absolute $2C; // Special Function IO Register
  18. OCR1B: byte absolute $2D; // Output Compare Register
  19. OCR1A: byte absolute $2E; // Output Compare Register
  20. TCNT1: byte absolute $2F; // Timer/Counter Register
  21. TCCR1: byte absolute $30; // Timer/Counter Control Register
  22. OSCCAL: byte absolute $31; // Status Register
  23. TCNT0: byte absolute $32; // Timer Counter 0
  24. TCCR0: byte absolute $33; // Timer/Counter0 Control Register
  25. MCUSR: byte absolute $34; // MCU Status register
  26. MCUCR: byte absolute $35; // MCU Control Register
  27. TIFR: byte absolute $38; // Timer/Counter Interrupt Flag Register
  28. TIMSK: byte absolute $39; // Timer/Counter Interrupt Mask Register
  29. GIFR: byte absolute $3A; // General Interrupt Flag register
  30. GIMSK: byte absolute $3B; // General Interrupt Mask Register
  31. SREG: byte absolute $3F; // Status Register
  32. const
  33. // The ADC Control and Status register
  34. ADPS0 = $00; // ADC Prescaler Select Bits
  35. ADPS1 = $01; // ADC Prescaler Select Bits
  36. ADPS2 = $02; // ADC Prescaler Select Bits
  37. ADIE = $03;
  38. ADIF = $04;
  39. ADFR = $05;
  40. ADSC = $06;
  41. ADEN = $07;
  42. // The ADC multiplexer Selection Register
  43. MUX0 = $00; // Analog Channel and Gain Selection Bits
  44. MUX1 = $01; // Analog Channel and Gain Selection Bits
  45. MUX2 = $02; // Analog Channel and Gain Selection Bits
  46. ADLAR = $05;
  47. REFS0 = $06; // Reference Selection Bits
  48. REFS1 = $07; // Reference Selection Bits
  49. // Analog Comparator Control And Status Register
  50. ACIS0 = $00; // Analog Comparator Interrupt Mode Select bits
  51. ACIS1 = $01; // Analog Comparator Interrupt Mode Select bits
  52. ACIE = $03;
  53. ACI = $04;
  54. ACO = $05;
  55. ACBG = $06;
  56. ACD = $07;
  57. // Data Register, Port B
  58. PB0 = $00;
  59. PB1 = $01;
  60. PB2 = $02;
  61. PB3 = $03;
  62. PB4 = $04;
  63. // EEPROM Control Register
  64. EERE = $00;
  65. EEWE = $01;
  66. EEMWE = $02;
  67. EERIE = $03;
  68. // Watchdog Timer Control Register
  69. WDP0 = $00; // Watch Dog Timer Prescaler bits
  70. WDP1 = $01; // Watch Dog Timer Prescaler bits
  71. WDP2 = $02; // Watch Dog Timer Prescaler bits
  72. WDE = $03;
  73. WDTOE = $04;
  74. // Special Function IO Register
  75. PSR0 = $00;
  76. PSR1 = $01;
  77. FOC1A = $02;
  78. // Timer/Counter Control Register
  79. CS10 = $00; // Clock Select Bits
  80. CS11 = $01; // Clock Select Bits
  81. CS12 = $02; // Clock Select Bits
  82. CS13 = $03; // Clock Select Bits
  83. COM1A0 = $04; // Compare Output Mode, Bits
  84. COM1A1 = $05; // Compare Output Mode, Bits
  85. PWM1 = $06;
  86. CTC1 = $07;
  87. // Status Register
  88. OSCCAL0 = $00; // Oscillator Calibration
  89. OSCCAL1 = $01; // Oscillator Calibration
  90. OSCCAL2 = $02; // Oscillator Calibration
  91. OSCCAL3 = $03; // Oscillator Calibration
  92. OSCCAL4 = $04; // Oscillator Calibration
  93. OSCCAL5 = $05; // Oscillator Calibration
  94. OSCCAL6 = $06; // Oscillator Calibration
  95. OSCCAL7 = $07; // Oscillator Calibration
  96. // Timer/Counter0 Control Register
  97. CS00 = $00;
  98. CS01 = $01;
  99. CS02 = $02;
  100. // MCU Status register
  101. PORF = $00;
  102. EXTRF = $01;
  103. BORF = $02;
  104. WDRF = $03;
  105. // MCU Control Register
  106. ISC00 = $00; // Interrupt Sense Control 0 bits
  107. ISC01 = $01; // Interrupt Sense Control 0 bits
  108. SM0 = $03; // Sleep Mode Select Bits
  109. SM1 = $04; // Sleep Mode Select Bits
  110. SE = $05;
  111. PUD = $06;
  112. // Timer/Counter Interrupt Flag Register
  113. TOV0 = $01;
  114. TOV1 = $02;
  115. OCF1A = $06;
  116. // Timer/Counter Interrupt Mask Register
  117. TOIE0 = $01;
  118. TOIE1 = $02;
  119. OCIE1A = $06;
  120. // General Interrupt Flag register
  121. PCIF = $05;
  122. INTF0 = $06;
  123. // General Interrupt Mask Register
  124. PCIE = $05;
  125. INT0 = $06;
  126. // Status Register
  127. C = $00;
  128. Z = $01;
  129. N = $02;
  130. V = $03;
  131. S = $04;
  132. H = $05;
  133. T = $06;
  134. I = $07;
  135. implementation
  136. {$define RELBRANCHES}
  137. {$i avrcommon.inc}
  138. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt 0
  139. procedure IO_PINS_ISR; external name 'IO_PINS_ISR'; // Interrupt 2 External Interrupt Request 0
  140. procedure TIMER1_COMP_ISR; external name 'TIMER1_COMP_ISR'; // Interrupt 3 Timer/Counter1 Compare Match
  141. procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 4 Timer/Counter1 Overflow
  142. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 5 Timer/Counter0 Overflow
  143. procedure EE_RDY_ISR; external name 'EE_RDY_ISR'; // Interrupt 6 EEPROM Ready
  144. procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 7 Analog Comparator
  145. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 8 ADC Conversion Ready
  146. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  147. asm
  148. rjmp __dtors_end
  149. rjmp INT0_ISR
  150. rjmp IO_PINS_ISR
  151. rjmp TIMER1_COMP_ISR
  152. rjmp TIMER1_OVF_ISR
  153. rjmp TIMER0_OVF_ISR
  154. rjmp EE_RDY_ISR
  155. rjmp ANA_COMP_ISR
  156. rjmp ADC_ISR
  157. .weak INT0_ISR
  158. .weak IO_PINS_ISR
  159. .weak TIMER1_COMP_ISR
  160. .weak TIMER1_OVF_ISR
  161. .weak TIMER0_OVF_ISR
  162. .weak EE_RDY_ISR
  163. .weak ANA_COMP_ISR
  164. .weak ADC_ISR
  165. .set INT0_ISR, Default_IRQ_handler
  166. .set IO_PINS_ISR, Default_IRQ_handler
  167. .set TIMER1_COMP_ISR, Default_IRQ_handler
  168. .set TIMER1_OVF_ISR, Default_IRQ_handler
  169. .set TIMER0_OVF_ISR, Default_IRQ_handler
  170. .set EE_RDY_ISR, Default_IRQ_handler
  171. .set ANA_COMP_ISR, Default_IRQ_handler
  172. .set ADC_ISR, Default_IRQ_handler
  173. end;
  174. end.