Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 11:04   #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

И ещё нужен вывод на экран прохождения процедур. Заранее спасибо за помощь!

Последний раз редактировалось Stilet; 30.11.2009 в 11:24.
Миклуха вне форума Ответить с цитированием
Старый 30.11.2009, 11:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как опpеделить тип UART
Насколько я понял он определен как байт:
Цитата:
byte Chip - опpеделяемый тип UART
Просто раскоментируй и вставь в секцию данных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2009, 11:32   #3
Миклуха
Новичок
Джуниор
 
Регистрация: 30.11.2009
Сообщений: 4
По умолчанию

Я в ассемблере совсем не алё(

вот что я делал:


Код:
start: jmp go
str1 db 'Определение типа UART'

BaudHigh db 9600
BaudLow db 4800
;************* Инициация порта Константы **********************
OneStopBit = 00000000b ;
TwoStopBit = 00000100b ;
ParityNone = 00000000b ;
ParityOdd = 00001000b ;
ParityEven = 00011000b ;
Bits8 = 00000011b ;
go:

; тут вышеуказанные процедуры
   
lea si,str1
mov al,[si]
mov var,al
mov al,09
lea dx,var
int 21h
call BeginTest
call Init_port
int 20h
end start.
Я эти процедуры нашёл, а не сам писал, мне из них надо склепать работающую прогу.

Последний раз редактировалось Stilet; 30.11.2009 в 12:04.
Миклуха вне форума Ответить с цитированием
Старый 30.11.2009, 12:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я тоже не спец по турбоасму, тем паче что неизвесно что программа должна делать...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2009, 12:08   #5
Миклуха
Новичок
Джуниор
 
Регистрация: 30.11.2009
Сообщений: 4
По умолчанию

Может есть у кого другая прога работы с ком портами? Срочно нужно.
Миклуха вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с ассемблером. Sanish Фриланс 1 05.06.2009 20:57
Связка с ассемблером Horknee Паскаль, Turbo Pascal, PascalABC.NET 6 07.05.2009 23:46
помогите с ассемблером GIO Помощь студентам 1 11.12.2007 13:12