Адресное пространство |
Компонент |
Назначение адреса |
Адрес в шестнадцатеричной системе счисления |
Внешняя памяти программ |
ROM |
Чтение ячейки ROM |
0000H-1FFFH |
Внешняя память данных |
NVRAM |
Чтение/запись ячейки NVRAM |
0000H-0800H |
ADC |
Запись номера канала для выдачи результата преобразования по данному каналу |
8000H-8002H |
|
DAC |
Запись цифрового эквивалента Y4 |
8020H |
|
IOP |
Обмен байтом данных |
8040H |
|
Запись управляющего слова, чтение байта состояния |
8041H |
;Объявления констант, используемых в программе
TIMEUNIT EQU 56 ;значение, загружаемое в таймер-счетчик для получения
;периода 0.5 мс
;это значение зависит от тактовой частоты, которая в ;данном случае составляет 4.8 МГц
Q0 EQU 80H ;константа Q0=0.5 в виде числа с запятой,
;зафиксированой перед старшим разрядом
A0 EQU 2CH ;константа A0=0.17 в виде числа с запятой,
;зафиксированой перед старшим разрядом
;константа A1 вводится непосредственно при вычислениях (модуль PROCESS_ANALOG_2)
TM1 EQU 50
TM2 EQU 60
TM3 EQU 120
;Объявления символических адресов для переменных, расположенных во
;внутренней памяти данных. При этом, используется 0 банк РОН и дно стека
;находится на устанавливаемом после сброса адресе, т.е. 07H
K EQU 20H ;уставка
SYS_CLOCK_LOW EQU 21H ;ячейка, содержащая текущее значение "системных ;часов". Часы обнуляются в начале каждого цикла ;управления и используются для определения момента ;окончания цикла
SYS_CLOCK_HIGH EQU 22H
TIMER EQU 23H ;ячейка, используемая для формирования задержек
;обработчик прерывания таймера-счетчика 1 ;инкрементирует ее каждые 0.5мс ;независимо от тактовой частоты.
Q4 EQU 24H ;числовой эквивалент Y4
INPUT_MODE EQU 25H ;признак ввода уставки
PRE_K EQU 26H ;промежуточное значение при вводе уставки с клавиатуры
;1 байт на 16-ричную цифру
COUNT EQU 28H ; число
введенных цифр уставки ;обработчик прерывания
таймера-счетчика 1 ;инкрементирует ее каждые 0.5мс независимо от тактовой
;частоты.
ajmp START
;таблица переходов
org 0003H
ajmp IE0_HANDLER
org 000BH
ajmp TF0_HANDLER
org 001BH
ajmp TF1_HANDLER
org 0040H
;собственно головной модуль
START:
acall INIT
CONTROL_CYCLE:
acall PROCESS_BOOLEAN
acall PROCESS_ANALOG_1
acall PROCESS_ANALOG_2
WAIT_500ms:
mov R0,SYS_CLOCK_LOW
mov R1,SYS_CLOCK_HIGH
cjne R0,#0E8H,WAIT_500ms
cjne R1,#03,WAIT_500ms
mov SYS_CLOCK_LOW,#0
mov SYS_CLOCK_HIGH,#0
ajmp CONTROL_CYCLE
CONVERTOR_TABLE:
DB 11111100B,01100000B,11011010B,11110010B
DB 01100110B,10110110B,10111110B,11100000B
DB 11111110B,11110110B,11101110B,00111110B
DB 10011100B,01111010B,10011110B,10001110B
При инициализации МПС необходимо установить режимы работы программируемых интерфейсных БИС. В разрабатываемой МПС инициализации требует единственная БИС: контроллер клавиатуры и дисплея IOP КР580ВВ79. Кроме того, необходимо инициализировать встроенный контроллер прерываний CPU. Необходимо также присвоить начальные значения переменным.
ККД работает в режиме одиночного нажатия клавиши; сканирование в режиме инверсного дешифратора на 4 выхода. Поскольку в качестве внешнего синхросигнала используется ALE, следующий с частотой fBQ/6=4.8*106/6=800кГц, для получения внутреннего опорного сигнала с частотой 100кГц необходимо загрузить делитель 8. Ниже приведен текст программного модуля INIT:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.