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

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

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

β€’ Π‘ΠΈΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ модуля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° TEN (рСгистр управлСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° TSCR);

β€’ Π‘ΠΈΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ прСрывания ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ счСтчика Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ TOI ΠΈ Π±ΠΈΡ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€Π° коэффициСнта дСлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ дСлитСля частоты Π½Π° Π²Ρ…ΠΎΠ΄Π΅ счСтчика Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ PR2:PR1:PR0 (рСгистр масок Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° TMSK2);

β€’ Π‘ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°Π½Π°Π»Π° IOSn (рСгистр Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ² Π·Π°Ρ…Π²Π°Ρ‚Π°/сравнСния TIOS). Если Π±ΠΈΡ‚ IOSn установлСн Π² 1, Ρ‚ΠΎ ΠΊΠ°Π½Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния;

β€’ Π‘ΠΈΡ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ формироватСля уровня ΠΊΠ°Π½Π°Π»Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния OMn:OLn (рСгистры управлСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ TCTL1 ΠΈ TCTL2);

β€’ Π‘ΠΈΡ‚ события Π² ΠΊΠ°Π½Π°Π»Π° CnF (рСгистр Ρ„Π»Π°Π³ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° TFLG1);

β€’ Π‘ΠΈΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ прСрывания ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π² ΠΊΠ°Π½Π°Π»Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния CnI (рСгистр масок Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° TMSK1);

β€’ Π Π΅Π³ΠΈΡΡ‚Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»Π° TCn, ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ автоматичСски сравниваСтся с ΠΊΠΎΠ΄ΠΎΠΌ счСтчика Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹. ΠœΠΎΠΌΠ΅Π½Ρ‚ равСнства ΠΊΠΎΠ΄ΠΎΠ² ΠΈ являСтся событиСм Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния.

Π’ тСкстС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° timer3.c ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹ΠΉ сигнал с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ частотой ΠΈ коэффициСнтом заполнСния. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π’Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ сигнал.

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с тСкстом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ timer3.c, вспомним, ΠΊΠ°ΠΊ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрывания ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π‘ΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π’Π°Ρˆ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит опрСдСлСния макросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π’Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ассСмблСра Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°ΠΏΡ€Π΅Ρ‚Π° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π² систСмС (см. Ρ€Π°Π·Π΄Π΅Π» 4.12):

#define CLI() asm("cli\n"); //Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ маскируСмыС прСрывания

#define SEI() asm("sei\n"); //Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ маскируСмыС прСрывания

Π’Π°ΠΊΠΆΠ΅ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ спСцифика записи ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрывания частично опрСдСляСтся Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ компилятора. Π’ соотвСтствии с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, Π² тСкстах ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ компилятор ICC12 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ImageΠ‘raft.

/*----------------------------------------------------------------------*/

/* filename: timer3.c                                                   */

/* МAIN PROGRAМ: Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ */

/* Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΠ΅Π°Π½Π΄Ρ€Π° с использованиСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈ подсистСмы прСрывания     */

/* Π‘ΠΈΠ³Π½Π°Π» формируСтся Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 2 Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° (IC2)                         */

/*----------------------------------------------------------------------*/

/*ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹*/

#include <912b32.h>


/*ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ*/

void initialize(void); /*функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ*/

void toggle_isr(void); /*ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания toggle_isr*/


//объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обслуТивания прСрывания

#pragma interrupt_handler toggle_isr

//инициализация Π²Π΅ΠΊΡ‚ΠΎΡ€Π° прСрывания

#pragma abs_address: 0xF7EA

void (*Timer_Channel_2_interrupt_vector[]) () = {toggle_isr};

#pragma end_abs address


/*Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅*/

int с;


void main(void) {

 Ρ = 100;

 initialize(); /*инициализация подсистСмы Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

 TMSK1 = 0Ρ…04; /*Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ прСрывания ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π² ΠΊΠ°Π½Π°Π»Π΅ 2*/

 TFLG1 = 0xFF; /*сброс всСх Ρ„Π»Π°Π³ΠΎΠ² событий ΠΎΡ‚ ΠΊΠ°Π½Π°Π»ΠΎΠ²*/

 CLI(); /*Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ прСрывания*/

 while(1) {

  /*ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ прСрывания*/

  ;

 }

}


/*-------------------------------------------------------------*/

/* Ѐункция initialize Π·Π°Π΄Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ установки модуля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

/*-------------------------------------------------------------*/

void initialize(void) {

 TMSK2 = 0x02; /*Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ коэффициСнт дСлСния 4*/

 TIOS = 0Ρ…04; /*ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π» 2 Π² Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния*/

 TSCR = 0Ρ…80; /*Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

 TCTL2 = 0Ρ…10; /*Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ формироватСля уровня */

               /*ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅*/

}


/*----------------------------------------------*/

/* Ѐункция toggle_isr – ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания */

/*----------------------------------------------*/

void toggle_isr(void) {

 TFLG1 = 0xFF;

 /*сброс всСх Ρ„Π»Π°Π³ΠΎΠ² событий ΠΎΡ‚ ΠΊΠ°Π½Π°Π»ΠΎΠ²*/

 Π’Π‘2 = TC2 + c;

 /*Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ сравнСния Π² рСгистр Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»Π°*/

 c = c + 100;

 /*Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ c*/

}

/*-----------------------------------------------*/

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ toggle_isr. Π“Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½ΠΎΠ³ΠΎ сигнала ΠΎΠ½Π° обСспСчиваСт?


Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ timer4.c ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности подсистСмы Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сравнСния, обслуТиваСмой ΠΏΠΎ прСрываниям. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сразу Π΄Π²Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ частотами ΠΈ коэффициСнтами заполнСния. НСтрудно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ число ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹Ρ… сигналов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ.

/*------------------------------------------------------------------------*/

/*filename: timer4.c                                                      */

/*МAIN PROGRAМ: Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ*/

/* с использованиСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈ Π΄Π²ΡƒΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ² подсистСмы прСрывания          */

/* Π‘ΠΈΠ³Π½Π°Π»Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π°Ρ… 2 ΠΈ 3 Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.                          */

/*------------------------------------------------------------------------*/


/*ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹*/

#include <912b32.h>


/*ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ*/

void initialize(void); /*функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ*/

void toggle1_isr(void); /*ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания toggle1_isr*/

void toggle2_isr(void); /*ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания toggle2_isr*/


//объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обслуТивания прСрывания

#pragma interrupt_handler toggle1_isr

#pragma interrupt_handler toggle2_isr

//инициализация Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² прСрывания

#pragma abs_address: 0xF7E8

void (*Timer_Channel_3_interrupt_vector[]) () = {toggle2_isr};

void (*Timer_Channel_2_interrupt_vector[]) () = {toggle1_isr};

#pragma end_abs address


void main(void) {

 initialize(); /*инициализация подсистСмы Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

 TMSK1 = 0Ρ…0C; /*Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ прСрывания ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π² ΠΊΠ°Π½Π°Π»Π°Ρ… 2 ΠΈ 3*/

 TFLG1 = 0xFF; /*сброс всСх Ρ„Π»Π°Π³ΠΎΠ² событий ΠΎΡ‚ ΠΊΠ°Π½Π°Π»ΠΎΠ²*/

 CLI(); /*Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ прСрывания*/

 while(l) {

  /*ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ прСрывания*/

 ;

 }

}


/*-------------------------------------------------------------*/

/* Ѐункция initialize Π·Π°Π΄Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ установки модуля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

/*-------------------------------------------------------------*/

void initialize(void) {

 TMSK2 = 0x02; /*Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ коэффициСнт дСлСния 4*/

 TIOS = 0Ρ…0C; /*ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π»Ρ‹ 2 ΠΈ 3 Π² Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ*/

              /*сравнСния*/

 TSCR = 0Ρ…80; /*Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°*/

 TCTL2 = 0Ρ…50; /*Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ формироватСля уровня */

               /*ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΎΠ±ΠΎΠΈΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ²*/

}


/*------------------------------------------------------------------*/

/* Ѐункция toggle1_isr ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π² ΠΊΠ°Π½Π°Π»Π΅ 2*/

/*------------------------------------------------------------------*/

void toggle1_isr(void) {

 TFLG1 = 0x04; /*сброс Ρ„Π»Π°Π³Π° события ΠΊΠ°Π½Π°Π»Π° 2*/

 Π’Π‘2 += 9091; /*Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ сравнСния Π² рСгистр Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»Π°*/

}

/*------------------------------------------------------------------*/


/*-------------------------------------------------------------------*/

/* Ѐункция toggle2_isr ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрывания ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Π² ΠΊΠ°Π½Π°Π»Π΅ 3 */

/*-------------------------------------------------------------------*/

void toggle2_isr(void) {

 TFLG1 = 0x08; /*сброс Ρ„Π»Π°Π³Π° события ΠΊΠ°Π½Π°Π»Π° 3*/

 Π’Π‘2 += 4854; /*Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ сравнСния Π² рСгистр Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»Π°*/

}

/*-------------------------------------------------------------------*/

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ toggle1_isr ΠΈ toggle2_isr. Π“Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΊΠΈΡ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚?

4.14.5. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ событий

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ событий ΠΈΠ»ΠΈ аккумулятор ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² (Pulse Accumulator) β€” это подсистСма модуля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, которая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для подсчСта ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ². Основной элСмСнт счСтчика событий β€” 16 разрядный счСтчик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…:

β€’ Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Π²Π½Π΅ΡˆΠ½ΠΈΡ… событий. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ счСтчик PACNT подсчитываСт число событий, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСтСктируСтся Π΅Π³ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ срСдствам Π½Π° Π²Ρ…ΠΎΠ΄Π΅ PAI. Π’ΠΈΠΏ события (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ„Ρ€ΠΎΠ½Ρ‚ сигнала) опрСдСляСтся посрСдством ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… установок.

β€’ Π‘Ρ‚Ρ€ΠΎΠ±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ счСтчик PACNT тактируСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°ΠΌΠΈ с частотой fBUS/64, Π° сигналы Π½Π° Π²Ρ…ΠΎΠ΄Π΅ PAI Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚ счСт.

Π Π΅ΠΆΠΈΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ счСтчика

Бтруктурная схСма подсистСмы счСтчика событий прСдставлСна Π½Π° рис. 4.45. Π˜Π·ΡƒΡ‡ΠΈΠ² Π΅Π΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ счСтчик событий Π² качСствС Π²Ρ…ΠΎΠ΄Π° PAI, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ внСшниС ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ линию PT7 ΠΏΠΎΡ€Ρ‚Π° PORT T. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, обслуТиваниС подсистСмы счСтчика событий Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ функция Π»ΠΈΠ½ΠΈΠΈ 7 ΠΏΠΎΡ€Ρ‚Π° PORT T. Однако линия PT7 ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΊΠ°Π½Π°Π»Π° 7 подсистСмы Π·Π°Ρ…Π²Π°Ρ‚Π°/сравнСния модуля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. КакиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ установки Π² рСгистрах управлСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ линию PT7 ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄ PAI счСтчика событий?