CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Огромное спасибо.
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А так же не обязательно полностью все ПРЕДЫДУЩЕЕ сообщение цитировать особенно, если оно содержит длинный код.
И кому адресовано спасибо?Я раньше ошибку указал
И кому адресовано спасибо?Я раньше ошибку указал
В поисках истины человек развивается.
- skyzi
- Родился
- Сообщения: 17
- Зарегистрирован: Пн июл 23, 2012 20:55:26
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Доброе время суток, прощу прощения если не совсем в том разделе пишу.
Проведя несколько недель, в поисках исходников I2c slave для CodeVision'a (использования ATMega16 в качестве ведомого), и решил все таки попросить помощи, может кто реализовывал? А то примеры из других компиляторов по неопытности не могу использовать.
Проведя несколько недель, в поисках исходников I2c slave для CodeVision'a (использования ATMega16 в качестве ведомого), и решил все таки попросить помощи, может кто реализовывал? А то примеры из других компиляторов по неопытности не могу использовать.
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
кв нормально принимает текст из других си компиляторов.единственное что необходимо поменять это объявление прерываний и заголовки.
но с этим легко справиться с помощью мастера кода.
сделайте так как будто вы сами пытаетесь создать эту программу выбираете нужные вам прерывания и ресурсы мк, а потом в получившийся код вставляете готовый пример.
так то несложно.
структура программ и объявления функций в кв такая же как и везде на языке си.
и для соответствия с некоторыми новыми типами данных из других компиляторов нужно в заголовок добавить вроде
но с этим легко справиться с помощью мастера кода.
сделайте так как будто вы сами пытаетесь создать эту программу выбираете нужные вам прерывания и ресурсы мк, а потом в получившийся код вставляете готовый пример.
так то несложно.
структура программ и объявления функций в кв такая же как и везде на языке си.
и для соответствия с некоторыми новыми типами данных из других компиляторов нужно в заголовок добавить вроде
Код: Выделить всё
#include <stdint.h> В поисках истины человек развивается.
- skyzi
- Родился
- Сообщения: 17
- Зарегистрирован: Пн июл 23, 2012 20:55:26
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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 в вопросах и ответах
нужно посмотреть каким по счету должен быть этот вектор и прописать
в примере показано будто бы вектор под номером 4
в других компиляторах то это все прописано в заголовочных файлах, а кв это не нужно он сам все вектора обрабатывает без такого механизма описаний векторов, поэтому в нем нет таких определений.
Код: Выделить всё
#define TWI_vect 4 в примере показано будто бы вектор под номером 4
в других компиляторах то это все прописано в заголовочных файлах, а кв это не нужно он сам все вектора обрабатывает без такого механизма описаний векторов, поэтому в нем нет таких определений.
В поисках истины человек развивается.
- skyzi
- Родился
- Сообщения: 17
- Зарегистрирован: Пн июл 23, 2012 20:55:26
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Если я правильно понял, то Ветор строку можно убрать вообще?
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
О, сейчас поиском нашел строчку сначала она мимо глаз как скользнула.Думал она в другом файле.
там где она стоит она вообще не нужна.вроде и в других компиляторах она в другом месте используется.
А в КВ она совсем не нужна.
там где она стоит она вообще не нужна.вроде и в других компиляторах она в другом месте используется.
А в КВ она совсем не нужна.
В поисках истины человек развивается.
- kama3er
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Ср фев 15, 2012 17:30:44
- Откуда: Украина Шостка
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Господа столкнулся с глюком
связка
do
{
.....
}
while (OK||ESCEP) // ждем нажатия одной из клавиш
НЕ РАБРТАЕТ!!
зато это работает
do
{
.....
}
while (OK) // ждем нажатия одной из клавиш
вроде бы синтаксис не нарушил уже голова кругом..
связка
do
{
.....
}
while (OK||ESCEP) // ждем нажатия одной из клавиш
НЕ РАБРТАЕТ!!
зато это работает
do
{
.....
}
while (OK) // ждем нажатия одной из клавиш
вроде бы синтаксис не нарушил уже голова кругом..
идейный борец за ден. знаки всего мира
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Если ESCEP не обращается в "0", то получим вечное do{}.
Docendo discimus
- kama3er
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Ср фев 15, 2012 17:30:44
- Откуда: Украина Шостка
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
вообще да... задумывалось
do
{
.....
}
while (OK||ESCEP); // пока или OK или ESCEP не нажмут
крутимся внутри цикла, так вот по
while (OK): выпадает нормально.
а с двумя условиями не катит вот грешу на синтаксис , но вроде бы все правильно...
Вот и туплю
do
{
.....
}
while (OK||ESCEP); // пока или OK или ESCEP не нажмут
крутимся внутри цикла, так вот по
while (OK): выпадает нормально.
а с двумя условиями не катит вот грешу на синтаксис , но вроде бы все правильно...
Вот и туплю
идейный борец за ден. знаки всего мира
Re: CodeVision AVR в вопросах и ответах
можна ли в CodeVision делать вставки на асме ? если да, то как ?
Tell Me The Truth
- kama3er
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Ср фев 15, 2012 17:30:44
- Откуда: Украина Шостка
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
конечно
например
#asm
sts 0x0169, r26 ;
sts 0x016A, r26 ;
#endasm
например
#asm
sts 0x0169, r26 ;
sts 0x016A, r26 ;
#endasm
идейный борец за ден. знаки всего мира
Re: CodeVision AVR в вопросах и ответах
а если я, к примеру, желаю вю прогу написать на асме то мне поступать тоже таким же образом ?
Tell Me The Truth
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
вроде как можно ассемблерные модули подключать.зачем писать целиком на асме в программе предназначенной для компиляции языка си я не понимаю.Теоретически это возможно.но вот заголовочных файлов может не оказаться на нужный контроллер.Хотя я смотрел от кв в основном все на асме написано.
смотря как кнопки подключены.если отпущенная кнопка это 1, то конечно у вас всегда будет 1
нужно &&
1&&0 =0
1||0=1- условие всегда выполняется.
только если две сразу зажмете то сработает.
и клавиша если что правильно пишется escape - побег, избавление
while (OK): выпадает нормально.
а с двумя условиями не катит вот грешу на синтаксис , но вроде бы все правильно...
Вот и туплю
смотря как кнопки подключены.если отпущенная кнопка это 1, то конечно у вас всегда будет 1
нужно &&
1&&0 =0
1||0=1- условие всегда выполняется.
только если две сразу зажмете то сработает.
и клавиша если что правильно пишется escape - побег, избавление
В поисках истины человек развивается.
- skyzi
- Родился
- Сообщения: 17
- Зарегистрирован: Пн июл 23, 2012 20:55:26
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):О, сейчас поиском нашел строчку сначала она мимо глаз как скользнула.Думал она в другом файле.
там где она стоит она вообще не нужна.вроде и в других компиляторах она в другом месте используется.
А в КВ она совсем не нужна.
Убрал, скомпилировался но неработает
"Урок, который я извлек и которому следую всю жизнь, состоял в том, что надо пытаться, и пытаться, и опять пытаться - но никогда не сдаваться!" © Ричард Бренсон
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А что конкретно то не работает?И зачем было вообще в другой компилятор переносить?
Желательно бы ссылку на первоначальный проект, чтобы можно было тем кто понимает смотреть.
Желательно бы ссылку на первоначальный проект, чтобы можно было тем кто понимает смотреть.
В поисках истины человек развивается.
- skyzi
- Родился
- Сообщения: 17
- Зарегистрирован: Пн июл 23, 2012 20:55:26
- Откуда: Ростов-на-Дону
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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 в вопросах и ответах
kama3er писал(а):Код: Выделить всё
while (OK||ESCEP); // пока или OK или ESCEP не нажмут
Тогда пробуем
Код: Выделить всё
while (OK && ESCEP); // пока или OK или ESCEP не нажмут(Хрен знает, что у вас там в программе понаписано. Советую наобум.)
Docendo discimus
Re: CodeVision AVR в вопросах и ответах
kama3er писал(а):Господа столкнулся с глюком
связка
do
{
.....
}
while (OK||ESCEP) // ждем нажатия одной из клавиш
НЕ РАБРТАЕТ!!
зато это работает
do
{
.....
}
while (OK) // ждем нажатия одной из клавиш
вроде бы синтаксис не нарушил уже голова кругом..
Код: Выделить всё
do{
...
}
while(OK&&ESCEP);
Крутимся в цикле, пока оба условия истинны. Достаточно одному из них стать ложью - гаплык, общий логический результат - ложь. Вылетаем и летим дальше...
С уважением,
Виктор.
Виктор.


