Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> avr exb2313, поммогите пример переделать 
:(
    Опции темы
kostay
Дата 2.4.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Код

/*********************************************************************
Project : Kierroslukumittari
Version : 2.0    (AVR-mikro-ohjaimelle, muokattu vanhaa 51-veriota
Date    : 2.6.2004  (51-versio 13.10.1998)
Author  : Jari Koskinen
Company : Tietomyrsky Oy 
             
Comments :  20.5.05 Korjattu LED12 ja LED14 järjestys
            Muutettu ATtiny2313-piirille

Chip type       : ATtiny2313
Clock frequency : 4 MHz
*********************************************************************/

#include <tiny2313.h>

#define    TRUE  1
#define    FALSE 0

unsigned char  int0done;        // 0,5 s lippu
unsigned char  int0count;       // ulkoisten kesk. laskuri
unsigned char  int0count0;      // ed. laskurin 0,5 s summa
                                            

/********************************************************************/
/* init-funktio, joka tekee kaikki tarvittavat alustustoimenpiteet  */
/********************************************************************/

void init(void)
{
  CLKPR=0x80;                   // Crystal Oscillator division factor: 1
  CLKPR=0x00;

  PORTB = 0x00;                      // B-portin alustukset
  DDRB  = 0xFF;
  
  PORTD = 0x00;                 // D-portin alustukset
  DDRD  = 0x7B;
 
  TCCR1A = 0x00;                // Timer 1: n alustukset 
  TCCR1B = 0x0B;                // CK/64
  OCR1AH = 0xC3;           // C350H = 50000
  OCR1AL = 0x50;           // 50000 * 2 us = 0,1 s

  
  GIMSK = 0x40;                 // Sallitaan INT0-keskeyts
  MCUCR = 0x03;                 // keskeytys nousevasta reunasta
  
  TIMSK = 0x40;                      // Timer(s)/Counter(s) Interrupt(s) init
  
  ACSR  = 0x80;                      // Analog Comparator: Off 

  int0count0 = int0count = 0;
  int0done = FALSE;                                   
  
  #asm("sei")                        // Asetetaan globaali keskeytys bitti
}


/********************************************************************/
/* ulkoisten keskeytysten (INT0) laskuri                            */
/********************************************************************/
interrupt [EXT_INT0] void ext_int0_isr(void)
{
  int0count++;                      // lisää INT0-keskeytyslaskuria
}


/********************************************************************/
/* Timer 1:n (16-bit) keskeytyspalveluohjelma. Keskeytys tapahtuu   */
/* 0,5 s välein (4,032MHz/64=63 kHz, 1/63 kHZ * 31500 = 0,5s)          */
/********************************************************************/
interrupt [TIM1_COMPA] void timer1_comp_isr(void)
{
  int0count0 = int0count;       // siirrä keskeytysten määrä
  int0count = 0;                // nollaa keskeytyslaskuri
  int0done = TRUE;              // aseta lippu, tulos on siirretty
}


/********************************************************************/
/* Pääohjelma odottaa (0,5s) keskeytyspulssien laskennan tulosta    */
/* Kun tulos on selvillä, sytytetään tulosta vastaavat LEDit          */
/* suurimmasta alkaen                                                            */
/********************************************************************/
void main(void)
{   
  init();                            // tee tarvittavat alustukset

  while(1) 
  {
    if (int0done == TRUE)       // onko seuraava tulos valmiina?
    {                           // jos on, päivitetään näyttö
      int0done = FALSE;         // merkitse tulos käsitellyksi

      PORTB = 0x00;             // sammuta kaikki LEDit
      PORTD = 0x00;

      if (int0count0 > 117)
        PORTD.5 = 1;              // sytytä 14. LED
      if (int0count0 > 108)
        PORTD.4 = 1;            // sytytä 13. LED
      if (int0count0 > 100)
        PORTD.3 = 1;              // sytytä 12. LED
      if (int0count0 > 92)
        PORTD.6 = 1;            // sytytä 11. LED
      if (int0count0 > 83)
        PORTB.0 = 1;            // sytytä 10. LED
      if (int0count0 > 75)
        PORTB.1 = 1;            // sytytä  9. LED
      if (int0count0 > 67)
        PORTB.2 = 1;            // sytytä  8. LED
      if (int0count0 > 58)
        PORTB.3 = 1;            // sytytä  7. LED
      if (int0count0 > 50)
        PORTB.4 = 1;            // sytytä  6. LED
      if (int0count0 > 42)
        PORTB.5 = 1;              // sytytä  5. LED
      if (int0count0 > 33)
        PORTB.6 = 1;            // sytytä  4. LED
      if (int0count0 > 25)
        PORTB.7 = 1;            // sytytä  3. LED
      if (int0count0 > 17)
        PORTD.0 = 1;            // sytytä  2. LED
      if (int0count0 > 8)
        PORTD.1 = 1;              // sytytä  1. LED
    } 
    
  };
}


вобшем вот из етого надо сделать так 4тобы мигал ЛЕД 8 после каждых 15 прерываний примерно раз в секунду(тоесть в одну секунду 15 прерываний и зажигаем), 4астота ЦК 8Mhz
внешние прерывания надо вобше убрать, делать 4ерез timer1

Это сообщение отредактировал(а) kostay - 2.4.2008, 11:48
PM MAIL   Вверх
PILOT
Дата 9.4.2008, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



/*********************************************************************
Project : Kierroslukumittari
Version : 2.0    (AVR-mikro-ohjaimelle, muokattu vanhaa 51-veriota
Date    : 2.6.2004  (51-versio 13.10.1998)
Author  : Jari Koskinen
Company : Tietomyrsky Oy 
             
Comments :  20.5.05 Korjattu LED12 ja LED14 järjestys
            Muutettu ATtiny2313-piirille
Chip type       : ATtiny2313
Clock frequency : 4 MHz
*********************************************************************/
#include <tiny2313.h>
#define    TRUE  1
#define    FALSE 0
unsigned char  int0done;        // 0,5 s lippu
unsigned char  int0count;       // ulkoisten kesk. laskuri
unsigned char  int0count0;      // ed. laskurin 0,5 s summa
                                            
/********************************************************************/
/* init-funktio, joka tekee kaikki tarvittavat alustustoimenpiteet  */
/********************************************************************/
void init(void)
{
  CLKPR=0x80;                   // Crystal Oscillator division factor: 1
  CLKPR=0x00;
  PORTB = 0x00;                      // B-portin alustukset
  DDRB  = 0xFF;
  
  PORTD = 0x00;                 // D-portin alustukset
  DDRD  = 0x7B;
 
  TCCR1A = 0x00;                // Timer 1: n alustukset 
  TCCR1B = 0x0B;                // CK/64
  OCR1AH = 0xC3;           // C350H = 50000
  OCR1AL = 0x50;           // 50000 * 2 us = 0,1 s
  
  MCUCR = 0x03;                 // keskeytys nousevasta reunasta
  
  TIMSK = 0x40;                      // Timer(s)/Counter(s) Interrupt(s) init
  
  ACSR  = 0x80;                      // Analog Comparator: Off 
  int0count0 = int0count = 0;
  int0done = FALSE;                                   
  
  #asm("sei")                        // Asetetaan globaali keskeytys bitti
}

/********************************************************************/
/* Timer 1:n (16-bit) keskeytyspalveluohjelma. Keskeytys tapahtuu   */
/* 0,5 s välein (4,032MHz/64=63 kHz, 1/63 kHZ * 31500 = 0,5s)          */
/********************************************************************/
interrupt [TIM1_COMPA] void timer1_comp_isr(void)
{
  int0count0 = int0count;       // siirrä keskeytysten määrä
  int0count = 0;                // nollaa keskeytyslaskuri
  int0done = TRUE;              // aseta lippu, tulos on siirretty
}
/********************************************************************/
/* Pääohjelma odottaa (0,5s) keskeytyspulssien laskennan tulosta    */
/* Kun tulos on selvillä, sytytetään tulosta vastaavat LEDit          */
/* suurimmasta alkaen                                                            */
/********************************************************************/
void main(void)
{   
  init();                            // tee tarvittavat alustukset
  while(1) 
  {
    if (int0done == TRUE)       // onko seuraava tulos valmiina?
    {                           // jos on, päivitetään näyttö
      int0done = FALSE;         // merkitse tulos käsitellyksi
      PORTB = 0x00;             // sammuta kaikki LEDit
      PORTD = 0x00;
      if (int0count0 > 1234567) // тут число соответствующее делителю частоты и частоте вызова OCR
        PORTB.6 = 1;            // sytytä  4. LED
    } 
    
  };
}


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0379 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.