Inportb – ввод байта из порта ввода.
Outportb – вывод байта.
Inport – ввод слова (два байта).
Outport – вывод слова.
Они находятся в dos.h.
Unsigned char inportb (unsigned port);
Port – адрес порта ввода (0 … 65535), эта функция возвращает без знаковое символьное значение.
Void outportb (unsigned port, unsigned char value);
Port – адрес порта вывода.
Value – значение, которое выводится.
#include <stdio.h>
#include <dos.h>
main ( )
{
unsigned char result;
unsigned port=0; //адрес порта
result = inport (port);
printf (“Принятый байт из порта %d равен0x%x \n”, port, result);
return 0;
}
#include <stdio.h>
#include <dos.h>
main ( )
{
char value =’C’
unsigned port = 0; //адрес порта
outport (port, Value);
printf (“Значение %С послано в порт %d \n”, value, port);
return 0:
}
В conio.h содержатся следующие функции:
Inp – ввод байта.
Outp – вывод байта.
Inpw – ввод слова.
Outw – вывод слова.
Пример: управление каналом звука.
SPEAKER – символ, имя канала звука.
Счетчик СТ2 обеспечивает частоту звука (работает в режиме генератора меандра).
По входу GATE можно разрешить (1) или запретить (0) счет.
Для работы вентиля (&) на D1 = 1.
Адрес СТ2 =42h.
Адрес PYC =43h/
Д2 … Д7 – менять нельзя!
/*speaker.cpp Программа генерации звука*/
#include <stdio.g>
#include <dos.h> // Прототипы функций inportb ( ), outportb ( ), delay ( )
#include <conio.h> //Прототип функции kbhit ( )
#define CTRL_PT 0x43 //регистр РУС
#define CTRL_WD 0x66 //управляющее слово для СТ2
#define N_LOW 0х26 //младший байт числа N
#define N_HIGH 0x11 //старший байт числа N
#define CT2 0x42 //адрес СТ2
#defineSYST_PRT 0x61 //адрес системного порта
main ( )
{
unsigned char ch1, ch2;
outportb (CTRL_PT, CTRL_WD); //Вывод УС с РУС
outportb (CT2, N_LOW); //загрузка младшего байта числа в СТ2
outportb (CT2, N_HIGH); //загрузка старшего байта
ch1=inportb (SYST_PRT);
ch2=ch1; //создание копии
ch2=ch2 | 0x3 //Установить D0=1,D1=1
while (!kbhit ( ))
{
outportb (SYST_PRT, ch2); //есть звук
delay (1000); //задержка на 1 секунду
ch2=ch2&0xfd; // 0xfd = 1111 1101
outportb (SYST_PRT, ch2); //звук нет
delay (1000);
ch2 = ch2|0x2; // установка D1=1
}
outport (SYST_PRT, ch1);
return 0;
}
Звук заканчивается когда нажимается любая клавиша.
Программа не меняет Д1 … Д7.
Для формирования звука надо сформировать меандр:
Счетчик должен работать в режиме 3 (генератор прямоугольных импульсов).
Fзв = 440 Гц (нота Ля первой октавы)
N=fвх/fзв = 1931800 / 440 = 4390,45 » 1126h
Формат управляющего слова: счетчик двоичный, загрузить два байта.
01110110b = B6h.