|
Здравствуйте
Есть такая проблема с контроллером RTU-188MX на котором установлен камень R8830
Написал программу для работы с COM1 обмен данными осуществляется по протоколу ModBus. Все работает прекрасно. Теперь решили сделать работу по прерываниям, но
прерывания не возникает вот программа:
#include #define COM2 1 int main() { _AX=0x104 // включение передатчика RS-485 COM1, на асме потому, что текст просто взят из //примера do Ждем готовность выходного регистра //инициализируем новый вектор _AX=(inport(MskRg))&0x200; //Разрешаем прерывание от COM1 _AX=0;// //Задаем наивысший приоритет do //Восстановление старого вектора void interrupt handler(_CPPARGS) Для проверки написал программу обработки прерывания от таймера все работаем вот программа #define _CPPARGS ... #define EOIRg 0xFF22 // End interrput // initialize the timer int set=inport(MskRg); _AX=0x4000; // reset the timer's count // set max. count for the timer do printf("End\n"); void interrupt handler(_CPPARGS) looping=0; } #define Msk1 0x03FE // maska off timer 1 #define EOIRg 0xFF22 // End interrput // initialize the timer int set=inport(MskRg); _AX=0x4000; // reset the timer's count // set max. count for the timer do printf("End\n"); void interrupt handler(_CPPARGS) looping=0; }
E-mail:
info@telesys.ru
#include
#include
#include
#define Set 0xff10
#define DEL 0xFF18
#define OUT 0xFF14
#define RdyIn 0x0100
#define RdyOut 0x6000
#define MskRg 0xff28
#define EOIRg 0xff22
#define Vector 0x0011
#define _CPPARGS ...
void interrupt handler(_CPPARGS);
void interrupt (*oldhandler)(_CPPARGS);
int GLOBAL=0;
int status;
int vect=inportb(MskRg)// Сохраняем начальное значение регистра
//------------------------------------------------------------------------------
//Настраиваем COM порт
_AX=0x61;
outportb(Set,0x61); // 8 Бит, без контроля четности
outportb(DEL,_AL); // Установка скорости 9600
asm mov dx,0FF7Ah
asm in ax,dx
asm and al,11101111b
asm out dx,al
{ status=(inportb(0xff12))&0x40;
}
while(status==0);
_AX=0xFA; //Как готов выдаем 0xFA
outportb(OUT,_AL);
//Отключаем com1 в случае применения AH=0x84; _AL=0; _DX=COM2; asm int 0x14
// com1 данные не принимает
asm mov dx, 0xFF7A
asm in ax, dx
asm or al, 0x8
asm out dx,al
printf("IN= %x\n",inport(0xff16)); // Производим чтение входного регистра
_AX=Vector;
outportb(0xff22,_AL); // На всякий случай сбрасываем запрос возможного
//прерывания
oldhandler=getvect(Vector);
setvect(Vector,handler);
outportb(MskRg,_AL);
outportb(0xff42,_AL);
{
} while(GLOBAL==0); //Бесконечный цикл
_AX=vect;
outportb(MskRg,_AL);
setvect(Vector,oldhandler);
return 0;
}
{
prinft(“BIT=%x\n”,inport(0xff16);
GLOBAL=1;
_AX=Vector;
outportb(0xff22,_AL);
}
#define Msk1 0x03FE // maska off timer 1
#define Vector 0x0012 // vector off timer1
#define MskRg 0xFF28 //Interrput control registor
#define TICON 0xFF5E
#define T1CNT 0xff58
#define TICMPA 0xFF5A
#define MaxCountA 0xF555
#define RdyOut 0x6000
void interrupt handler(_CPPARGS);
void interrupt(*oldhandler)(_CPPARGS);
int looping=1;
int main(void)
{
_AX=8;
outportb(0xff22,_AL);
// disable the timer, disable its interrupt
printf("set=%x\n",set);
outportb(TICON,_AL);
_AX=0;
outportb(T1CNT,_AL);
_AX=MaxCountA;
outportb(TICMPA,_AL);
oldhandler=getvect(Vector);
setvect(Vector,handler);
_AX=(inport(MskRg))&Msk1;
outportb(MskRg,_AL);
//enable Timer 1 and its interrupt
asm mov dx,0xFF5E //; Timer 1 Mode and Control Register
asm mov ax,0xE001
asm out dx,al
{
}
while(looping==1);
_AX=set;
outportb(MskRg,_AL);
setvect(Vector,oldhandler);
_AX=8;
outportb(0xff22,_AL);
return 0;
}
{
_AX=8;
outportb(0xff22,_AL);
#define Vector 0x0012 // vector off timer1
#define MskRg 0xFF28 //Interrput control registor
#define TICON 0xFF5E
#define T1CNT 0xff58
#define TICMPA 0xFF5A
#define MaxCountA 0xF555
#define RdyOut 0x6000
void interrupt handler(_CPPARGS);
void interrupt(*oldhandler)(_CPPARGS);
int looping=1;
int main(void)
{
_AX=8;
outportb(0xff22,_AL);
// disable the timer, disable its interrupt
printf("set=%x\n",set);
outportb(TICON,_AL);
_AX=0;
outportb(T1CNT,_AL);
_AX=MaxCountA;
outportb(TICMPA,_AL);
oldhandler=getvect(Vector);
setvect(Vector,handler);
_AX=(inport(MskRg))&Msk1;
outportb(MskRg,_AL);
//enable Timer 1 and its interrupt
asm mov dx,0xFF5E //; Timer 1 Mode and Control Register
asm mov ax,0xE001
asm out dx,al
{
}
while(looping==1);
_AX=set;
outportb(MskRg,_AL);
setvect(Vector,oldhandler);
_AX=8;
outportb(0xff22,_AL);
return 0;
}
{
_AX=8;
outportb(0xff22,_AL);
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание