Цитата(Alex11 @ Sep 6 2005, 02:36)
Два дурацких вопроса: вектор изменен правильно при переносе на Mega64? - он там другой. И что там с битиком IVSEL в MCUCR?
Дык, ИАР. файлик определений цеплять не забываю по конкретный мк. да и ругаться он без него будет.
А битик не трогаю. прерывания по таймеру1 есть.... вектора не прыгнули
Вчера мучил мк и мозги. Вот к чему пришел:
#define ENABLE_BIT_DEFINITIONS
//#define IAR_SYSTEMS_ASM__
#include "inavr.h"
#include "iom64.h"
#include "stdio.h"
void main(void);
unsigned char temp = 0;
/*
#pragma vector=RESET_vect
__interrupt void my_RESET_vect()
{
}
*/
#pragma vector=USART1_RXC_vect
__interrupt void my_USART1_RXC_vect(void)
{
temp=UDR1;
UDR1='s';
__enable_interrupt();
}//#pragma vector=USART_RXC_vect
void main(void)
{
__disable_interrupt(); //CLI
__watchdog_reset(); //сброс дога
WDTCR |= (1<<WDCE) | (1<<WDE); // Write logical one to WDCE and WDE
WDTCR = 0x00;
// USART1
UCSR1A = 0x00; // U2X нет, MPCM нет
UCSR1B = 0x98; // RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8
// 1, 0, 0, 1, 1, 0, 0, 0
// включ. приемник и передач.
UCSR1C = 0x06; // xxx,UMSEL,UPM1:0:, USBS, UCSZ1:0, UCPOL
// 0, 0, 00, 0, 11, 0
// рез.,ас., без парит., 1стопа, 8 бит, полярн
UBRR1H = 0x00; //URSEL,UBRR11:8:
//
UBRR1L = 0x19; // 33 - 9600 bod
UDR1='k';
met:
//||||||||||||||||\\\\\\\\\\\\\\//
if (UCSR1A_Bit7) //& 0x80)//(1<<RXC1))
{
// temp=UDR1;
UDR1='z';
}//if (UCSRA & (1<<RXC))
/////////////|||||||||||||\\\\\\\\\\\\//
goto met;
}//void main(void)
сначала отсылает 'k' , а по приему 'z'. Значит прерывание не работает.
пробовал в сою прогу вставить по флагу - фиг вам.
OrCAD, Altium,IAR, AVR....