АпаратнотАУпрограмний комплекс 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 покаж