attiny15.pp 6.0 KB

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