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

Часы Реального Временин у Adam 5510

 Ответить Ответить
Автор
Сообщение
andruxa Смотреть выпадающим
Новичок
Новичок


Присоединился: 22 Февраль 2013
Online Status: Offline
Публикации: 2
Свойства публикации Свойства публикации   Ответить, цитируя автора - andruxa Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Часы Реального Временин у Adam 5510
    Опубликовано: 28 Февраль 2013 03:41

Система программирования ultralogik32.50, fbd, контроллер adam 5510.

Есть ли у кого проеткы программ с использованием функций ЧРВ. Может какие то примеры и т.д.

Помогите пожалуйста!  

Наверх
Vel_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 01 Март 2013 06:02
для UL16 (универсальная для процессоров AMD & RDC) ADAM5510*


;--------------------------------------------------------------------
; можно подключить к проекту UltraLogik в виде функционального блока.
; (C) Copyright 2001 by Vel
;--------------------------------------------------------------------

public Get_Time

DGROUP    group DATA

DATA     segment byte public 'DATA'
        assume ds:DGROUP
DATA    ends

SYSTEM     segment byte public 'CODE'
           assume cs:SYSTEM, ds:DGROUP
;--------------------------------------------------------------------
; Подпрограмма Get_Time используется для получения времени BIOS (RTS)
; ОПИСАНИЕ:
; Выходные: выходные переменные типа Integer (время в двоичном формате)
; Час, Минута, Секунда
; 315 тактов
Get_Time proc pascal near
   arg hour:word, minute:word, second:word
;===============================
    Push bx            ; сохраняем регистр bx                        (11/15 тактов - 1 байт)
    Push dx            ; сохраняем регистр dx                        (11/15 тактов - 1 байт)
    Push cx            ; сохраняем регистр cx                        (11/15 тактов - 1 байт)

    mov ah, 2         ; Определить время RTC                        (4 такта - 2/3 байта)
    int 1Ah            ; СН = час (в формате BCD)                    (51/71 такт - 1 байт)
                    ; CL = минута (в формате BCD)
                    ; DH = секунда (в формате BCD)
                    ; DL = 01h, если действует летнее время, 00h, если нет
                    ; CF = 0, если время прочитано
                    ; CF = 1, если часы не работают или попытка чтения пришлась на момент обновления
;    jmp short $+2

    xor ax, ax                ; обнуляем регистр ax                (3 такта - 2 байта)
    mov al, ch                ; получаем час                        (2 такта - 2 байта)
; bcd1bin - преобразование из "BCD" в "двоичный"
    mov bl, al                ; сохраняем                            (2 такта - 2 байта)
    and bl, 00001111b         ; И -0Fh (обнуляем "0" биты)        (4 такта - 3/4 байта)
    and al, 11110000b         ; И -0F0h (обнуляем "0" биты)        (4 такта - 3/4 байта)
    shr al, 4                ; Лог. сдвиг вправо (деление на 16) (8 такта - 2 байта)
    mov bh, al                ; сохраняем                            (2 такта - 2 байта)
    shl al, 3                ; Лог. сдвиг влево (* на 16)        (6 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 9)        (3 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 10)        (3 такта - 2 байта)
    add al, bl                ; сложение                            (3 такта - 2 байта)
    mov bx, hour            ; получить адрес переменной            (12+EA тактов - 2/4 байт)
    mov word ptr [bx], ax    ; записать значение в переменную    (13+EA тактов - 2/4 байт)

    xor ax, ax                ; обнуляем регистр ax                (3 такта - 2 байта)
    mov al, cl                ; получаем минута                    (2 такта - 2 байта)
; bcd1bin - преобразование из "BCD" в "двоичный"
    mov bl, al                ; сохраняем                            (2 такта - 2 байта)
    and bl, 00001111b         ; И -0Fh (обнуляем "0" биты)        (4 такта - 3/4 байта)
    and al, 11110000b         ; И -0F0h (обнуляем "0" биты)        (4 такта - 3/4 байта)
    shr al, 4                ; Лог. сдвиг вправо (деление на 16) (8 такта - 2 байта)
    mov bh, al                ; сохраняем                            (2 такта - 2 байта)
    shl al, 3                ; Лог. сдвиг влево (* на 16)        (6 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 9)        (3 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 10)        (3 такта - 2 байта)
    add al, bl                ; сложение                            (3 такта - 2 байта)
    mov bx, minute            ; получить адрес переменной
    mov word ptr [bx], ax    ; записать значение в переменную

    xor ax, ax                ; обнуляем регистр ax                (3 такта - 2 байта)
    mov al, dh                ; получаем секунда                    (2 такта - 2 байта)
; bcd1bin - преобразование из "BCD" в "двоичный"
    mov bl, al                ; сохраняем                            (2 такта - 2 байта)
    and bl, 00001111b         ; И -0Fh (обнуляем "0" биты)        (4 такта - 3/4 байта)
    and al, 11110000b         ; И -0F0h (обнуляем "0" биты)        (4 такта - 3/4 байта)
    shr al, 4                ; Лог. сдвиг вправо (деление на 16) (8 такта - 2 байта)
    mov bh, al                ; сохраняем                            (2 такта - 2 байта)
    shl al, 3                ; Лог. сдвиг влево (* на 16)        (6 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 9)        (3 такта - 2 байта)
    add al, bh                ; сложение (уже умножили на 10)        (3 такта - 2 байта)
    add al, bl                ; сложение                            (3 такта - 2 байта)
    mov bx, second            ; получить адрес переменной
    mov word ptr [bx], ax    ; записать значение в переменную

;===============================
    pop cx        ; востанавливаем регистр cx                        (8 тактов - 1 байт)
    pop dx        ; востанавливаем регистр dx                        (8 тактов - 1 байт)
    pop bx        ; востанавливаем регистр bx                        (8 тактов - 1 байт)

       ret  ;все остальное додумает ассемблер (T320+)
Get_Time endp

SYSTEM ends
end

//////////////////////////////////////////////////////////////////////////////////////////
BAT файл.................................................................................................

TASM.EXE имя.asm
Pause
Vel
Наверх
 Ответить Ответить

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

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