рефераты рефераты
Главная страница > Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе  
Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Микропроцессорная система управления, предназначенная для использования на лесопильном заводе

; сохраняет DE

B2D            LD     B, 8             ;

B2D1                   SLA  C                 ; CY¬C (получаем последний бит операнда)

LD     A, L            ; удвоение HL с учетом переноса CY

ADC L                 ; по правилам десятичной арифметики

DAA                    ;

LD     L, A            ;

LD     A, H            ;

ADC H                ;

DAA                    ;

LD     H, A            ;

DJNZ          B2D1                   ; конец цикла

RET                     ;

Подпрограмма B2D_F переводит дробное число в формате 0.L в 2-10 код из трех тетрад в формате 0.ABC (учитываются три цифры после запятой). Регистры A, B, C содержат в конце каждый по одной десятичной цифре. Перевод происходит так. Число 0.L умножается на 10, результат в паре H.L. Его целая часть (H) и будет первой цифрой A результата. Затем H обнуляется, полученная дробь 0.L снова умножается на 10 и т.д.

Для быстрого умножения на 10 сделана отдельная подпрограмма MUL10, умножающая пару HL (где H=0) и получающая результат в той же HL. Она использует равенство:

10×HL=2×HL+8×HL, а умножения на 2 и на 8 делаются с помощью команды ADD HL, HL.

Листинг 15: подпрограммы B2D_F и MUL10

; – – – перевод байта (дробного) в 2-10 код

; операнд C – число с фиксированной перед старшим разрядом точкой, результат в ABC

; изменяются все регистры

B2D_F        LD     H, 0            ;

CALL         MUL10                ; получить в H первую цифру

LD     A, H            ; скопировать ее в A

LD     H, 0            ; и обнулить H

CALL         MUL10                ;

LD     B, H            ; вторую цифру – в регистр B

LD     H, 0            ;

CALL         MUL10                ; третью – в C

LD     C, H            ;

RET

; – – – умножение на 10

; операнд в HL (имеет значение только L) и результат в HL

; сохраняет A, BC

MUL10                ADD HL, HL                 ; HL×10=HL×2+HL×8

LD     D, H            ;

LD     E, L             ;

ADD HL, HL       ;

ADD HL, HL       ;

ADD HL, DE       ;

RET                     ;

Преобразование двоичный®семисегментный код

Это преобразование с помощью таблицы перекодировки уже встречалось в тестовой программе ОЗУ. Сейчас оформим ее как отдельную подпрограмму (в тесте ОЗУ нельзя вызывать подпрограммы, т.к. команда вызова CALL использует стек). Операнд подпрограммы – двоично-десятичная цифра в регистре A (0..9, старшая тетрада нулевая).

Листинг 16: подпрограмма D27

; – – – перевод байта в семисегментный код

; операнд (0..9) и результат в A

; сохраняет BC, DE

D27            LD     H, #07                  ;

LD     L, A            ;

LD     A, (HL)                 ;

RET                     ;


Обработчики прерываний

Всего их шесть – по числу прерываний. Обработчик обязательно должен сохранить в стеке все изменяемые им регистры и в конце восстановить их. Выход из обработчика выполняется не стандартным RET, а командой RETI.

Обработчик IRQ0 (начало измерений)

Функция обработчика – обнулить таймеры T1 и T2, а также специальную ячейку памяти D_NUM (2 байта). Эта ячейка инкрементируется всякий раз после чтения напряжения Ud с датчика диаметра. По приходу запроса IRQ0, когда приходит новое бревно, она должна быть обнулена.

Листинг 17: обработчик запроса IRQ0

          ; – – – обнулить T1, T2, D_NUM

          IR0_H                  PUSH         BC              ;

                                      PUSH         AF              ;

                                      LD     BC, 0          ;

                                      LD     (T1), BC     ; обнулить T1

                                      LD     (T2), BC     ; обнулить T2

                                      LD     (D_NUM), BC     ; обнулить D_NUM

                                      POP  AF              ;

                                      POP  BC              ;

                                      RETI                    ;

Обработчик IRQ2 (информация с АЦП готова)

Функция обработчика – если бревно сейчас под пластиной датчика (можно судить, прочтя порт фотоэлементов с адресом 0B), считать два байта напряжения из портов 00 (младший) и 01 (старший). Записать их в массив напряжений, под который отведена область памяти начиная с адреса 0100Н до конца ОЗУ (всего 2К). Перед записью проверить, не заполнен ли этот массив. Инкрементировать ячейку D_NUM, содержащую число элементов этого массива.

Листинг 18: обработчик запроса IRQ2

; – – – считать и обработать байт с АЦП

IR2_H                  PUSH         BC              ;

PUSH         HL              ;

PUSH         AF              ;

IN      A, (#0B)     ;

AND #02             ; наложить маску 000000010

JR     Z, IR2_H1  ; если второй бит нулевой, то выход

LD     HL, #1000  ; рассчитать адрес очередного элемента массива

LD     C, (D_NUM)        ; считать D_NUM

LD     B, (D_NUM+1)    ;

SLA  C                 ; умножить его на 2

RL     B                 ;

ADD HL, BC       ; теперь адрес в HL

LD     A, H            ;

CP     #18             ;

JR     NC, IR2_H1         ; если вышли за пределы массива, то выход

IN      A, (#00)      ; считать первый байт с АЦП

LD     (HL), A       ; и отправить его в память

INC   HL              ;

IN      A, (#01)      ; считать второй

LD     (HL), A       ; отправить

INC   BC              ; увеличить переменную D_NUM на единицу

LD     (D_NUM), BC     ;

IR2_H1       POP  AF     ;

POP  HL              ;

POP  BC              ;

RETI                    ;

Обработчик IRQ3 (от генератора 16 Гц)

Функция обработчика – произвести инкремент часов реального времени и условный инкремент таймеров. Часы реального времени – это 4 байта в памяти:

TIME                   1/16 секунды (0..15);

TIME+1      секунды (0..59);

TIME+2      минуты (0..59);

TIME+3      часы (0..23);

Все величины хранятся в двоичном формате.

Таймерам T1 и T2 отведено по 2 байта с начальными адресами T1 и T2. Условия, при которых они инкрементируются, были приведены в п. 3.4.

Листинг 19: обработчик запроса IRQ3

; – – – инкремент часов реального времени и условный инкремент таймеров

IR3_H         PUSH         BC              ;

                   PUSH         HL              ;

                   PUSH         AF              ;

                   ; часы реального времени

                   LD     HL, TIME   ;

                   INC   (HL)            ; инкремент 1/16 секунд

                   LD     A, (HL)                 ;

                   CP     16               ; проверить на достижение максимума                       JR          C, IR3_H1  ; условный выход из подпрограммы

                   LD     (HL), 0                 ; иначе обнулить 1/16 секунды и продолжить

                   INC   HL              ;

                   LD     B, 2             ; инкремент секунд и минут делается в цикле

                   IR3_H2                INC   (HL)            ;

                   LD     A, (HL)                 ;

                   CP     60               ;

                   JR     C, IR3_H1  ;

                   LD     (HL), 0                 ;

                   INC   HL              ;

                   DJNZ          IR3_H2                ; конец цикла

                   INC   (HL)            ; инкремент часов

                   LD     A, (HL)                 ;

                   CP     24               ;

                   JR     C, IR3_H1  ;

                   XOR A                ; если счетчик часов=24

                   LD     (HL), A                 ; то обнулить все 4 байта часов реального времени

                   DEC  HL              ;

                   LD     (HL), A                 ;

                   DEC  HL              ;

                   LD     (HL), A                 ;

                   DEC  HL              ;

                   LD     (HL), A                 ;

                   ; таймеры

                   IR3_H1                IN      A, (#0B)               ; загрузить слово статуса фотоэлементов

                   AND 1                 ;

                   JR     Z, IR3_H3  ; если не установлен 1-й бит, то выход

                   LD     HL, T2                 ; иначе инкремент Т2

                   INC   (HL)            ;

                   JR     NZ, IR3_H4         ; если инкремент не обнулил

                   ; первый байт Т2, то идем дальше

                   INC   HL              ; иначе увеличить на 1 и второй байт

                   INC   (HL)            ;

                   IR3_H4                IN      A, (#0B)               ;

                   AND 2                 ; проверить 2-й бит статуса ФЭЛ

                   JR     Z, IR3_H3  ; если он не установлен, то выход

                   LD     HL, T1                 ; иначе инкремент Т1

                   INC   (HL)            ;

                   JR     NZ, IR3_H3         ;

                   INC   HL              ;

                   INC   (HL)            ;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

рефераты
Новости