motofan logo
       
> 

Программка для работы с LPT, "Управление светодиодом"

ws_MeGa
сообщение 7.6.2014, 11:57


Ветеран
*****

Группа: Пользователи
Сообщений: 500
Регистрация: 20.11.2008
Из: Новосибирск
Пользователь №: 186 604
Модель телефона: Moto X Play
Прошивка: 24.61.52

Рейтинг: 232



В общем есть задание, Написать программу для управление светодиодом(зажечь, потушить, мигать и всё похожее). Можно конечно найти программку уже готовую, точнее я уже нашёл и проверил что так сделать можно. Теперь осталось написать программу, хотя бы самую простейшую, развить её будет довольно просто. Всё что не пытался делать никак не получается :-( .

Язык: C++
Компилятор: MinGW/GCC (Dev-C++)

Пробовал по всякому разному.. например через <windows.h>, а точнее CreateFile->WriteFile, программа пишет что всё норм, записывает, но на выходах как было везде H напряжение, так и осталось.
Начал заново, взял исходный код с просторов интернета, немного переписал под gcc. Код компилируется, программа запускается, но вылетает с ошибкой.

Может кто может помочь?

Код
#include <iostream>
#include <windows.h>
//#include <stdbool.h>

void doLight(unsigned char s){
    asm(
        "movl $0x378,%%edx;"
        "movb %0,%%al;"
        "outb %%al,%%dx;"
        :
        :"r"(s)
//        :"edx","al"
    );
}

int main(){
    while(1){
        doLight(1);
        std::cout<<"Light On!"<<std::endl;
        system("pause");
        doLight(0);
        std::cout<<"Light Off!"<<std::endl;
        system("pause");
    }
    return 0;
}
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Fenja
сообщение 7.6.2014, 12:28


Авторитет
********

Группа: Модераторы
Сообщений: 5 564
Регистрация: 25.8.2008
Из: г. Пенза
Пользователь №: 179 851
Модель телефона: MotoRazr v3i
Прошивка: MotoUpdate v1.1

Рейтинг: 1756



http://www.kernelchip.ru/pcports/PS004.php тут читал?
Цитата
Хочу чтобы на выводе LPT порта под номером 3 (бит D1 регистра Data) была установлена логическая 1 (т.е. чтобы между ним и землей было +5 В) и на остальных выводах этого регистра (2,4-9 выводы порта) были нули. Пишем код:
int Address = 888;
int data = 2;
Out32( Address, data );

только функция импортируется из внешей библиотеки.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
ws_MeGa
сообщение 7.6.2014, 12:37


Ветеран
*****

Группа: Пользователи
Сообщений: 500
Регистрация: 20.11.2008
Из: Новосибирск
Пользователь №: 186 604
Модель телефона: Moto X Play
Прошивка: 24.61.52

Рейтинг: 232



Fenja,
она для MSVC++

нашёл исходный код этой библиотеки:
Код
Код
{Source code for inpout32.dll.
Enables 32-bit Visual Basic programs to do direct port I/O
(Inp and Out) under Windows 95.
To be compiled with Borland's Delphi 2.0.}


library inpout32;


uses SysUtils;


procedure Out32(PortAddress:smallint;Value:smallint);stdcall;export;
var
ByteValue:Byte;
begin
ByteValue:=Byte(Value);
asm
push dx
mov dx,PortAddress
mov al, ByteValue
out dx,al
pop dx
end;
end;

function Inp32(PortAddress:smallint):smallint;stdcall;export;
var
ByteValue:byte;
begin
asm
push dx
mov dx, PortAddress
in al,dx
mov ByteValue,al
pop dx
end;
Inp32:=smallint(ByteValue) and $00FF;
end;


Exports
Inp32,
Out32;
begin
end.
[close]


Взял необходимую ассемблерную вставку, переписал под gcc, сейчас вот ещё пару комманд увидел, проверю, посмотрим что будет...

Поменял данную часть:
Код
void doLight(unsigned char s){
    asm(
        "push %%edx;"
        "mov $0x378,%%edx;"
        "mov %0,%%al;"
        "out %%al,%%dx;"
        "pop %%edx;"
        :
        :"r"(s)
//        :"edx","al"
    );
}

Ничего не изменилось. :-(

В общем NT не разрешает вообще никак использовать порт по своему кроме как через winapi,
Буду завтра пробовать через giveio драйвер, а потом попробовать перенести на драйвер с поддержкой x64 архитектуры.

Сообщение отредактировал ws_MeGa - 7.6.2014, 14:46
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Программка для работы с LPT, "Управление светодиодом" · Компьютеры, операционные системы, софт и железо · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.4.2024, 8:35

Форум живёт: