CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Buffalo
Открыл глаза
Сообщения: 68
Зарегистрирован: Вс ноя 13, 2011 15:09:58

Re: CodeVision AVR в вопросах и ответах

Сообщение Buffalo »

Огромное спасибо.
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

А так же не обязательно полностью все ПРЕДЫДУЩЕЕ сообщение цитировать особенно, если оно содержит длинный код.
И кому адресовано спасибо?Я раньше ошибку указал :idea:
В поисках истины человек развивается.
Реклама
Аватара пользователя
skyzi
Родился
Сообщения: 17
Зарегистрирован: Пн июл 23, 2012 20:55:26
Откуда: Ростов-на-Дону
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение skyzi »

Доброе время суток, прощу прощения если не совсем в том разделе пишу.

Проведя несколько недель, в поисках исходников I2c slave для CodeVision'a (использования ATMega16 в качестве ведомого), и решил все таки попросить помощи, может кто реализовывал? А то примеры из других компиляторов по неопытности не могу использовать.
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

кв нормально принимает текст из других си компиляторов.единственное что необходимо поменять это объявление прерываний и заголовки.
но с этим легко справиться с помощью мастера кода.
сделайте так как будто вы сами пытаетесь создать эту программу выбираете нужные вам прерывания и ресурсы мк, а потом в получившийся код вставляете готовый пример.
так то несложно.
структура программ и объявления функций в кв такая же как и везде на языке си.

и для соответствия с некоторыми новыми типами данных из других компиляторов нужно в заголовок добавить вроде

Код: Выделить всё

#include <stdint.h>  
В поисках истины человек развивается.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
skyzi
Родился
Сообщения: 17
Зарегистрирован: Пн июл 23, 2012 20:55:26
Откуда: Ростов-на-Дону
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение skyzi »

vitalik_1984 писал(а):кв нормально принимает текст из других си компиляторов.единственное что необходимо поменять это объявление прерываний и заголовки.
но с этим легко справиться с помощью мастера кода.
сделайте так как будто вы сами пытаетесь создать эту программу выбираете нужные вам прерывания и ресурсы мк, а потом в получившийся код вставляете готовый пример.
так то несложно.
структура программ и объявления функций в кв такая же как и везде на языке си.

и для соответствия с некоторыми новыми типами данных из других компиляторов нужно в заголовок добавить вроде

Код: Выделить всё

#include <stdint.h>        


Спасибо, сейчас попробую, если остался еще тот вариант. А то уже выбился из сил бороться, а очень нужно=)

P.S. Вроде как сработало, все ошибки устранил кроме 1:

Код: Выделить всё

#pragma vector=TWI_vect

на эту строку ругается:
Error: C:\cvavreval\inc\TWI_slave.h(72), included from: I2c_Slave_test.c: bad interrupt vector
Error: I2c_Slave_test.c(286): bad interrupt vector
Warning: C:\cvavreval\inc\TWI_slave.h(72), included from: I2c_Slave_test.c: undefined symbol 'TWI_vect', assumed zero
Warning: I2c_Slave_test.c(286): undefined symbol 'TWI_vect', assumed zero
код для восприятия такой вышел:
Спойлер

Код: Выделить всё

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#include <UART_routines.h>

#include "TWI_slave.h"


static unsigned char TWI_buf[TWI_BUFFER_SIZE];     // Transceiver buffer. Set the size in the header file
static unsigned char TWI_msgSize = 0;             // Number of bytes to be transmitted.
static unsigned char TWI_state = TWI_NO_STATE;  // State byte. Default set to TWI_NO_STATE.

// Own TWI slave address
signed char TWI_slaveAddress = 0x10;



#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0
#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
 {
   rx_buffer[rx_wr_index++]=data;
   #if RX_BUFFER_SIZE == 256
   // special case for receiver buffer size=256
   if (++rx_counter == 0)
   {
   #else
   if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
    {
      rx_counter=0;
    #endif
      rx_buffer_overflow=1;
    }
   }
 }

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
 {
 char data;
 while (rx_counter==0);
 data=rx_buffer[rx_rd_index++];
  #if RX_BUFFER_SIZE != 256
 if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
  #endif
  #asm("cli")
 --rx_counter;
  #asm("sei")
 return data;
 }
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE <= 256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
 {
 if (tx_counter)
   {
   --tx_counter;
   UDR=tx_buffer[tx_rd_index++];
   #if TX_BUFFER_SIZE != 256
   if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   #endif
   }
 }

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
 {
 while (tx_counter == TX_BUFFER_SIZE);
 #asm("cli")
 if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
  {
   tx_buffer[tx_wr_index++]=c;
  #if TX_BUFFER_SIZE != 256
   if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
  #endif
   ++tx_counter;
  }
 else
   UDR=c;
 #asm("sei")
 }
#pragma used-
#endif





union TWI_statusReg_t TWI_statusReg = {0};           // TWI_statusReg is defined in TWI_Slave.h


void TWI_Slave_Initialise( unsigned char TWI_ownAddress )
{
  TWAR = TWI_ownAddress;                            // Set own TWI slave address. Accept TWI General Calls.
  TWDR = 0xFF;                                      // Default content = SDA released.
  TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins.
         (0<<TWIE)|(0<<TWINT)|                      // Disable TWI Interupt.
         (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Do not ACK on any requests, yet.
         (0<<TWWC);                                 //
}   
   

unsigned char TWI_Transceiver_Busy( void )
{
  return ( TWCR & (1<<TWIE) );                  // IF TWI interrupt is enabled then the Transceiver is busy
}


unsigned char TWI_Get_State_Info( void )
{
  while ( TWI_Transceiver_Busy() );             // Wait until TWI has completed the transmission.
  return ( TWI_state );                         // Return error state.
}


void TWI_Start_Transceiver_With_Data( unsigned char *msg, unsigned char msgSize )
{
  unsigned char temp;

  while ( TWI_Transceiver_Busy() );             // Wait until TWI is ready for next transmission.

  TWI_msgSize = msgSize;                        // Number of data to transmit.
  for ( temp = 0; temp < msgSize; temp++ )      // Copy data that may be transmitted if the TWI Master requests data.
    TWI_buf[ temp ] = msg[ temp ];
  TWI_statusReg.all = 0;     
  TWI_state         = TWI_NO_STATE ;
  TWCR = (1<<TWEN)|                             // TWI Interface enabled.
         (1<<TWIE)|(1<<TWINT)|                  // Enable TWI Interupt and clear the flag.
         (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|       // Prepare to ACK next time the Slave is addressed.
         (0<<TWWC);                             //
}


void TWI_Start_Transceiver( void )
{
  while ( TWI_Transceiver_Busy() );             // Wait until TWI is ready for next transmission.
  TWI_statusReg.all = 0;     
  TWI_state = TWI_NO_STATE ;
  TWCR = (1<<TWEN)|                             // TWI Interface enabled.
         (1<<TWIE)|(1<<TWINT)|                  // Enable TWI Interupt and clear the flag.
         (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|       // Prepare to ACK next time the Slave is addressed.
         (0<<TWWC);                             //
}

unsigned char TWI_Get_Data_From_Transceiver( unsigned char *msg, unsigned char msgSize )
{
  unsigned char i;

  while ( TWI_Transceiver_Busy() );             // Wait until TWI is ready for next transmission.

  if( TWI_statusReg.lastTransOK )               // Last transmission competed successfully.             
  {                                             
    for ( i=0; i<msgSize; i++ )                 // Copy data from Transceiver buffer.
    {
      msg[ i ] = TWI_buf[ i ];
    }
    TWI_statusReg.RxDataInBuf = FALSE;          // Slave Receive data has been read from buffer.
  }
  return( TWI_statusReg.lastTransOK );                                   
}

// ********** Interrupt Handlers ********** //

#pragma vector=TWI_vect


// Standard Input/Output functions
#include <stdio.h>
#include <stdint.h>

// Two Wire bus interrupt service routine
interrupt [TWI] void twi_isr(void)
{
static unsigned char TWI_bufPtr;
 
  switch (TWSR)
  {
    case TWI_STX_ADR_ACK:            // Own SLA+R has been received; ACK has been returned
  //    case TWI_STX_ADR_ACK_M_ARB_LOST: // Arbitration lost in SLA+R/W as Master; own SLA+R has been received; ACK has been returned
      TWI_bufPtr   = 0;                                 // Set buffer pointer to first data location
    case TWI_STX_DATA_ACK:           // Data byte in TWDR has been transmitted; ACK has been received
      TWDR = TWI_buf[TWI_bufPtr++];
      TWCR = (1<<TWEN)|                                 // TWI Interface enabled
             (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
             (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           //
             (0<<TWWC);                                 // 
      break;
    case TWI_STX_DATA_NACK:          // Data byte in TWDR has been transmitted; NACK has been received.
                                     // I.e. this could be the end of the transmission.
      if (TWI_bufPtr == TWI_msgSize) // Have we transceived all expected data?
      {
        TWI_statusReg.lastTransOK = TRUE;               // Set status bits to completed successfully.
      }else                          // Master has sent a NACK before all data where sent.
     
      {
        TWI_state = TWSR;                               // Store TWI State as errormessage.     
      }       
                                                        // Put TWI Transceiver in passive mode.
      TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins
             (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt
             (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Do not acknowledge on any new requests.
             (0<<TWWC);                                 //
      break;     
    case TWI_SRX_GEN_ACK:            // General call address has been received; ACK has been returned
  //    case TWI_SRX_GEN_ACK_M_ARB_LOST: // Arbitration lost in SLA+R/W as Master; General call address has been received; ACK has been returned
      TWI_statusReg.genAddressCall = TRUE;
    case TWI_SRX_ADR_ACK:            // Own SLA+W has been received ACK has been returned
  //    case TWI_SRX_ADR_ACK_M_ARB_LOST: // Arbitration lost in SLA+R/W as Master; own SLA+W has been received; ACK has been returned   
                                                        // Dont need to clear TWI_S_statusRegister.generalAddressCall due to that it is the default state.
      TWI_statusReg.RxDataInBuf = TRUE;     
      TWI_bufPtr   = 0;                                 // Set buffer pointer to first data location
                                                        // Reset the TWI Interupt to wait for a new event.
      TWCR = (1<<TWEN)|                                 // TWI Interface enabled
             (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
             (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Expect ACK on this transmission
             (0<<TWWC);                                 //     
      break;
    case TWI_SRX_ADR_DATA_ACK:       // Previously addressed with own SLA+W; data has been received; ACK has been returned
    case TWI_SRX_GEN_DATA_ACK:       // Previously addressed with general call; data has been received; ACK has been returned
      TWI_buf[TWI_bufPtr++]     = TWDR;
      TWI_statusReg.lastTransOK = TRUE;                 // Set flag transmission successfull.       
                                                        // Reset the TWI Interupt to wait for a new event.
      TWCR = (1<<TWEN)|                                 // TWI Interface enabled
             (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
             (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Send ACK after next reception
             (0<<TWWC);                                 // 
      break;
    case TWI_SRX_STOP_RESTART:       // A STOP condition or repeated START condition has been received while still addressed as Slave   
                                                        // Put TWI Transceiver in passive mode.
      TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins
             (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt
             (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Do not acknowledge on any new requests.
             (0<<TWWC);                                 //
      break;           
    case TWI_SRX_ADR_DATA_NACK:      // Previously addressed with own SLA+W; data has been received; NOT ACK has been returned
    case TWI_SRX_GEN_DATA_NACK:      // Previously addressed with general call; data has been received; NOT ACK has been returned
    case TWI_STX_DATA_ACK_LAST_BYTE: // Last data byte in TWDR has been transmitted (TWEA = “0”); ACK has been received
  //    case TWI_NO_STATE              // No relevant state information available; TWINT = “0”
    case TWI_BUS_ERROR:         // Bus error due to an illegal START or STOP condition
    default:     
      TWI_state = TWSR;                                 // Store TWI State as errormessage, operation also clears the Success bit.     
      TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins
             (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt
             (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Do not acknowledge on any new requests.
             (0<<TWWC);                                 //
  }


}
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

нужно посмотреть каким по счету должен быть этот вектор и прописать

Код: Выделить всё

#define TWI_vect 4  

в примере показано будто бы вектор под номером 4
в других компиляторах то это все прописано в заголовочных файлах, а кв это не нужно он сам все вектора обрабатывает без такого механизма описаний векторов, поэтому в нем нет таких определений.
В поисках истины человек развивается.
Реклама
Аватара пользователя
skyzi
Родился
Сообщения: 17
Зарегистрирован: Пн июл 23, 2012 20:55:26
Откуда: Ростов-на-Дону
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение skyzi »

Если я правильно понял, то Ветор строку можно убрать вообще?
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

О, сейчас поиском нашел строчку сначала она мимо глаз как скользнула.Думал она в другом файле.
там где она стоит она вообще не нужна.вроде и в других компиляторах она в другом месте используется.
А в КВ она совсем не нужна.
В поисках истины человек развивается.
Аватара пользователя
kama3er
Открыл глаза
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение kama3er »

Господа столкнулся с глюком
связка
do
{
.....
}
while (OK||ESCEP) // ждем нажатия одной из клавиш
НЕ РАБРТАЕТ!!
зато это работает
do
{
.....
}
while (OK) // ждем нажатия одной из клавиш

вроде бы синтаксис не нарушил уже голова кругом..
идейный борец за ден. знаки всего мира
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Если ESCEP не обращается в "0", то получим вечное do{}.
Docendo discimus
Аватара пользователя
kama3er
Открыл глаза
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение kama3er »

вообще да... задумывалось
do
{
.....
}

while (OK||ESCEP); // пока или OK или ESCEP не нажмут
крутимся внутри цикла, так вот по

while (OK): выпадает нормально.
а с двумя условиями не катит вот грешу на синтаксис , но вроде бы все правильно...
Вот и туплю
идейный борец за ден. знаки всего мира
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

можна ли в CodeVision делать вставки на асме ? если да, то как ?
Tell Me The Truth
Аватара пользователя
kama3er
Открыл глаза
Сообщения: 41
Зарегистрирован: Ср фев 15, 2012 17:30:44
Откуда: Украина Шостка
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение kama3er »

конечно
например
#asm
sts 0x0169, r26 ;
sts 0x016A, r26 ;
#endasm
идейный борец за ден. знаки всего мира
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

а если я, к примеру, желаю вю прогу написать на асме то мне поступать тоже таким же образом ?
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

вроде как можно ассемблерные модули подключать.зачем писать целиком на асме в программе предназначенной для компиляции языка си я не понимаю.Теоретически это возможно.но вот заголовочных файлов может не оказаться на нужный контроллер.Хотя я смотрел от кв в основном все на асме написано.
while (OK): выпадает нормально.
а с двумя условиями не катит вот грешу на синтаксис , но вроде бы все правильно...
Вот и туплю

смотря как кнопки подключены.если отпущенная кнопка это 1, то конечно у вас всегда будет 1
нужно &&
1&&0 =0
1||0=1- условие всегда выполняется.
только если две сразу зажмете то сработает.

и клавиша если что правильно пишется escape - побег, избавление 8)
В поисках истины человек развивается.
Аватара пользователя
skyzi
Родился
Сообщения: 17
Зарегистрирован: Пн июл 23, 2012 20:55:26
Откуда: Ростов-на-Дону
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение skyzi »

vitalik_1984 писал(а):О, сейчас поиском нашел строчку сначала она мимо глаз как скользнула.Думал она в другом файле.
там где она стоит она вообще не нужна.вроде и в других компиляторах она в другом месте используется.
А в КВ она совсем не нужна.

Убрал, скомпилировался но неработает :(
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

А что конкретно то не работает?И зачем было вообще в другой компилятор переносить?
Желательно бы ссылку на первоначальный проект, чтобы можно было тем кто понимает смотреть.
В поисках истины человек развивается.
Аватара пользователя
skyzi
Родился
Сообщения: 17
Зарегистрирован: Пн июл 23, 2012 20:55:26
Откуда: Ростов-на-Дону
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение skyzi »

vitalik_1984 писал(а):А что конкретно то не работает?И зачем было вообще в другой компилятор переносить?
Желательно бы ссылку на первоначальный проект, чтобы можно было тем кто понимает смотреть.

i2c не принимает нечего. первоначальный с 911 файлa с оф. сайта Атмел и вот тут еще естьhttp://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=584
Под другой компилятор,потому что тот не знаю и весь проект уже написан в CVAVR. не хватает только протокола
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

kama3er писал(а):

Код: Выделить всё

while (OK||ESCEP); // пока или OK или ESCEP не нажмут

Тогда пробуем

Код: Выделить всё

while (OK && ESCEP); // пока или OK или ESCEP не нажмут

(Хрен знает, что у вас там в программе понаписано. Советую наобум.)
Docendo discimus
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

kama3er писал(а):Господа столкнулся с глюком
связка
do
{
.....
}
while (OK||ESCEP) // ждем нажатия одной из клавиш
НЕ РАБРТАЕТ!!
зато это работает
do
{
.....
}
while (OK) // ждем нажатия одной из клавиш

вроде бы синтаксис не нарушил уже голова кругом..

Код: Выделить всё

do{
...
}
while(OK&&ESCEP);

Крутимся в цикле, пока оба условия истинны. Достаточно одному из них стать ложью - гаплык, общий логический результат - ложь. Вылетаем и летим дальше...
С уважением,
Виктор.
Ответить

Вернуться в «AVR»