Уважаемые гуру программирования и схемотехники. СОМ-порт отказывается работать по прерываниям.Что не так?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено FullLamer 18 мая 2005 г. 12:25

#include
#include
#include
#include


#define INTR 0x0C // com1

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif


void interrupt (*oldhandler)(__CPPARGS);
void interrupt Com1(__CPPARGS);

unsigned char key,ch,ch1,ch2;
int port = 0x3f8;
int a = 0;

void main(void)
{
disable();

oldhandler = getvect(INTR);
setvect(INTR, Com1);

outportb(port+3, 0x80);
outportb(port+0, 0x06);
outportb(port+1, 0x00);
outportb(port+3, 0x13);

outportb(port+1, 0x01);
outportb(0x21,(inport(0x21)&0xEF));
enable();
while(key != 17)
{
if(kbhit()){key = getch();outport(port,key);} //передача

if(a == 1){printf("2 %i;5 %i;0 %i;\n",ch,ch1,ch2);a = 0;} //если было прерывание

if(inport(port+5)&0x01){ch2=inport(port+2);ch2=inport(port);printf(" %c %i",ch2,ch);} //опрос без прерываний
}

setvect(INTR,oldhandler);
}

void interrupt Com1(__CPPARGS)
{
ch2=inportb(port);
a = 1;
return;
}

Это работает - передает/принимает без прерываний, а хотелось бы по ним. Если есть у кого рабочий кусочек кода на Си киньте, пжалуйста...sbullov@yandex.ru

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru