Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Как работать с модулями DI32 и DO32 на ассемблере (если можно с примерами кода)

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Как работать с модулями DI32 и DO32 на ассемблере (если можно с примерами кода)
akak
unregistered
написано 13 Сентября 2006 17:55  ПравкаОтветитьIP

инициализации, считывания допустим с одного канала ввода и выдача на один канал вывода.На С примеры есть в доках, а на асме почему-то нету

KPY
Member

Сообщений: 325
Откуда: KZ
Регистрация: Май 2003

написано 14 Сентября 2006 07:56ИнфоПравкаОтветитьIP

Какие модули? Производитель, интерфейс или шина (ISA, PCI)... Драйвер для них не предусмотрен? Чтобы программировать на ассемблере, необходимо знать адреса регистров

akak
unregistered
написано 14 Сентября 2006 17:33  ПравкаОтветитьIP

производитель Fastwel, шина ISA

KPY
Member

Сообщений: 327
Откуда: KZ
Регистрация: Май 2003

написано 15 Сентября 2006 10:47ИнфоПравкаОтветитьIP

на "чистом" ассемблере писать особо не приходилось, да и никогда не было ограничений с сегментами данных и кода. Опрос плат выполнялся на асме встроенном (сначала в Паскаль потом Дельфи).
Привдеу пример работы с ISA-шной платой La2M.
код:

asm
// Инxициализация
mov edx,Base+1 //
mov al,0 // Младший канал 0
out dx,al //
mov edx,Base+2 //
mov al,15 // Колличество каналов 8
out dx,al //
mov edx,Base+9 // Управляющй регистр платы
mov al,8 // Запус преобразования от таймера
out dx,al //
mov edx,Base+7 //
mov al,22 {22} // Управляющий регистр таймера
out dx,al // старший байт
mov edx,Base+4 //
mov ax,250 // Счетчик
out dx,ax //
mov edx,Base+7 //
mov al,38 // Управляющий регистр таймера
out dx,al // младший байт
mov edx,Base+4 //
mov ax,50 // Счетчик
out dx,ax //
mov edx,Base+7 //
mov al,6 // Управляющий регистр таймера
out dx,al // старший байт
mov al,1
mov edx,Base+3
out dx,al
mov edx,Base
out dx,al

mov k1,0
mov k2,0
end;

Чтение данных по таймеру. Писал по молодости, так сказать треннировался, так что к оформлению особо не придирайтесь

procedure TForm1.Timer1Timer(Sender: TObject);
var
h,konec: integer;
TimTek:TTime;
ArrVolt : array [1..512] of real;
ArrKanal : array [1..512] of word;
ArrDan : array [1..512] of word;


begin
sm:=0;
sm1:=0;
AssignFile(f1,file1);
append(f1);
konec:=0;

asm

@n1: mov edx,Base+8 //
in al,dx //
and al,00000001b //
cmp al,0
je @end1
mov err,1
mov edx,Base
in ax,dx
mov ecx,0
mov ecx,eax
and ax,0000000000001111b
mov kanal,ax
inc kanal
mov eax,ecx
and ax,1111111111110000b
mov ecx,sm
mov [[offset ArrDan]+ecx],ax
mov ax,kanal
mov ecx,sm1
mov [[offset ArrKanal]+ecx],ax
add sm,2
add sm1,2
inc konec;
jmp @n1
@end1:
end;

if konec<>0 then
for h:=1 to konec do
begin
sh:=sh+1;
if (sh mod 16)=0 then
begin
sh:=0;
writeln(f1,'');
end;
kol:=kol+1;
write(f1,IntToStr(ArrKanal[h])+' '+intToStr(ArrDan[h])+' ');
end;


Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2019

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика