Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
6 Мб
Скачать
☆

Функции языка Си.

Программы на языке Си могут иметь от 1 до нескольких функций. Функция это логически самостоятельная именованная часть программы, которой можно передавать параметры и которая может возвращать какое-то значение.

Формат определения функции:

Возвращаемый_тип имя_функции (тип параметр_1, … тип параметр_n)

описание данных;

оператор_1;

оператор_n;

return (выражение);

Если функция не возвращает ничего, то вместо возвращаемого типа пишется void, тогда в теле функции оператор return не нужен.

Если возвращаемый тип не указан, то по умолчанию int.

Имя функции любое, разрешённое в языке Си.

В ( ) список параметров или аргументов, через запятую, для каждого параметра указывается тип.

Если никакие параметры не передаются, то:

Имя_функции (void)

Имя_функции ( )

Пример функции:

Int mul (int a, int b)

return;

void output (float x)

printf (“Значение x=%f \n”, x);

int input ( ) //или int input (void)

int i;

puts (“Введите целое число:”);

scanf (“%d”, &i);

return i;

Функция должна быть определена раньше, чем она использовалась в программе.

Использование прототипов (он указывает тип возвращаемого функцией значение и типы параметров, используемой в функции).

Формат прототипа:

Возвращаемый_тип имя_функции (тип параметр_1, … тип параметр_n);

Int mul (int a, int b);

Void output (float x);

Int input ( );

#include <stdio.h>

int sqr (int x); // прототип

main ( )

int t=10;

printf (“Квадрат числа %d равен %d \n”, t, sqr (t));

return 0;

int sqr (int x) // определение функции

x=x*x;

return x;

x – формальный параметр.

t – фактический параметр.

Библиотечные функции.

Среда помощи – F1.

Заголовочные файлы - .h (в них содержатся прототипы функций):

Stdio.h – для функций ввода вывода.

Conio.h – для работы с клавиатурой.

Dos.h – функции ОС ДОС.

Math.h – математические функции.

Sound (unsigned int) – звук, частота которой задается параметром, Гц.

Nosaund ( ) – нет звука.

Delay (unsigned int) – задержка в мсек.

Int kbhit – возвращает 0, если не нажата ни одна из клавиш, если клавиша нажата – возвращает код этой клавиши.

/*sound.cpp*/

#include <stdio.h>

#include <dos.h> //прототипы функций

sound ( ), nosound ( ), delay

#include <conio.h> //прототип функции kbhit ( )

main ( )

unsigned freq;

printf (“Введите значение частоты (целое от 50 до 5000)”);

scanf (“%d”, &freq);

while (!kbhit ( ))

sound (freg);

delay (2000);

nosound ( );

delay (1000);

return (0);

Функции для работы с портами ввода вывода.

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.