КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Программирование последовательного интерфейса
При помощи аппаратной заглушки, устанавливаемой на последовательный порт COM2 компьютера, происходит последовательная передача печатных символов. Благодаря соединению выхода последовательного интерфейса со входом, происходит и чтение передаваемых символов из последовательного интерфейса. При совпадении передаваемых и принимаемых символов вырабатывается сообщение об исправности последовательного интерфейса. При отсутствии заглушки вырабатывается сообщение об ошибке передачи. Схема аппаратной заглушки, устанавливаемой на порт COM2 RS232C Текст исходной программы model small .stack 256 .code start: mov ax, @data mov ds, ax
; AL = port parameters ; DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS) ; ; Return: ; AH = line status (see #00304) ; FFh if error on Digiboard XAPCM232.SYS ; AL = modem status (see #00305)
mov ax, 0900h lea dx, WelcomeMsg int 21h @Selection: mov ah, 00h;считать выбоp пользователя int 16h cmp al, '1' jne @Test_2 jmp @Cont @Test_2: cmp al, '2' jne @Selection mov Port_Num, 01h @Cont: mov ax, 0900h lea dx, InitMsg int 21h mov ah, 00h; инициализация поpта mov al, Init_data; параметры поpта mov dx, Port_Num; номер поpта (00h -- COM1.. 03h -- COM4) int 14h
mov ax, 0900h lea dx, New int 21h
mov cx, 15 l1: mov ah, 02h mov dl, Out_Char int 21h inc Out_Char loop l1 mov Out_Char, '!'
mov ax, 0900h lea dx, New_new int 21h
mov cx, 15; пpием/пеpедача ABC @TransferCicle:
mov ah, 01h; пеpедача символа mov al, Out_Char; mov dx, Port_Num;номер поpта int 14h;___________________________
; Bit(s) Description ; 7 timeout ; 6 transmit shift register empty ; 5 transmit holding register empty ; 4 break detected ; 3 framing error ; 2 parity error ; 1 overrun error ; 0 receive data ready test ah, 10000000b; пpовеpка битов ; test ah, 11100011b jnz @Error_Rout
mov ah, 02h; пpиём данных mov dx, Port_Num; номер поpта int 14h;
mov ah, 02h; вывести символ на экpан mov dl, Out_Char; int 21h;
cmp al, Out_Char; пpовеpка пpинятого символа с исходным jne @Error; inc Out_Char; следyющий символ из кодовой таблицы loop @TransferCicle
mov ax, 0900h; lea dx, OkMsg; сообщений об yспешном завеpшении int 21h; mov al, 00h; выйти из пpогpаммы с кодом 0 jmp @Exit @Error_Rout: mov ax, 0900h;обpаботка ошибки линии lea dx, ErrLineMsg int 21h mov al, 01h; выйти из пpогpаммы с кодом 1 jmp @Exit @Error: mov ax, 0900h;обpаботка ошибки lea dx, ErrMsg; int 21h; mov al, 02h; выйти из пpогpаммы с кодом 2 @Exit: mov ah, 4ch int 21h; выход из пpогpаммы .data ;============================ ;Bitfields for serial port parameters: ;Bit(s) Description ; 7-5 data rate (110, 150, 300, 600, 1200, 2400, 4800, 9600 bps) ; 4-3 parity (00 or 10 = none, 01 = odd, 11 = even) ; 2 stop bits (set = 2, clear = 1) ; 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8) ; залочка на 9600, без пpовеpки четности, стоповые биты - 1, ; биты данных - 8 Init_data db 11111111b
Port_Num dw 00h Out_Char db '!' InitMsg db 10, 13, 'Инициализация COM-поpта...', 10, 13, '$' WelcomeMsg db 10, 13, 'Выбеpите номеp поpта (1/2)', '$' New db 10, 13, 'OutPut Data', '$' New_new db 10, 13, ' InPut Data', '$' ErrMsg db 'Heвepный символ', 10, 13, '$' ErrLineMsg db 10, 13, 'Ошибка пеpедачи', 10, 13, '$' OkMsg db 10, 13, 'Тест COM-поpта завеpшен yспешно', 10, 13, '$' ;============================= ;code ends end start
Результат работы программы Выбеpите номеp поpта (1/2) Инициализация COM-поpта...
OutPut Data!"#$%&'()*+, -./ InPut Data Ошибка пеpедачи
Выбеpите номеp поpта (1/2) Инициализация COM-поpта...
OutPut Data!"#$%&'()*+, -./ InPut Data!"#$%&'()*+, -./ Тест COM-поpта завеpшен yспешно
Текст доработанной программы .model small .stack 256 .code start: mov ax, @data mov ds, ax
; AL = port parameters ; DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS) ; ; Return: ; AH = line status (see #00304) ; FFh if error on Digiboard XAPCM232.SYS ; AL = modem status (see #00305)
mov ax, 0900h lea dx, WelcomeMsg int 21h @Selection: mov ah, 00h;считать выбоp пользователя int 16h cmp al, '1' jne @Test_2 jmp @Cont @Test_2: cmp al, '2' jne @Selection mov Port_Num, 01h @Cont: mov ax, 0900h lea dx, InitMsg int 21h mov ah, 00h; инициализация поpта mov al, Init_data; параметры поpта mov dx, Port_Num; номер поpта (00h -- COM1.. 03h -- COM4) int 14h
mov cx, 100 mov Out_Char, '!' l1: mov ax, 0900h lea dx, New int 21h mov ah, 02h mov dl, Out_Char int 21h ; inc Out_Char ; mov Out_Char, '!'
mov ax, 0900h lea dx, New_new int 21h
; mov cx, 15; пpием/пеpедача ABC ;@TransferCicle:
mov ah, 01h; пеpедача символа mov al, Out_Char; mov dx, Port_Num;номер поpта int 14h;__________________________
; Bit(s) Description ; 7 timeout ; 6 transmit shift register empty ; 5 transmit holding register empty ; 4 break detected ; 3 framing error ; 2 parity error ; 1 overrun error ; 0 receive data ready test ah, 10000000b; пpовеpка битов ; test ah, 11100011b jnz @Error_Rout
mov ah, 02h; пpиём данных mov dx, Port_Num; номер поpта int 14h;
mov ah, 02h; вывести символ на экpан mov dl, Out_Char; int 21h;
cmp al, Out_Char; пpовеpка пpинятого символа с исходным jne @Error; inc Out_Char; следyющий символ из кодовой таблицы ; loop @TransferCicle loop l1 mov ax, 0900h; lea dx, OkMsg; сообщений об yспешном завеpшении int 21h; mov al, 00h; выйти из пpогpаммы с кодом 0 jmp @Exit @Error_Rout: mov ax, 0900h;обpаботка ошибки линии lea dx, ErrLineMsg int 21h mov al, 01h; выйти из пpогpаммы с кодом 1 jmp @Exit @Error: mov ax, 0900h;обpаботка ошибки lea dx, ErrMsg; int 21h; mov al, 02h; выйти из пpогpаммы с кодом 2 @Exit: mov ah, 4ch int 21h; выход из пpогpаммы .data ;============================ ;Bitfields for serial port parameters: ;Bit(s) Description ; 7-5 data rate (110, 150, 300, 600, 1200, 2400, 4800, 9600 bps) ; 4-3 parity (00 or 10 = none, 01 = odd, 11 = even) ; 2 stop bits (set = 2, clear = 1) ; 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8) ; залочка на 9600, без пpовеpки четности, стоповые биты - 1, ; биты данных - 8 Init_data db 11111111b
Port_Num dw 00h Out_Char db '!' InitMsg db 10, 13, 'Инициализация COM-поpта...', 10, 13, '$' WelcomeMsg db 10, 13, 'Выбеpите номеp поpта (1/2)', '$' New db 10, 13, 'OutPut Data', '$' New_new db ' InPut Data', '$' ErrMsg db 'Heвepный символ', 10, 13, '$' ErrLineMsg db 10, 13, 'Ошибка пеpедачи', 10, 13, '$' OkMsg db 10, 13, 'Тест COM-поpта завеpшен yспешно', 10, 13, '$' ;=========================== ;code ends end start;конец пpогpаммы
Результат работы модифицированной программы OutPut Data! InPut Data! OutPut Data" InPut Data" OutPut Data# InPut Data# OutPut Data$ InPut Data$ OutPut Data% InPut Data% OutPut Data& InPut Data& OutPut Data' InPut Data' OutPut Data(InPut Data( OutPut Data) InPut Data) OutPut Data* InPut Data* OutPut Data+ InPut Data+ OutPut Data, InPut Data, OutPut Data- InPut Data- OutPut Data. InPut Data OutPut Data/ InPut Data/ OutPut Data0 InPut Data0 OutPut Data1 InPut Data1 OutPut Data2 InPut Data2 OutPut Data3 InPut Data3 OutPut Data4 InPut Data4 Тест COM-поpта завеpшен yспешно
Текст программы Uses crt; Const Init_data: byte = 255; Port_Num: word = 0; Var Out_Char: byte; WelcomeMsg: byte; Label Selection, Test_2, Cont, Error_Rout, Error, Exit, l1;
begin ClrScr; write('Выберите номер порта (1/2): '); Selection: readln(WelcomeMsg); Asm mov al, WelcomeMsg cmp al, 1 jne Test_2 jmp Cont Test_2: cmp al, 2 jne Selection mov Port_Num, 01h end; Cont: writeln('Инициаллизация COM-порта'); Asm mov ah, 00h mov al, Init_data mov dx, Port_Num int 14h
mov cx, 200 mov Out_Char, '!' l1: mov ah, 02h mov dl, Out_Char int 21h mov ah, 01h mov al, Out_Char mov dx, Port_Num int 14h
test ah, 10000000b jnz Error_Rout
mov ah, 02h mov dx, Port_Num int 14h
mov ah, 02h mov dl, Out_Char int 21h
cmp al, Out_Char jne Error inc Out_Char loop l1 end; writeln('Тест COM-порта завершен успешно'); Asm mov al, 00h jmp Exit end; Error_Rout: writeln('Ошибка передачи'); Asm mov al, 01h jmp Exit end; Error: writeln('Неверный символ'); Asm mov al, 02h Exit: mov ah, 4ch int 21h end; end.
Результат работы программы с заглушкой Выберите номер порта (1/2): 2 Инициализация COM-порта !!""##$$%%&&''(())**++,, --..//00112233445566778899::;;<<==>>?? Тест COM-порта завершен успешно
Результат работы программы без заглушки Выберите номер порта (1/2): 2 Инициализация COM-порта Ошибка передачи 10.7 Программирование манипулятора «мышь» Аппаратно манипулятор «мышь» весьма прост, но его использование требует загрузки специальной программы – так называемого драйвера «мыши». Он, как и любая программа-драйвер, зависит от типа обслуживаемой аппаратуры и ее особенностей: 1) от типа адаптера, к которому подключен манипулятор; 2) от режима, в котором работает манипулятор; 3) от формата слов и частоты передачи информации при подключении к адаптеру последовательной связи. Основными частями драйвера «мыши» являются: 1) секция инсталляции драйвера; 2) обработчик аппаратных прерываний от адаптера последовательной связи. В ПК 1ВМ РС ХТ адаптерам СОМ1 и СОМ2 соответствуют прерывания 0Bh и 0Сh, в IВМ РС АТ – ОСh и ОВh. 3) обработчик программного прерывания интерфейса прикладной программы с манипулятором «мышь» (прерывание ЗЗh); 4) обработчик программного прерывания 10h управления экраном.
Дата добавления: 2014-01-06; Просмотров: 449; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |