Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 30

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡŽ содСрТимого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ тСкст Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ лишь Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для рассматриваСмой Π² основном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

1 #define _IO_BASE 0

2 #define _P(off) *(unsigned char volatile*) (_IO_BASE + off)

3 #define TSCR _Π (0Ρ…86)

4 #define TMSK2 _Π (0Ρ…8D)

5 #define TFLG2 _P(0x8F)

6 #define DDRA _Π (0Ρ…02)

7 #define PORTA _Π (0Ρ…00)

8 #define CLI() asm("cli\n")

9 #define EXIT() asm("swi\n")

Π”Π²Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строки ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния макроса _P с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ off. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° символ указатСля Π² макросС. ВсС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния Π² строках с 3 ΠΏΠΎ 7 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ числСнныС значСния для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистров ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ МК. Π­Ρ‚ΠΈ числСнныС значСния β€” адрСса рСгистров Π² соотвСтствии с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ памяти МК. Π›ΡŽΠ±ΠΎΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ рСгистров Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ связано с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈΠ»ΠΈ записи Π² эти рСгистры ΠΏΠΎ ΠΈΡ… физичСским адрСсам. Π­Ρ‚ΠΈΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ примСнСния указатСля Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ макроса _P(off). Π”Π²Π΅ послСдниС строки 8 ΠΈ 9 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ опрСдСлСния макросов.

ВСрнСмся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ управлСния свСтодиодами. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ компилятора исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Sample.c Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС ассСмблСра.

1   .module interrupt.c

2   .area memory(abs)

3   .org 0xb1e

4  _Timer_Overflow_interrupt_vector::

5   .word _TOIISR

6   .area data

7  _second::

8   .blkb 1

9   .area idata

10 .byte 0

11 .area data

12  .area text _main::

14 ; void TOIISR(void);

15 ; #pragma interrupt_handler TOIISR() ;

16 ; #pragma abs_address:0x0B1E

17 ; void (*Timer_Overflow_interrupt_vector[]) ()={TOIISR};

18 ; #pragma end_abs_address ;

19 ; unsigned char second=0x00;

20 ;

21 ;void main(void)

22 ;{

23 ; TSCR=0x80;

24  ldab #128

25  stab 0Ρ…86

26 ; ВМSК2=0Ρ…80;

27  ldab #128

28  stab 0x8d

29 ; TFLG2=0x80;

30  ldab #128

31  stab 0x8f

32 ; DDRA=0xFF;

33  ldab #255

34  stab 0Ρ…2

35 ; CLI();

36  сli

37 L3: L4:

38  bra L3

39 X0:

40 ; while(1) {};

41 ; EXIT();

42  swi

43 ; }L2

44 .dbline 0

45 ; func end

46  rts

47 _TOIISR: :

48  void TOIISR(void)

49 ; {

50 ; TFLG2=0x80;

51  ldab #128

52  stab 0x8f

53 ; second + = 1;

54  ldab _second

55  clra

56  addd #1

57  stab _second

58 ; if(second = = 122)

59  ldab _second

60  cmpb #122

61  bne L7

62 ; {

63 ; PORTA = ~ PORTA;

64 ; vol

65  ldab 0

66  clra

67  coma

68  comb

69  stab 0

70 ; second = 0x00;

71  clr _second

72 ; }

73 L7:

74 ; }

75 L6:

76 .dbline 0

77 ; func end

78  rti

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ тСкст послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ кросс-компилятором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит инструкции ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° языкС ассСмблСра ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° 68HC12 ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ языка АссСмблСр Π² составС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ICC12. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ АссСмблСр β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ управлСния процСссом Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ для МК ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ АссСмблСр. Π’ срСдС ICC12 Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… ΠΈΠΌΠ΅Π½Π΅ΠΌ. НапримСр: .area data ΠΈΠ»ΠΈ .byte 0. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ тСкст прСдставлСнного Ρ„Π°ΠΉΠ»Π°.

Π’ строкС 1 записана Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° АссСмблСра, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ .area ΠΈ .org Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ строки 7 исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘ΠΈ: #pragma abs_address:0x0B1E. Они ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ адрСс ячСйки памяти для записи адрСса Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрывания ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎ адрСс принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ прСрывания. Для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² сСмСйства 68HC12 ячСйки памяти для хранСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° прСрывания ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ источника запросов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ тСхничСским описаниСм. Π’ частности для МК ΠΌΠΎΠ΄Π΅Π»ΠΈ 68HC12B32 Π² ячСйкС памяти с адрСсом 0x0B1E хранится Π²Π΅ΠΊΡ‚ΠΎΡ€ прСрывания ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ срСды ICC12 добавляСт символ подчСркивания ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² исходного ΠΊΠΎΠ΄Π° Π½Π° Π‘ΠΈ (это ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π² строках 4, 7 ΠΈ 47. Π”Π²Π° двоСточия послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступны ΠΈΠ· всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚.Π΅. ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ· всСх Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .word Π² строкС 5 ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ запись адрСса Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрывания с ΠΈΠΌΠ΅Π½Π΅ΠΌ TOIISR Π² ячСйку памяти Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ Π² 2 Π±Π°ΠΉΡ‚Π°. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π² строках с 7 ΠΏΠΎ 11 Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ second ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π΅ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Начиная с Π»ΠΈΠ½ΠΈΠΈ 12 ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сгСнСрированныС кросс компилятором ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° 68HC12, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС записи исходного тСкста Π½Π° Π‘ΠΈ ΠΈΠ· основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ пСрСнСсСны Π² тСкст ассСмблСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (строки с 13 ΠΏΠΎ 23), Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ установлСн символ Β«Ρ‚ΠΎΡ‡ΠΊΠ° с запятой». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эти записи ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² статус коммСнтария, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. АббрСвиатуры ΠΊΠΎΠΌΠ°Π½Π΄ ассСмблСра Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со строки 24. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² строкС 23 написана инструкция Π‘ΠΈ, которая присваиваСт рСгистру управлСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ TSCR Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x80. НиТС Π² строках 24 ΠΈ 25 записаны Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½ΠΎΠ΅ дСйствиС. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, кросс-компилятор ΡƒΠΆΠ΅ использовал Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для опрСдСлСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ адрСса рСгистра управлСния TSCR ΠΊΠ°ΠΊ 0x86. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 26 ΠΏΠΎ 36 Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ процСсс ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Π½ΠΎ ΡƒΠΆΠ΅ Π½Π° языкС ассСмблСрных ΠΊΠΎΠΌΠ°Π½Π΄. Π’ строках 37…40 записаны ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ бСсконСчного Ρ†ΠΈΠΊΠ»Π°. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с 41 ΠΏΠΎ 46 Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ассСмблСрный тСкст основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, макросы CLI() ΠΈ EXIT() Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ассСмблСрныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cli ΠΈ swi соотвСтствСнно. Основная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ rts. Π’ строкС 47 начинаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Анализируя Π΅Π΅ тСкст, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ соотвСтствиС ΠΊΠΎΠΌΠ°Π½Π΄ ассСмблСра ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ исходного тСкста Π½Π° Π‘ΠΈ. ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rti Π² строкС 78.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Π² процСссС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ исполняСмого машинного ΠΊΠΎΠ΄Π° β€” это гСнСрация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (Ρ„Π°ΠΉΠ» interrupt.o) ΠΈΠ· рассмотрСнного ассСмблСрного исходного ΠΊΠΎΠ΄Π°. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ АссСмблСр срСды ICC12 рассмотрСнного тСкста Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

XН

H4 areas 4 global symbols

M interrupt.c

А text size 3D flags 0

S _main Def0000

S _TOIISR Def001A

А memory size Π’20 flags Π‘

S _Timer_Overflow_interrupt_vector Def0B1E

А data size 1 flags 0

S _second Def0000

А idata size 1 flags 0

T 0Π’ 1Π• 00 1А

R 00 00 00 01 00 02 00 00

T 00 00 00

R 00 00 00 03

T 00 00 Π‘6 80 7Π’ 00 86 Π‘6 80 7Π’ 00 80 Π‘6 80 7Π’

R 00 00 00 00

T 00 00 00 8F Π‘6 FF 7Π’ 00 02 10 EF 20 FE 3F 30 Π‘6

R 00 00 00 00

T 00 1Π’ 80 7Π’ 00 8F F6 00 00 87 Π‘3 00 01 7Π’ 00 00

R 00 00 00 00 00 07 00 02 00 0E 00 02

T 00 29 F6 00 00 C1 7А 26 ОБ F6 00 00 87 41 51 7B

R 00 00 00 00 00 03 00 02

Π’ 00 37 00 00 79 00 00 0B

R 00 00 00 00 00 05 00 02

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ прСдставлСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, содСрТатся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ°, Π° Π² Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ инструкций ассСмблСра МК сСмСйства 68HC12.

На Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стадии прСдставлСнный Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ обрабатываСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°: interrupt.lst, interrupt.map ΠΈ interrupt.s19.

Π€Π°ΠΉΠ» листинга ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ interrupt.lst прСдставляСт собой тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра, ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ этих ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ адрСса Π² памяти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эти ΠΊΠΎΠ΄Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Ρ„Π°ΠΉΠ» листинга прСдставлСн Π½ΠΈΠΆΠ΅:

            .module interrupt.c

            .area memory(abs)

            .org 0Ρ…b1Π΅

0B1Π• _      _Timer_Overflow_interrupt_vector: :

0B1Π• 8044   .word _TOIISR

            .area data

0800        _second::

0800        .blkb 1

            .area idata

--- 0000 00 .byte 0

            .area data

            .area text

802А _main: :

;#include <383HC12-ver1.h>

;void TOIISR(void) ;

;#pragma interrupt_handler TOIISR()

;

;#pragma abs_address:0x0B1E

;void(*Timer_Overflow_interrupt_vector[]) ()={TOIISR};

;#pragma end_abs_address

;

;unsigned char second=0x00;

;

;void main(void)

;{

;TSCR=0x80;

802А C680   ldab #128

802Π‘ 7Π’0086 stab 0Ρ…86

;TMSK2=0x80;

802F C680   ldab #128

8031 7B008D stab 0x8d