АпаратнотАУпрограмний комплекс GSM-МТМ

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



В»овом Initialize

// в файле конфигурации setup.cfg)

sendstr(initialize);

// ожидаем ответа модема

sleep(modemTimeout);

// считiваем и отображаем на экране ответное сообщение модема

if(r_count_pending() > 0) {

sread(buf, i = r_count_pending(), 0);

buf[i] = \0;

for(j = 0; j < i; j++) putch(buf[j]);

beep(1);return 0;

}else {

printf("\nНе вдалося проiнiцiалiзувати пристрiй. Перевiрте живлення\n\n");

return -1;

}

};

void main(){

FILE *fst;

char buf[90];

char *nbuf;

int i;

clrscr();//елементарний захист вiд копiювання

fst = fopen("C:\\DOS622\\MSYS16.SY_","r");

if (fst == NULL){

printf("\n\n\n\t\t\t\tКрадена версiя!!!\n\n");

printf("\tРозповсюдження програми проводиться за згодою авторiв проекту!!!\n");

sound(1000);

Csleep(3);

nosound();

getch();

return;

}

fclose(fst);

if (initializeDevice()<0) return;

printf("\nРобочий режим включений!!!");

isRing();

while (!kbhit()){

buf[0] = \0;

strcat(buf,waitRing());

if (strcmp(buf,"CITY")==0){

printf("\nДзвiнок з MTM");

phoneCity();

}

else if (strcmp(buf,"BREAK")==0){

printf("\nВихiд з програми...");

break;

} else{

printf("\nДзвiнок з GSM");

phoneMobiline();

}

};

Csleep(1);

closeline();

}

ДОДАТОК 2

Затверджено

Л.ФФ.57149-ТП 12 02-1

тАЬПРОГРАМНО-АПАРАТНИЙ КОМПЛЕКС MTM-GSMтАЭ

ПРОГРАМА ПОСЛРЖДОВНОРЗ ПЕРЕДАЧРЖ ДАНИХ

ТЕКСТ ПРОГРАМИ

Анотацiя

Опис програми Л.ФФ.57149-ТП 12 02-1 мiстить текст програми UART.ASM. Текст програми мiстить коментарi у важко зрозумiлих мiiях.

; UART.ASM

; модуль управления модемом i COM-портом нижнього рiвня

; ВизначаСФмо розмiри буферу приймача та передавача

R_SIZE EQU 2048; размiр буфера, що приймаСФ

S_SIZE EQU 500; размiр буфера, що передаСФ

; номери оброблювачiв переривань

INT_COM1 EQU 0Ch; COM1

INT_COM2 EQU 0Bh; COM2

INT_COM3 EQU 0Ch; COM3

INT_COM4 EQU 0Bh; COM4

; порти контролери переривань 8259

OCR EQU 20H; управляючий регiстр 8259

IMR EQU 21H; регiстр маски переривань 8259

; константи для управлiння контролером переривань

E_IRQ4 EQU 00010000B

D_IRQ4 EQU 11101111B

EOI4 EQU 01100100B

E_IRQ3 EQU 00001000B

D_IRQ3 EQU 11110111B

EOI3 EQU 01100011B

; область змiнних BIOS

; адреса базовых регiстрiв послiдовних асинхронних адаптерiв

BIOS_VAR SEGMENT AT 40H

rs232_base DW 4 DUP(?)

BIOS_VAR ENDS

;

; таблиця для кожного COM-порта

SP_TABSTRUC

RING DB ?; 1 - ring 0-no ring

port DB ?; 1, 2, 3 или 4

; параметри для цього рiвня переривань

int_com DB ?; номер переривання

e_irq DB ?

d_irq DB ?

eoi DB ?

; оброблювачi переривань для цього рiвня

int_hndlr DW ? ; змiщення оброблювача переривань

old_com_off DW ? ; змiщення попереднього оброблювача переривань

old_com_seg DW ? ; сегмент попереднього попереднього

; параметри COM-порта

installed DB ?; чи встановлений порт не компютерi? (1=да,0=нi)

baud_rate DW ?

device_conn DB ?; M(Модем), D(Нуль-модем)

parity DB ?; N(ONE), O(DD), E(VEN), S(PACE), M(ARK)

stop_bits DB ?; 1, 2

; лiчильники помилок

error_block DW 8 DUP(?)

; порти 8250

DATREG DW ?; регiстр даних

IER DW ?; регiстр управлiння перериваннями

IIR DW ?; регiстр iдентифiкацiСЧ преривання

LCR DW ?; регiстр керування лiнiСФю

MCR DW ?; регiстр керування модемом

LSR DW ?; регiстр стану лiнiСЧ

MSR DW ?; регiстр стану модему

DLL EQU DATREG; молодший регiстр дiльника

DLH EQU IER; старший регiстр дiльника

; покажчики буферiв FIFO

; iндекс першого символу в буферi передавача

start_s_data DW ?

; iндекс першого вiльного елемента буфера передавача

end_s_data DW ?

; iндекс першого символу в буферi приймача

start_r_data DW ?

; iндекс першого вiльного елемента буфера приймача

end_r_data DW ?

; лiчильники кiлькостi символiв у буферах

size_s_data DW ?; число символiв у буферi передавача

size_r_data DW ?; число символiв у буферi приймача

; буфера

send_buf DB S_SIZE DUP(?); буфер передавача

reciave_buf DB R_SIZE DUP(?); буфер приймача

SP_TAB ENDS

EFRAME EQU error_block+6; помилка синхронiзацiСЧ

EPARITY EQU error_block+8; помилка парностi

EOVFLOW EQU error_block; вiдбулося переповнення буфера

EDSR EQU error_block+12; модем не вiдповiв сигналом DSR

EOVRUN EQU error_block+2; помилка переповнення

EBREAK EQU error_block+4; виявлений запит на переривання

EXMIT EQU error_block+10; помилка при передачi

ECTS EQU error_block+14; модем не вiдповiв сигналом CTS

;

DGROUPGROUP _DATA

_DATA SEGMENT public DATA

DIV50 DW 2304

; поточний номер областi даних порту

CURRENT_AREA DW AREA1

; область даних для кожного порту

AREA1 SP_TAB ; область даних COM1

AREA2 SP_TAB ; область даних COM2

AREA3 SP_TAB ; область даних COM3

AREA4 SP_TAB ; область даних COM4

_DATA ENDS

COM_TEXT SEGMENT PARA public CODE

ASSUME cs:COM_TEXT,ds:DGROUP,es:NOTHING

public _select_port

public _save_com

public _install_com

public _restore_com

public _open_com

public _close_com

public _dtr_on

public _dtr_off

public _r_count

public _s_count

public _receive_com

public _send_com

public _break_com

public _com_errors

public _com_ring

; вибiр активного порту

; [bp+6] - номер порту

_select_port PROC FAR

push bp

mov bp, sp

mov ax, [bp+6];одержуСФмо в ax аргумент функцiСЧ

cmp al,1; установлений порт 1?

je port1; да

cmp al,2; установлений порт 2?

je port2; да

cmp al,3; установлений порт 3?

je port3; да

cmp al,4; установлений порт 4?

je port4; да

jmp set_carrent_area

port1:

mov ax,OFFSET DGROUP:AREA1; вибираСФмо область даних COM1

jmp short set_carrent_area

port2:

mov ax,OFFSET DGROUP:AREA2; вибираСФмо область даних COM2

jmp short set_carrent_area

port3:

mov ax,OFFSET DGROUP:AREA3; вибираСФмо область даних COM3

jmp short set_carrent_area

port4:

mov ax,OFFSET DGROUP:AREA4; вибираСФмо область даних COM4

set_carrent_area:

; записуСФмо в перемiнноСЧ CURRENT_AREA зсув

; поточноСЧ областi даних

mov CURRENT_AREA,ax

mov sp,bp

pop bp

ret

_select_port ENDP

;

; збереження поточного вектора COM переривання

_save_comPROC FAR

push bp

mov bp,sp

push si

; записуСФмо в si покаж