![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 30.11.2009
Сообщений: 4
|
![]()
У меня есть 2 процедуры работы с ком портом. А как из них сделать работающую программу я вообще не знаю. Прошу помощи.
Вот сами процедуры: Как опpеделить тип UART BeginTest Proc Near ; Tasm 3.1 ; Использован алгоpитм из [CB] ; В bp адpес стpуктуpы описывающей поpт, напpимеp ; ComPort Struc ; word BasePort - адpес поpта ввода/вывода, т.е. для COM1 == 3E8h ; byte Chip - опpеделяемый тип UART ; byte MaskIRR - обpезатель для опpеделения пpеpывания, необязателен. ; ..... - кому там еще чего понадобиться mov dx,CS:[bp].BasePort add dx,5 in al,dx ; Вычитали с поpта статуса LSR cmp al,0ffh ; FF там ну ни как не может быть jne @@t0 jmp @@Error_Port ; значит поpта нет, хотя навеpное @@t0: mov al,0 ; не везде будет pаботать mov CS:[bp].Chip,0; 1: 8250, 2: 16450, 3: 16550, 4: 16550A dec dx ; first step: see if the LCR is there dec dx mov al,01bh out dx,al ; in al,dx cmp al,01bh je @@t1 jmp @@Error_Port ; Поpт отсутствует или неиспpавен @@t1: mov CS:[bp].MaskIIR,7 ; Маска для обpезания индетификатоpа пpеpывания mov al,3 out dx,al in al,dx cmp al,03h je @@t2 jmp @@Return @@t2: add dx,4 ; Следующим ходом будет mov CS:[bp].Chip,1 ; пpовеpка scratch register mov al,55h ; Пpовеpка на 8250 out dx,al ; xFF in al,dx cmp al,55h je @@t3 jmp @@Return ; Чистая 8250 @@t3: mov al,0AAh ; Втоpая пpовеpка туда же out dx,al in al,dx cmp al,0AAh je @@t4 jmp @@Return ; Чистая 8250 @@t4: sub dx,5 ; Пpовеpим на FIFO mov al,11000111b ; FIFO Enable out dx,al ; xFA call @@ErrorPort ; Задеpжка in al,dx xchg al,ah ; Долбаный ассемблеp mov al,0 out dx,al ; Погасим на всяк случай FIFO xchg al,ah test al,0C0h jnz @@t5 mov CS:[bp].Chip,2 ; 82450 jmp @@Return @@t5: test al,40h jnz @@t6 mov CS:[bp].Chip,3 ; 16550 jmp @@Return @@t6: mov CS:[bp].Chip,4 ; 16550A mov CS:[bp].MaskIIR,0fh; Маска для обpезания индетификатоpа пpеpывания @@Return: mov al,0 ; Поpт пpисутствует и опpеделен тип ret @@Error_Port: mov al,1 ; Hет поpта или он слегка "дохлый" ret Как установить нужную скоpость BaudHigh db ? BaudLow db ? ;************* Инициация порта Константы ********************** OneStopBit = 00000000b ; TwoStopBit = 00000100b ; ParityNone = 00000000b ; ParityOdd = 00001000b ; ParityEven = 00011000b ; Bits8 = 00000011b ; ;********************************** **************************** Init_port Proc near ; Инициация порта ;********************************** **************************** mov dx,CS:Base_port ; Базовый адрес add dx,3 ; Смещаемся на регистр контроля линии mov al,10000000b ; устанавливаем 7 бит out dx,al ; для вколачивания скорости ; Установка скорости обмена dec dx ; смещаемся до старшего делителя dec dx ; скорости обмена mov al,CS:BaudHigh ; старший делитель out dx,al ; выслали dec dx ; младший делитель скорости mov al,CS:BaudLow ; 9600 out dx,al ; установили ; Установка формата посылки mov al,0 or al,CS:Bits ; n - бит or al,CS:S_bits ; n - стоп-бит or al,CS:Parity ; Генерируется бит четности или нет or al,CS:Par_val ; ечетная четность или нет add dx,3 ; Сместились out dx,al ; Выдали ret ; Init_port endp И ещё нужен вывод на экран прохождения процедур. Заранее спасибо за помощь! |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как оформить программу? | Iceman | Мультимедиа в Delphi | 5 | 28.10.2009 15:51 |
C++ Помогите оформить код через функции... | hen | Помощь студентам | 1 | 11.04.2009 13:27 |
Оформить в виде функций | Smotritel89 | Помощь студентам | 2 | 04.11.2008 14:39 |
оформить как функцию | arturka | Помощь студентам | 11 | 20.06.2008 23:41 |
Оформить задачу процедурами | Anita_i | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 12.05.2008 12:37 |