Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Работа с COM-портом в CPU188

 Ответить Ответить Страница  <12
Автор
Сообщение
Vel_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Работа с COM-портом в CPU188
    Опубликовано: 19 Май 2006 05:19

На asm настройка СОМ прорта и установка обработчика прерывания:


Ini_COM1    proc near
        push    bx              ; Сохранить bx в стек
        mov    ax, 350Ch         ; АН = 35h, AL = номер прерывания (0Ch)
                          ; (INT 0Ch) - прерывание последовательного порта СОМ1
                          ; вызывается, если порт СОМ1 получил данные.
        int    21h               ; функция DOS: определить адрес старого обработчика
                          ; (ES:BX)
        mov    word ptr Star_INT_0Ch, bx   ; В bx смещение
        mov    word ptr Star_INT_0Ch+2, es ; В es сегментный адресс
        lea    dx, New_INT_0Ch   ; Вычисление эффективного адреса New_INT_0Ch
        mov    ax, 250Ch         ; АН = 25h, AL = номер прерывания (0Ch)
                              ; сегментный адрес в DS
                              ; смещение в DX
        int    21h               ; функция DOS: установить новый обработчик прерывания (0Ch)
       
;;;;;;{запрещение прерывания}
        ...........................

;;;;;;{сбрасываем регистр данных}
        mov   dx, 3F8h          ; чтением из порта 03F8h
        in    al, dx              ; Считать данные из порта 3F8h в al
        jmp   short $+2

;;;;;;{сбрасываем регистр состояния линии}
     mov   dx, 3FDh          ; чтением из порта 3FDh
        in    al, dx                ; Считать данные из порта 3FDh в al
                          ; 03FDh (для чтения) - регистр состояния линии
        jmp   short $+2

;;;;;;{сбрасываем регистр состояния модема}
     mov    dx, 3FEh          ; чтением из порта 3FDh
        in    al, dx                ;
        jmp    short $+2

;;;;{режим ввода делителя}
        mov    dx, 3FBh
        mov    al, 80h              ; 7: бит DLAB : 1 = порты 3F8h и 3F9h в режиме ввода делителя
        out    dx, al                ;
     jmp    short $+2

;;;;;;(Запись в Регистр управления модемом)
        mov    al, 00001100b ; (0Ch) Запись в Регистр управления модемом
                              ; 0: 1 = установить выход DTR
                              ; 1: 1 = установить выход RTS
                              ; 2: 1 = установить OUT1 (не используется)
                              ; 3: 1 = установить OUT2 (разрешить прерывания от RS-232)
     mov    dx, 3FCh
     out    dx, al
     jmp    short $+2

;;;;;;{младший байт делителя}
     pop    bx              ;
        mov    dx, 3F8h
        mov al, bl          ; Stred_COM1 задаем делитель скорости 
        out    dx, al              ;
        jmp    short $+2
       
;;;;;;{старший байт делителя}
        mov    dx, 3F9h
        mov    al, 0
        out    dx, al              ;
        jmp    short $+2

;;;;;;{буферизация FIFO}(отключаем)
    mov al, 00000000b   ; бит 0   : Разрешение использования буферизации при приеме и предаче
                        ; бит 1   : Сброс приемного буфера FIFO
                        ; бит 2   : Сброс буфера FIFO передатчика
                        ; биты 6-7: Установка значения  числа символов в приемном буфере FIFO для
                        ;           инициирования прерывания (FIFO Trigger Level)
                        ;           00 - 1 бит
    mov    dx, 3FAh
    out    dx, al
    jmp    short $+2
   
;;;;;;{режим работы}
        mov    dx, 3FBh
        mov    al, 00000011b ; Режим работы
                              ; 0-1: число битов данных : 11 = 8 бит
                              ; 2  : число стоп-битов   : 0 = 1 стоп бит
                              ; 3-4: тип четности       : X0 = нет
                              ; 5  : постоянная четность: 0 = отмена постоянной четности
                              ; 6  :                    : 1 = имитировать обрыв линии
                              ; 7  : бит DLAB           : 0 = порты 3F8h и 3F9h в обычном режиме
        out    dx, al   
        jmp    short $+2

;;;;;;(Запись в Регистр управления прерываниями)
        mov    al, 00000101b    ; (5) Запись в Регистр управления прерываниями
                              ; 0: прерывание по приему символа
                              ; 1: прерывание по завершению передачи символа
                              ; 2: прерывание по обрыву линии или ошибке в линии
                              ; 3: прерывание по изменению состояния модема (любой из линий CTS, DSR, RI и DCD)
        mov    dx, 3F9h
        out    dx, al
        jmp    short $+2

        retn
Ini_COM1    endp

 

Vel
Наверх
evg123 Смотреть выпадающим
Новичок
Новичок


Присоединился: 05 Июль 2006
Категория: Belarus
Online Status: Offline
Публикации: 3
Свойства публикации Свойства публикации   Ответить, цитируя автора - evg123 Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Июль 2006 14:19

У меня есть работающая программка с ком-портом для CPU188 в турбо-С 3.0 У меня как раз проблема с первым таймером. В турбо-дебаггере ничего не могу с ним поделать. Если нужна программка, сообщите на мейл evg123@tut.by, я вам вышлю.

Евгений Мартынов evg123@tut.by
Наверх
 Ответить Ответить Страница  <12

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz