Cavr Против Avr Studio

7-12-2014, 21:50 От: admin Посмотрели: 610
Проблема такая есть исходник, если его компилировать в CAVR заливаю в МК все работает, если этот же код (ПОДМОРОФЕЧЕННЫЙ) я компилирую в AVR Studio, заливаю в МК не работает, так же как и в Proteus.



Под CAVR




Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/
#include <mega16.h>
#include <delay.h>
#define packet_MIN 7000
#define packet_MAX 9000
unsigned long p0_len,p0_prev_len;
int prev_state;

void PR_KEELOQ(void)
{

if(PINB.0==1) return;
//Приходим после приема всего бита, когда на PINB.0 ноль
if(((p0_prev_len+p0_len)>packet_MIN) && ((p0_prev_len+p0_len)<packet_MAX))
{
//Если импульс пожходит по длительности
PORTD.5=1;
delay_ms(100);
PORTD.5=0;
delay_ms(100);

return;
//Выходим из функции
}
}

void main(void)
{
TCNT1=0;//обнуляем регистр TCNT1

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Function: Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);

// Port D initialization
// Function: Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (1<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1B = (0<<CS12)|(1<<CS11)|(0<<CS10); //xtall/8
prev_state = PINB.0;
while (1)
{

if(PINB.0 != prev_state)
{
p0_len = TCNT1/2;
TCNT1 = 0;
prev_state = PINB.0;
PR_packet();
p0_prev_len = p0_len;

}
}
}





А вот он же, но под AVR Studio уже не фурычит!






#define F_CPU 16000000UL //16MHz
#include <avr/io.h>
#include <util/delay.h>
#define LED_H PORTD|=(1<<5)
#define LED_L PORTD&=(~(1<<5))
#define packet_MIN 7000
#define packet_MAX 9000
unsigned long p0_len,p0_prev_len;
int prev_state;

void PR_packet(void)
{
if((PINB&(1<<0))==1) return;
//Приходим после приема всего бита, когда на RX единица
if(((p0_prev_len+p0_len)>packet_MIN) && ((p0_prev_len+p0_len)<packet_MAX))
{
//Если импульс подходит по длительности


LED_H;
_delay_ms(100);
LED_L;
_delay_ms(100);

return;
//Выход
}
}

int main(void)
{
TCCR1B = (0<<CS12)|(1<<CS11)|(0<<CS10); //xtall/8
// Port B initialization
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);

// Port D initialization
// Function: Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (1<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
prev_state = PINB&(1<<0);
while (1)
{
if((PINB&(1<<0)) != prev_state)
{
p0_len = TCNT1/2;
TCNT1 = 0;
prev_state = PINB&(1<<0);
PR_packet();
p0_prev_len = p0_len;

}
}
}

Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Cavr Против Avr Studio все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба

Добавление комментария

Ваше имя:*
E-Mail:*
Текст:
Вопрос:
Решите уравнения x+2x=789
Ответ:*
Введите два слова, показанных на изображении:



Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031