Часы Реального Временин у Adam 5510 |
Ответить |
Автор | |
Новичок Присоединился: 22 Февраль 2013 Online Status: Offline Публикации: 2 |
Опубликовано: 28 Февраль 2013 03:41 |
Система программирования ultralogik32.50, fbd, контроллер adam 5510. Есть ли у кого проеткы программ с использованием функций ЧРВ. Может какие то примеры и т.д. Помогите пожалуйста! |
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
для 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
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |