attiny5.pp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. unit ATtiny5;
  2. interface
  3. var
  4. // AD_CONVERTER
  5. ADMUX : byte absolute $00+$1B; // The ADC multiplexer Selection Register
  6. ADCL : byte absolute $00+$19; // ADC Data Register
  7. ADCSRA : byte absolute $00+$1D; // The ADC Control and Status register A
  8. ADCSRB : byte absolute $00+$1C; // The ADC Control and Status register B
  9. DIDR0 : byte absolute $00+$17; // Digital Input Disable Register
  10. // ANALOG_COMPARATOR
  11. ACSR : byte absolute $00+$1F; // Analog Comparator Control And Status Register
  12. // CPU
  13. CCP : byte absolute $00+$3C; // Configuration Change Protection
  14. SP : word absolute $00+$3D; // Stack Pointer
  15. SPL : byte absolute $00+$3D; // Stack Pointer
  16. SPH : byte absolute $00+$3D+1; // Stack Pointer
  17. SREG : byte absolute $00+$3F; // Status Register
  18. CLKMSR : byte absolute $00+$37; // Clock Main Settings Register
  19. CLKPSR : byte absolute $00+$36; // Clock Prescale Register
  20. OSCCAL : byte absolute $00+$39; // Oscillator Calibration Value
  21. SMCR : byte absolute $00+$3A; // Sleep Mode Control Register
  22. PRR : byte absolute $00+$35; // Power Reduction Register
  23. VLMCSR : byte absolute $00+$34; // Vcc Level Monitoring Control and Status Register
  24. RSTFLR : byte absolute $00+$3B; // Reset Flag Register
  25. NVMCSR : byte absolute $00+$32; // Non-Volatile Memory Control and Status Register
  26. NVMCMD : byte absolute $00+$33; // Non-Volatile Memory Command
  27. // PORTB
  28. PORTCR : byte absolute $00+$0C; // Port Control Register
  29. PUEB : byte absolute $00+$03; // Pull-up Enable Control Register
  30. DDRB : byte absolute $00+$01; // Data Direction Register, Port B
  31. PINB : byte absolute $00+$00; // Port B Data register
  32. PORTB : byte absolute $00+$02; // Input Pins, Port B
  33. // EXTERNAL_INTERRUPT
  34. EICRA : byte absolute $00+$15; // External Interrupt Control Register A
  35. EIMSK : byte absolute $00+$13; // External Interrupt Mask register
  36. EIFR : byte absolute $00+$14; // External Interrupt Flag register
  37. PCICR : byte absolute $00+$12; // Pin Change Interrupt Control Register
  38. PCIFR : byte absolute $00+$11; // Pin Change Interrupt Flag Register
  39. PCMSK : byte absolute $00+$10; // Pin Change Mask Register
  40. // TIMER_COUNTER_0
  41. TCCR0A : byte absolute $00+$2E; // Timer/Counter 0 Control Register A
  42. TCCR0B : byte absolute $00+$2D; // Timer/Counter 0 Control Register B
  43. TCCR0C : byte absolute $00+$2C; // Timer/Counter 0 Control Register C
  44. TCNT0 : word absolute $00+$28; // Timer/Counter0
  45. TCNT0L : byte absolute $00+$28; // Timer/Counter0
  46. TCNT0H : byte absolute $00+$28+1; // Timer/Counter0
  47. OCR0A : word absolute $00+$26; // Timer/Counter 0 Output Compare Register A
  48. OCR0AL : byte absolute $00+$26; // Timer/Counter 0 Output Compare Register A
  49. OCR0AH : byte absolute $00+$26+1; // Timer/Counter 0 Output Compare Register A
  50. OCR0B : word absolute $00+$24; // Timer/Counter0 Output Compare Register B
  51. OCR0BL : byte absolute $00+$24; // Timer/Counter0 Output Compare Register B
  52. OCR0BH : byte absolute $00+$24+1; // Timer/Counter0 Output Compare Register B
  53. ICR0 : word absolute $00+$22; // Input Capture Register Bytes
  54. ICR0L : byte absolute $00+$22; // Input Capture Register Bytes
  55. ICR0H : byte absolute $00+$22+1; // Input Capture Register Bytes
  56. TIMSK0 : byte absolute $00+$2B; // Timer Interrupt Mask Register 0
  57. TIFR0 : byte absolute $00+$2A; // Overflow Interrupt Enable
  58. GTCCR : byte absolute $00+$2F; // General Timer/Counter Control Register
  59. // WATCHDOG
  60. WDTCSR : byte absolute $00+$31; // Watchdog Timer Control and Status Register
  61. const
  62. // ADMUX
  63. MUX = 0; // Analog Channel Selection Bits
  64. // ADCSRA
  65. ADEN = 7; // ADC Enable
  66. ADSC = 6; // ADC Start Conversion
  67. ADATE = 5; // ADC Auto Trigger Enable
  68. ADIF = 4; // ADC Interrupt Flag
  69. ADIE = 3; // ADC Interrupt Enable
  70. ADPS = 0; // ADC Prescaler Select Bits
  71. // ADCSRB
  72. ADTS = 0; // ADC Auto Trigger Source bits
  73. // DIDR0
  74. ADC3D = 3; //
  75. ADC2D = 2; //
  76. ADC1D = 1; //
  77. ADC0D = 0; //
  78. // ACSR
  79. ACD = 7; // Analog Comparator Disable
  80. ACO = 5; // Analog Compare Output
  81. ACI = 4; // Analog Comparator Interrupt Flag
  82. ACIE = 3; // Analog Comparator Interrupt Enable
  83. ACIC = 2; // Analog Comparator Input Capture Enable
  84. ACIS = 0; // Analog Comparator Interrupt Mode Select bits
  85. // DIDR0
  86. AIN1D = 1; // AIN1 Digital Input Disable
  87. AIN0D = 0; // AIN0 Digital Input Disable
  88. // SREG
  89. I = 7; // Global Interrupt Enable
  90. T = 6; // Bit Copy Storage
  91. H = 5; // Half Carry Flag
  92. S = 4; // Sign Bit
  93. V = 3; // Two's Complement Overflow Flag
  94. N = 2; // Negative Flag
  95. Z = 1; // Zero Flag
  96. C = 0; // Carry Flag
  97. // CLKMSR
  98. CLKMS = 0; // Clock Main Select Bits
  99. // CLKPSR
  100. CLKPS = 0; // Clock Prescaler Select Bits
  101. // SMCR
  102. SM = 1; // Sleep Mode Select Bits
  103. SE = 0; // Sleep Enable
  104. // PRR
  105. PRADC = 1; // Power Reduction ADC
  106. PRTIM0 = 0; // Power Reduction Timer/Counter0
  107. // VLMCSR
  108. VLMF = 7; // VLM Flag
  109. VLMIE = 6; // VLM Interrupt Enable
  110. VLM = 0; // Trigger Level of Voltage Level Monitor bits
  111. // RSTFLR
  112. WDRF = 3; // Watchdog Reset Flag
  113. EXTRF = 1; // External Reset Flag
  114. PORF = 0; // Power-on Reset Flag
  115. // NVMCSR
  116. NVMBSY = 7; // Non-Volatile Memory Busy
  117. // PORTCR
  118. BBMB = 1; // Break-Before-Make Mode Enable
  119. // EICRA
  120. ISC01 = 1; // Interrupt Sense Control 0 Bit 1
  121. ISC00 = 0; // Interrupt Sense Control 0 Bit 0
  122. // EIMSK
  123. INT0 = 0; // External Interrupt Request 0 Enable
  124. // EIFR
  125. INTF0 = 0; // External Interrupt Flag 0
  126. // PCICR
  127. PCIE0 = 0; // Pin Change Interrupt Enable 0
  128. // PCIFR
  129. PCIF0 = 0; // Pin Change Interrupt Flag 0
  130. // PCMSK
  131. PCINT = 0; // Pin Change Enable Masks
  132. // TCCR0A
  133. COM0A = 6; // Compare Output Mode for Channel A bits
  134. COM0B = 4; // Compare Output Mode for Channel B bits
  135. WGM0 = 0; // Waveform Generation Mode
  136. // TCCR0B
  137. ICNC0 = 7; // Input Capture Noise Canceler
  138. ICES0 = 6; // Input Capture Edge Select
  139. CS0 = 0; // Clock Select
  140. // TCCR0C
  141. FOC0A = 7; // Force Output Compare for Channel A
  142. FOC0B = 6; // Force Output Compare for Channel B
  143. // TIMSK0
  144. ICIE0 = 5; // Input Capture Interrupt Enable
  145. OCIE0B = 2; // Output Compare B Match Interrupt Enable
  146. OCIE0A = 1; // Output Compare A Match Interrupt Enable
  147. TOIE0 = 0; // Overflow Interrupt Enable
  148. // TIFR0
  149. ICF0 = 5; // Input Capture Flag
  150. OCF0B = 2; // Timer Output Compare Flag 0B
  151. OCF0A = 1; // Timer Output Compare Flag 0A
  152. TOV0 = 0; // Timer Overflow Flag
  153. // GTCCR
  154. TSM = 7; // Timer Synchronization Mode
  155. PSR = 0; // Prescaler Reset
  156. // WDTCSR
  157. WDIF = 7; // Watchdog Timer Interrupt Flag
  158. WDIE = 6; // Watchdog Timer Interrupt Enable
  159. WDP = 0; // Watchdog Timer Prescaler Bits
  160. WDE = 3; // Watch Dog Enable
  161. implementation
  162. {$define RELBRANCHES}
  163. {$i avrcommon.inc}
  164. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
  165. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 2 Pin Change Interrupt Request 0
  166. procedure TIM0_CAPT_ISR; external name 'TIM0_CAPT_ISR'; // Interrupt 3 Timer/Counter0 Input Capture
  167. procedure TIM0_OVF_ISR; external name 'TIM0_OVF_ISR'; // Interrupt 4 Timer/Counter0 Overflow
  168. procedure TIM0_COMPA_ISR; external name 'TIM0_COMPA_ISR'; // Interrupt 5 Timer/Counter Compare Match A
  169. procedure TIM0_COMPB_ISR; external name 'TIM0_COMPB_ISR'; // Interrupt 6 Timer/Counter Compare Match B
  170. procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 7 Analog Comparator
  171. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 8 Watchdog Time-out
  172. procedure VLM_ISR; external name 'VLM_ISR'; // Interrupt 9 Vcc Voltage Level Monitor
  173. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 10 ADC Conversion Complete
  174. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  175. asm
  176. rjmp __dtors_end
  177. rjmp INT0_ISR
  178. rjmp PCINT0_ISR
  179. rjmp TIM0_CAPT_ISR
  180. rjmp TIM0_OVF_ISR
  181. rjmp TIM0_COMPA_ISR
  182. rjmp TIM0_COMPB_ISR
  183. rjmp ANA_COMP_ISR
  184. rjmp WDT_ISR
  185. rjmp VLM_ISR
  186. rjmp ADC_ISR
  187. .weak INT0_ISR
  188. .weak PCINT0_ISR
  189. .weak TIM0_CAPT_ISR
  190. .weak TIM0_OVF_ISR
  191. .weak TIM0_COMPA_ISR
  192. .weak TIM0_COMPB_ISR
  193. .weak ANA_COMP_ISR
  194. .weak WDT_ISR
  195. .weak VLM_ISR
  196. .weak ADC_ISR
  197. .set INT0_ISR, Default_IRQ_handler
  198. .set PCINT0_ISR, Default_IRQ_handler
  199. .set TIM0_CAPT_ISR, Default_IRQ_handler
  200. .set TIM0_OVF_ISR, Default_IRQ_handler
  201. .set TIM0_COMPA_ISR, Default_IRQ_handler
  202. .set TIM0_COMPB_ISR, Default_IRQ_handler
  203. .set ANA_COMP_ISR, Default_IRQ_handler
  204. .set WDT_ISR, Default_IRQ_handler
  205. .set VLM_ISR, Default_IRQ_handler
  206. .set ADC_ISR, Default_IRQ_handler
  207. end;
  208. end.