реклама на сайте
подробности

 
 
> Где с флагами косяк?, Посмотрите код плс?
Коляй
сообщение Nov 17 2006, 18:51
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 148
Регистрация: 27-04-06
Пользователь №: 16 558



Ребята, где то накосячил с флагами. Подскажите кто знает? Программа простая, только выводами дёргать. В ИАРе 4,12 в симуляторе нормально работает, регистр Р-15 меняется на 0 и 1. Прерывание нормально идет, сначала одна половина, потом другая. В Протеусе не идёт и на железе не идёт, точнее идёт с одного вывода, а хотелось бы по-очереди.
Если просто под "переключатель" отдельно переменную выделить, то идёт. Но хотелось бы один бит пользовать для этой цели.

Код
#include<io2313.h>
#include<avr_macros.h>
#include<iomacro.h>
#include<intrinsics.h>

unsigned int pol;
unsigned char sampl, interval;

__regvar __no_init char flags @15;
#define set_polar     flags|=(1<<0)
#define clr_polar     flags&=~(1<<0)


void pausa (unsigned long int p)
{
  while (p>0)
    p--;
}
#pragma vector=TIMER1_COMP1_vect
__interrupt void MyInterrupt (void)
{
  if(flags & (1 << 0))
  {
  PORTD_Bit2=0;
  pausa(0x10);
  PORTD_Bit0=0;pausa(pol);PORTD_Bit0=1;
  pausa(0x15);
  PORTD_Bit2;
  pausa(interval);
  PORTD_Bit3=0;pausa(sampl);PORTD_Bit3=1;
  clr_polar;
  }
  else
  {
   PORTD_Bit2=0;pausa(0x10);
   PORTD_Bit1=0;pausa(pol);PORTD_Bit1=1;
   pausa(0x15);
   PORTD_Bit2=1;
   pausa(interval);
   PORTD_Bit4=0;pausa(sampl);PORTD_Bit4=1;
   set_polar;
  }
  return;
}
int main( void )
{
  PORTD=0xFF;
  DDRD=0xFF;
  OCR1=0x6420;
  TIMSK=0x40;
  TCCR1B=0x09;
  
  __enable_interrupt();  
  while(1)
  {
    
  }

}


Сообщение отредактировал Коляй - Nov 17 2006, 18:54
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016