Inferno #03
22 ноября 2002

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 2.

<b>Диплом</b> - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 2.
          5. Практическая часть

      5.1. Особенности разработки
           программ для ОЭВМ

   Для  проектирования  на языке АССЕМБЛЕР
программного  обеспечения  для устройства,
основанного на  однокристальной ЭВМ, необ-
ходимо  знать архитектуру и систему команд
данной ОЭВМ.
   Микроконтроллер AT89C52 имеет множество
регистров, расположенных в адресном прост-
ранстве  ОЗУ  регистров  спецфункций и 111
машинных команд [1] форматом 1,2 или 3 ба-
йта  с различными  аргументами и способами
адресации, предназначенных для разнообраз-
ной обработки данных в этих регистрах,дру-
гих областях  памяти (внутреннее  ОЗУ дан-
ных, ПЗУ,внешнее ОЗУ),а также в двунаправ-
ленных внешних портах.
   ОЭВМ имеет:

 8 килобайт внутреннего ПЗУ;
 32 регистра  общего  назначения (РОН), 
разбитых на 4 блока по 8 регистро R0-R7; 
 128 определяемых  пользователем  прог- 
раммно-управляемых флагов; 
 набор  регистров  специальных  функций 
(SFR, Special Function Registers); 
 256 байт внутреннего ОЗУ данных, пере- 
секающегося  нижними 128 байтами с памятью 
регистров спецфункций. ОЗУ данных доступно 
только с помощью косвенной регистровой ад- 
ресации по регистрам R0,R1. 

   В ОМЭВМ предусмотрена возможность зада-
ния частоты внутреннего генератора с помо-
щью кварца,LC-цепочки или внешнего генера-
тора. Тактовая частота не должна превышать 
24 МГц. 

   Регистры  спецфункций с указанием адре-
сов  приведены  в таблице 5.1.1 (регистры,
допускающие  побитовую адресацию, помечены
звёздочкой):

                            Таблица 5.1.1 
┌───────────┬─────────────────────┬──────┐ 
│Обозначение│    Наименование     │ Адрес│ 
├───────────┼─────────────────────┼──────┤ 
│   *ACC    │ Аккумулятор         │ 0E0h │ 
├───────────┼─────────────────────┼──────┤ 
│    *B     │ Регистр B           │ 0F0h │ 
├───────────┼─────────────────────┼──────┤ 
│   *PSW    │ Регистр состояния   │      │ 
│           │  программы          │ 0D0h │ 
├───────────┼─────────────────────┼──────┤ 
│    SP     │ Указатель стека     │  81h │ 
├───────────┼─────────────────────┼──────┤ 
│    DPTR   │ Указатель данных.   │      │ 
│           │  2 байта:           │      │ 
│   - DPL   │ - младший байт      │  82h │ 
│   - DPH   │ - старший байт      │  83h │ 
├───────────┼─────────────────────┼──────┤ 
│    *P0    │ Порт 0              │  80h │ 
├───────────┼─────────────────────┼──────┤ 
│    *P1    │ Порт 1              │  90h │ 
├───────────┼─────────────────────┼──────┤ 
│    *P2    │ Порт 2              │ 0A0h │ 
├───────────┼─────────────────────┼──────┤ 
│    *P3    │ Порт 3              │ 0B0h │ 
├───────────┼─────────────────────┼──────┤ 
│    *IP    │ Регистр приоритетов │      │ 
│           │  прерываний         │ 0B8h │ 
├───────────┼─────────────────────┼──────┤ 
│    *IE    │ Регистр разрешения  │      │ 
│           │  прерываний         │ 0A8h │ 
├───────────┼─────────────────────┼──────┤ 
│    TMOD   │ Регистр режимов     │      │ 
│           │  таймера/счётчика   │  89h │ 
├───────────┼─────────────────────┼──────┤ 
│   *TCON   │ Регистр управления  │      │ 
│           │  таймера/счётчика   │  88h │ 
├───────────┼─────────────────────┼──────┤ 
│    TH0    │ Таймер/счётчик 0.   │      │ 
│           │  Старший байт       │  8Ch │ 
├───────────┼─────────────────────┼──────┤ 
│    TL0    │ Таймер/счётчик 0.   │      │ 
│           │  Младший байт       │  8Ah │ 
├───────────┼─────────────────────┼──────┤ 
│    TH1    │ Таймер/счётчик 1.   │      │ 
│           │  Старший байт       │  8Dh │ 
├───────────┼─────────────────────┼──────┤ 
│    TL1    │ Таймер/счётчик 1.   │      │ 
│           │  Младший байт       │  8Bh │ 
├───────────┼─────────────────────┼──────┤ 
│   *SCON   │ Управление после-   │      │ 
│           │  довательным портом │  98h │ 
├───────────┼─────────────────────┼──────┤ 
│    SBUF   │ Буфер последовате-  │      │ 
│           │  льного порта       │  99h │ 
├───────────┼─────────────────────┼──────┤ 
│    PCON   │ Управление          │      │ 
│           │  потреблением       │  87h │ 
└───────────┴─────────────────────┴──────┘ 

  Аккумулятор. ACC - регистр  аккумулято-
ра. Команды, предназначенные для  работы с
аккумулятором, используют  мнемонику  "A",
например, MOV A, P2. Мнемоника "ACC" испо-
льзуется,к примеру,при побитовой адресации
аккумулятора. Так,символическое имя пятого
бита аккумулятора будет следующим: ACC.5.
  Регистр B. Используется во время опера-
ций умножения и деления.Для других инстру-
кций  регистр  B может рассматриваться как
дополнительный сверхоперативный регистр.
  Регистр  состояния  программы.  Регистр 
PSW содержит флаги состояния программы. 
  Указатель  стека SP. 8-битовый регистр,
содержимое которого инкрементируется перед
записью  данных  в стек при выполнении ко-
манд  PUSH  и CALL. При  начальном  сбросе
указатель стека  устанавливается  в 07h, а
область стека  в ОЗУ  данных  начинается с
адреса 08h. При необходимости  путём пере-
определения  указателя стека область стека
может быть расположена в любом месте внут-
реннего ОЗУ микроЭВМ.
  Указатель   данных.  Указатель   данных 
(DPTR)  состоит  из старшего байта (DPH) и 
младшего  байта (DPL). Содержит 16-битовый
адрес при обращении к внешней памяти.Может
использоваться  как 16-битовый регистр или
как  два независимых восьмибитовых регист-
ра.
  Порт0-Порт3. Регистрами специальных фу-
нкций  P0, P1, P2, P3  являются  регистры-
<защёлки> соответствующих портов.
  Буфер  последовательного  порта.   SBUF
представляет собой два отдельных регистра:
буфер передатчика и буфер приёмника. Когда
данные  записываются в SBUF, они поступают
в буфер передатчика, причём запись байта в 
SBUF автоматически инициирует его передачу 
через  последовательный порт. Когда данные
читаются из SBUF, они выбираются из буфера
приёмника.
   Регистры   таймера.  Регистровые   пары 
(TH0,TL0) и (TH1,TL1) образуют  16-битовые 
счётные  регистры  соответственно таймера-
счётчика 0 и таймера-счётчика 1.
   Регистры управления. Регистры специаль-
ных функций IP, IE, TMOD, TCON,SCON и PCON
содержат  биты управления и биты состояния
системы  прерываний, таймеров/счётчиков  и
последовательного порта.

────────────────────────────────────────── 

   5.2. Разработка и описание программы

  5.2.1. Реализация  упаковщика по методу 
битового RLE с сегментацией 

   Самой  критичной  по времени исполнения
частью программы является упаковщик по ме-
тоду  битового RLE с одновременной выдачей
сжатых данных в последовательный порт. По-
скольку этот участок является для програм-
мы решающим,разработку кода программы луч-
ше всего начать с него. В разделе 4.1 было
оценено  время  в машинных  циклах AT89C52
между двумя передаваемыми байтами. Это по-
зволяет выбрать строение внутреннего цикла
программы,ориентируясь на время выполнения
одного  прохода  цикла подсчёта количества
подряд идущих одинаковых бит. Это время не
может превышать:

           1000/128 ў 8 (МЦ),

а на практике - ещё меньше,чтобы предусмо-
треть время  на остальную часть программы,
помимо цикла.
   Для  подсчёта количества одинаковых бит
нам обязательно потребуется чтение внешне-
го ОЗУ командой movx a,@dptr или аналогич-
ной  командой movx a,@Ri, использующей ре-
гистр R0 или R1. В данном  случае  это  не
составляет разницы,поскольку и та,и другая
команда  выполняются за 2 МЦ. При переходе
к каждому следующему байту адрес необходи-
мо инкрементировать с  учётом зацикливания
внутри четверти ОЗУ. Разумеется,неприменим
фрагмент, делающий это напрямую:
       ...
       mov a,dph
       inc dptr
       xrl a,dph
       anl a,#30h
       xrl a,dph
       mov dph,a
       ...
поскольку один только этот фрагмент выпол-
няется за 1+1+1+1+1+1=6 МЦ.
   Поэтому  целесообразным  представляется
вычислить  до входа в цикл количество про-
ходов цикла таким образом, чтобы инкремен-
тирование старшего байта адреса происходи-
ло после выхода  из цикла, а в самом цикле
осталось только inc dpl (1 МЦ).
   Далее  нам  требуется организовать про-
верку  бита  в  считанном  байте  и  выход
из  цикла  при  нужном  значении этого би-
та. Такую  задачу  можно  решить  командой 
jb acc.N,label (или  jnb),  где  N - номер 
проверяемого бита. Но в этом случае требу-
ется иметь в программе 16 (8 битов · 2 по-
лярности) похожих  участков, что  не очень
удобно. Тем более что с учётом команды за-
цикливания  djnz counter,loop  (2 МЦ) весь
цикл будет отнимать 2+1+2+2=7 МЦ, что поч-
ти на пределе выделенного времени.
   Таким  образом, имеет  смысл  "раскрыть
цикл", то есть сгруппировать действия,осу-
ществлявшиеся в несколько проходов  цикла,
в один проход. В нашем случае достаточно 4
проходов  внутри одного (приведён фрагмент
для подсчёта нулевых битов):

bp01:   movx a,@dptr ;2 МЦ 
       orl orer,a   ;1 МЦ: накапливаем
                           ;единицы в orer
       inc dpl      ;1 МЦ 
bp02:   movx a,@dptr 
       orl orer,a
       inc dpl 
bp03:   movx a,@dptr 
       orl orer,a
       inc dpl 
bp04:   movx a,@dptr 
       orl orer,a
       mov a,orer   ;1 МЦ
       anl a,masker ;1 МЦ
       jnz bp0_e    ;2 МЦ: среди 4 прочи-
                     ;танных байт попалась
                        ;единица в бите по
                             ;маске masker
       mov orer,#0  ;1 МЦ
       inc dpl
       djnz b,bp01  ;2 МЦ
       ...

   Метки bp01, bp02, bp03  и bp04 - четыре
входа  в цикл, причём  выбор одного из них
зависит от того, где относительно сегмента 
(128 байт) и  параграфа  памяти (256 байт) 
расположен dptr: инкремент dph или обрабо-
тка конца сегмента должны происходить пос-
ле выхода из цикла.
   В таком случае, после  выхода  из цикла
(после djnz) необходимо проверить:
 не нужно ли увеличить dph? (dpl=0?);
 не кончился ли сегмент памяти? 
((dpl-segbeg)mod 256=128?) 
   На выходе из цикла  по jnz  необходимо,
кроме  того, найти байт, где после нулевых
битов впервые появилась единица.Пусть в R0
до входа в цикл помещается содержимое dpl.
Очевидно, искать  единицу  до этого адреса
не нужно:
       ... 
bp0_e:  mov a,R0         ;в R0 - положение 
                        ;dptr до цикла
       cjne a,dpl,bp0_en0  ;<<
       jmp bp0rese         ;уменьшаем dpl 
bp0_en0:                    ;на 3, но не 
       dec dpl             ;меньше,чем до
       cjne a,dpl,bp0_en1  ;совпадения
       jmp bp0rese         ;с R0 
bp0_en1:                    ; 
       dec dpl             ;
       cjne a,dpl,bp0_en2  ;
       jmp bp0rese         ; 
bp0_en2:                    ; 
       dec dpl             ;>>

bp0rese:movx a,@dptr  ;ищем первую единицу 
                     ;среди 4(или меньше)
                     ;смежных байтов
       inc dpl
       anl a,masker  ;проверяем бит
                     ;по маске сигнала
       jz bp0rese    ;продолжаем поиск,
                     ;если ноль
       dec dpl       ;переполнения dpl
                     ;быть не может, т.к.
       ...           ;мы вышли из inner
                     ;loop по единичному
                     ;биту.

   Перед  входом  в цикл необходимо вычис-
лить  число  проходов и выбрать правильную
точку входа.Всего возможно несколько вари-
антов  относительного  расположения dptr и
адреса  начала  сегмента  ( N = количество
элементарных проходов цикла):

a) segbeg<128: раньше  появится конец сег- 
мента.
N=(segbeg+128-dpl) mod 256; 
b) segbeg=128: конец  сегмента  и одновре- 
менно dpl=0.
N=(segbeg+128-dpl) mod 256=256-dpl; 
c) segbeg>128 и dpl>128: раньше произойдёт 
dpl=0.
N=256-dpl; 
d) segbeg>128 и dpl<128: раньше появится 
конец сегмента.
N=(segbeg+128-dpl) mod 256.

   Начальное   значение   счётчика   цикла 
(count) зависит от N следующим образом: 

┌─────┬───┬───┬───┬───┬───┬───┬──┬───┬───┐ 
│  N  │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │..│127│128│ 
├─────┼───┼───┼───┼───┼───┼───┼──┼───┼───┤ 
│count│ 1 │ 1 │ 1 │ 1 │ 2 │ 2 │..│ 32│ 32│ 
└─────┴───┴───┴───┴───┴───┴───┴──┴───┴───┘ 

   Поэтому count определяется выражением:

           count=(N+3) div 4,

что на ассемблере AT89C52 проще всего реа-
лизовать последовательностью  команд (если
значение N поместить в аккумулятор):
       ...
       dec a
       rr a    ;циклический сдвиг вправо
       rr a    ;на 2 разряда
       inc a
       mov b,a ;количество проходов цикла
       jbc b.7,bp0i_x1  ;выбираем один из
                   ;четырех входов в цикл
       jbc b.6,bp03  ;01 сразу сбрасываем
                    ;проверяемые биты 6,7
       jmp bp04      ;00 
bp0i_x1:jbc b.6,bp01  ;11 
       jmp bp02      ;10

  Остальная  часть процедуры упаковки ме-
нее сложна.Внимания заслуживает только не-
большой  рагмент, где  короткий (не  более
чем  на 128 байт) условный  переход  из-за
большого  размера цикла приходится продол-
жить длинным безусловным:
       ...
       cjne a,dpl,bp_inseg_jmp 
;уменьшаем количество оставшихся сегментов 
       djnz R7,bp_main_jmp   ;продолжаем,
                            ;если не ноль
       call waitsend  ;вызов п/п ожидания
                          ;передачи байта
       jmp SENDSUM    ;выдача контрольной
                                   ;суммы 
;;;;;;;; ВЫХОД из п/п ЧИТАТЬ КАНАЛ ;;;;;;; 
bp_inseg_jmp: 
       jmp bp_inseg  ;компенсация коротк.
                           ;перехода cjne
                   ;с пом.длинного перех. 
bp_main_jmp: 
       jmp bp_main ;компенсация короткого
                            ;перехода djnz

────────────────────────────────────────── 

           5.2.2. Реализация
        главного цикла программы

   После  сброса или включения устройства,
вслед  за инициализацией и проведением са-
моконтроля, программа управления СЛА пере-
ходит к главному циклу. Главный цикл прог-
раммы занимается  получением  и обработкой
кадров сообщений.
   Приём  кадра  оказалось удобно реализо-
вать через подпрограмму,возвращающую после
удачного или неудачного приёма кадра в ак-
кумуляторе  код завершения, в регистре B - 
КОП, а в блоке памяти  по адресу FramBuf - 
принятую полезную  часть  данных кадра (то
есть без  байтов КОП, длины  и контрольной
суммы).
   Соответствие возвращаемого значения ак-
кумулятора виду ошибки принято следующим:

   ┌─────┬──────────────────────────┐
   │ ACC │      Вид ошибки          │
   ├─────┼──────────────────────────┤
   │  0  │ нет ошибки               │
   │  1  │ ошибка приема КОП        │
   │  2  │ неверная длина кадра     │
   │  3  │ ошибка контрольной суммы │
   └─────┴──────────────────────────┘

   Подпрограмма приёма кадра имеет выход в
случае обрыва связи во время приёма кадра.
Обрыв связи распознаётся как чрезмерно бо-
льшая  пауза после приёма байта и при ожи-
дании следующего. Максимальная пауза между
байтами  пауза задана в программе констан-
той:

GetWait equ 4000 ;максимальная пауза между 
            ;принимаемыми байтами (x5 МЦ)

   Главный цикл возможно реализовать так:

;-------- ГЛАВНЫЙ ЦИКЛ (MainLoop) -------- 
MainLoop: 
       call GETFRAME    ;приём кадра из
                       ;последовательного
                        ;порта в буфер
       cjne a,#0,ML_er1 ;Переход, если
                    ;ошибка приема (A<>0)
       mov a,b          ;КОП
       anl a,#7fh       ;сброс старшего
                        ;бита КОП
       cjne a,#08h,ML_2 ;Проверка КОПа на
                        ;существование 
ML_2:   jc ML_noer       ;Переход,если нет 
                        ;ошибки команды
                        ;(A<08h, C=1) 
ML_coer:call _ECOM       ;Вызов подпрог- 
                    ;раммы ОШИБКА КОМАНДЫ
       jmp MainLoop     ;Переход на
                        ;начало цикла 
ML_noer:mov dpl,#Low(CallTab) ;<<Заносим в 
                             ;dptr адрес
                            ;таблицы под-
       mov dph,#High(CallTab) ;программ>>
       add a,acc        ;Сдвиг аккумуля-
                        ;тора влево
       jmp @a+dptr    ;Переход на таблицу
                     ;вызовов подпрограмм 
ML_er1: 
       djnz acc,ML_er2  ;переход, если не
                       ;ошибка приёма КОП 
;1=ошибка приема КОП 
       jmp MainLoop 
ML_er2: 
       djnz acc,ML_er3  ;переход, если не
                        ;ошибка данных 
;2=неверная длина кадра 
;или поле данных при КОП.7=0 
       call _EIO      ;вызов подпрограммы
                  ;ОШИБКА ПЕРЕДАЧИ ДАННЫХ
       jmp MainLoop 
ML_er3: 
;3=ошибка контрольной суммы 
       call _EIO      ;вызов подпрограммы
                   ;ОШИБКА ПЕРЕДАЧИ ДАННЫХ
       jmp MainLoop 
;---- Конец главного цикла (MainLoop) ---- 

   Здесь  видно, что переход на обработчик
команды или запроса  реализован через таб-
лицу подпрограмм. Такое средство,предоста-
вляемое системой команд ОЭВМ, очень удобно
в этом случае, поскольку число обрабатыва-
емых КОП легко может быть увеличено, и при
этом программа  не  станет громоздкой и не
будет работать медленнее.
   Главная часть механизма перехода по та-
блице - команда jmp @a+dptr, которая  осу-
ществляет переход  по  вычисляемому адресу 
dptr+ACC. В нашем случае dptr указывает на 
первый адрес таблицы,а ACC содержит смеще-
ние (кратное 2 ).Таблица состоит из неско-
льких коротких переходов (ajmp), каждый из
которых  указывает на свою программу-обра-
ботчик. В конце обработчиков стоит команда 
jmp MainLoop для возврата в начало главно- 
го цикла.

────────────────────────────────────────── 

         5.2.3. Состав текстов
       программных модулей ПО СЛА

   Главным  модулем  является  SLA.asm. Он
содержит:
 объявления глобальных констант;
 директивы распределения памяти;
 код программы инициализации;
 главный цикл и таблицу переходов;
 общую подпрограмму коррекции dptr пос- 
ле перехода границы параграфа памяти; 
 директивы компиляции остальных модулей 
программы. 

   Модуль io.asm, реализующий базовые опе-
рации   ввода-вывода   в  последовательный
порт, содержит  следующие  необходимые для
этого подпрограммы:
 SENDSUM - процедура выдачи в порт кон- 
трольной  суммы -csum. Здесь и далее вход- 
ные данные - в аккумуляторе; 
 SEND - процедура выдачи байта  в буфер 
последовательного  порта  без ожидания его 
передачи, с накоплением контрольной суммы; 
 movsbuf - процедура выдачи байта в бу- 
фер последовательного  порта  без ожидания 
его  передачи, без  накопления контрольной 
суммы; 
 SENDKOP - процедура  выдачи в последо- 
вательный порт КОП и его дополнения до ну- 
ля; 
 SENDACC - процедура выдачи содержимого 
аккумулятора  в  последовательный  порт  с 
ожиданием передачи и накоплением контроль- 
ной суммы; 
 waitsend - процедура ожидания передачи 
байта из буфера последовательного порта; 
 GETFRAME - процедура  приёма  кадра по 
последовательному порту; 
 GETBYTE - процедура  приёма  байта  из 
последовательного порта. 

   Модуль  messages.asm  содержит подпрог-
раммы выдачи простых ответных сообщений:
 _COMOK - подпрограмма выдачи ОС <Кома- 
нда выполнена>; 
 _ECOM - подпрограмма  обработки ошибки 
команды. Выдача ОС <Ошибка команды>; 
 _EDATA - подпрограмма обработки ошибки 
данных. Выдача ОС <Некорректные данные>; 
 _EIO - подпрограмма  выдачи ОС <Ошибка 
передачи данных>; 
 _RESOK - подпрограмма выдачи ОС <Исхо- 
дное состояние>. 

   Модуль  control.asm  содержит процедуры
контроля ОЗУ и ПЗУ:
 SIGNS - контроль ПЗУ (8k)  сигнатурным
анализом;
 EXRAM - контроль  внешнего ОЗУ (16k) с 
очисткой. 

   Модуль  _rchan.asm  содержит  процедуры
обработки запроса <Читать канал>:
 _RCHN - общая  подпрограмма  анализа и 
выдачи  данных канала наиболее эффективным 
методом кодирования; 
 rch_const - процедура   выдачи  данных 
постоянного (не изменяющегося) канала; 
 rch_noise - процедура  выдачи   данных 
сильно изменяющегося (шумового) канала; 
 bitpack - процедура  выдачи данных не- 
постоянного канала.На основании статистики 
канала производится выбор метода кодирова- 
ния: без сжатия или со сжатием по битовому 
методу RLE; 
 FRONTS - процедура подсчёта  статистик 
(числа фронтов) сигналов  в данной области 
ОЗУ. 

   Остальные модули содержат по одной важ-
ной процедуре.Входные данные для этих про-
цедур должны находиться в буфере принятого
кадра.
   Модуль _rstate.asm содержит подпрограм-
му _RSTATE, служащую для обработки запроса 
<Читать  состояние  СЛА>. Модуль _rram.asm 
содержит подпрограмму _RRAM, служащую  для
обработки  запроса  <Читать  ОЗУ>.  Модуль 
_selfc.asm  содержит  подпрограмму  _SELFC 
обработки  команды <Запустить самоконтроль 
ЛА>. 

   Перечисленные программы составляют весь
список необходимых модулей,входящих в про-
граммное  обеспечение  специализированного
логического анализатора.

────────────────────────────────────────── 

   5.3. Автономная отладка программы
               на модели

   Для  отладки  программы  управления СЛА
был использован монитор-отладчик Debugger- 
51. С помощью  этого средства можно выпол- 
нять c программой такие действия, как:

 выполнение  до  указанного   оператора 
(строки кода); 
 пошаговое выполнение программы;
 выполнение до точки останова;
 включение и выключение точек останова;
 просмотр и изменение  значений регист- 
ров и ячеек памяти; 
 загрузка и сохранение содержимого всех 
видов памяти ОЭВМ на магнитный носитель. 

   Использование  отладчика позволило зна-
чительно сократить срок  написания главных
алгоритмов программы за счёт автоматизации
поиска и исправления ошибок.
   Отсутствие возможности отладки алгорит-
мов передачи данных измерения на существу-
ющем  СЛА  компенсировано за счёт создания
его модели,что позволило провести проекти-
рование программы на одной ПЭВМ. Для этого
были произведены следующие действия:

 в базовые функции ввода-вывода (модуль 
io.asm) внесены  изменения. Вместо  выдачи 
данных  в последовательный порт, процедуры 
заносят  байты  данных  во внешнее ОЗУ, за 
пределами используемой области в 16k. 
 в главном модуле программы отключаются 
вызовы процедур самоконтроля и приёма кад- 
ра. Вместо  приёма кадра при трассировке с 
помощью  отладчика  в  регистры и ОЗУ ОЭВМ 
подставляются  данные  кадра  отлаживаемой 
команды или запроса. 
 данные  каналов генерируются с помощью 
псевдослучайных чисел специальной програм- 
мой,написанной на Delphi, и при трассиров- 
ке грузятся  во  внешнее ОЗУ ОЭВМ. Листинг 
программы-генератора  сигналов  приведен в 
приложении данного дипломного проекта. 
 После места вызова отлаживаемой проце- 
дуры ставится точка останова. 
 Кадры ОС,возвращаемые программой упра- 
вления СЛА, формируются во внешней памяти, 
после чего выгружаются средствами отладчи- 
ка и тестируются на правильность. 

   Для  примера  можно  показать, как была
сгенерирована случайная последовательность
сигналов  с начальным значением псевдослу-
чайного генератора, равным 2 (рис.5.3.1).

 ▒▒ Signal generator ▒▒▒▒▒▒▒▒ [_][O][X]
 ╟────────────────────────────────────╢
 ┌────┐┌──────┐┌────┐┌──────┐┌────┐ ┘    └┘      └┘    └┘      └┘    └ ┐┌┐┌─┐┌┐ ┌┐┌┐┌─┐┌┐┌┐┌┐ ┌┐┌┐┌┐┌─┐┌┐ └┘└┘ └┘└─┘└┘└┘ └┘└┘└┘└─┘└┘└┘└┘ └┘└ ─┐┌┐┌─┐ ┌┐ ┌─┐ ┌┐┌─┐┌┐┌┐┌─┐ ┌─┐┌─┐  └┘└┘ └─┘└─┘ └─┘└┘ └┘└┘└┘ └─┘ └┘ └ ┐ ┌┐┌─┐┌─┐ ┌─┐ ┌─┐┌─┐ ┌┐ ┌─┐┌─┐ ┌─ └─┘└┘ └┘ └─┘ └─┘ └┘ └─┘└─┘ └┘ └─┘  ┐┌─┐┌─┐┌─┐┌──┐ ┌─┐┌──┐┌─┐┌┐┌─┐┌─┐┌ └┘ └┘ └┘ └┘  └─┘ └┘  └┘ └┘└┘ └┘ └┘ ┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌ └┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘  ┌─┐ ┌──┐ ┌─┐ ┌──┐ ┌┐ ┌─┐ ┌─┐ ┌──┐ ─┘ └─┘  └─┘ └─┘  └─┘└─┘ └─┘ └─┘  └ ─┐┌─────┐┌───┐┌───┐┌────┐┌────┐┌──  └┘     └┘   └┘   └┘    └┘    └┘                                                                        
  ║█████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
 ╟────────────────────────────────────╢
 [Generate] Seed= [2] not tested [Test]
 ╙────────────────────────────────────╜

Рис. 5.3.1. Генератор тестовых сигналов.

   Ниже приведён  дамп файла сгенерирован-
ной программой  области памяти (4 килобай-
та), где значения отсчётов сигналов распо-
ложены  так, как  если бы они были считаны
схемой записи СЛА. Этот файл будет исполь-
зоваться для отладки программы СЛА в отла-
дчике Debugger-51 (таблица 5.3.1).

             Таблица 5.3.1.
     Дамп сгенерированных сигналов

0000: D6D6D292-90802021-21252D2D-2D296868 
0010: 68484044-44444404-04040404-00000000 
0020: 40404046-66666666-66323232-32323232 
0030: 1E1E1C1C-1C5C5C4C-48404040-40400404 
0040: 24242424-24202060-60606060-40434347 
0050: 0707078F-8F8E8E8E-CACACAC8-C8D0D034 
0060: 34343434-34343430-30100000-40404040 
0070: 40040404-0C0C0C0C-28282828-2A2A2222 
0080: 26666646-46460602-00001010-10101414 
0090: 14145454-70707070-78686868-682C2D0D 
00A0: 0D050501-03030202-42424242-46464444 
00B0: 44400020-20202024-2424BCFC-FCF8D8D8 
00C0: D8D8D898-90909090-96161606-66666666 
00D0: 66666040-40000404-0404040C-08080848 
00E0: 48486868-6C6C6464-24242424-20202123 
00F0: 03031313-13131616-54545454-5C484808 
0100: 08282828-2C242424-24646444-44444040 
0110: 40404040-02020606-06060606-26262232 
0120: 727070F0-F0F8FCFC-FCBC3C1C-04040400 
0130: 00000000-00444444-44444444-40202022 
0140: 22222626-26262607-03034B5B-5B59585C 
0150: 54141414-14100000-00202020-24242464 
0160: 64646060-60404042-4A0E0E0E-0E0E0E0E 
0170: 0A0A0A40-60606070-74747434-34343434 
0180: 10101000-00000404-C4C4C4C4-CCCECECA 
0190: EA6A2A2A-26262626-26060444-44444040 
01A0: 40404040-40410101-0505151D-1D3D3D39 
01B0: 39387070-70505046-46464646-46020202 
01C0: 02020202-06044444-44646464-60606060 
01D0: 2000080C-0C0C0C0C-0C141454-505050D0 
01E0: D0F2F2F6-F6B63626-26262606-06000000 
01F0: 00484848-484D4D4D-4D0D2525-21212121 
0200: 21242404-04040444-54565252-52525252 
0210: 52563636-36363630-20282828-28280848 
0220: 484C4C44-44444444-44404000-00002020 
0230: 24242626-26260642-42424242-42404404 
0240: 141C1C9C-9D9DBDB9-B9B9F8F0-70545454 
0250: 44444444-04040002-02020202-02626262 
0260: 66666664-2C2C2828-08080808-00000044 
0270: 44444444-44444424-20202030-30303636 
0280: 56565652-52525A4A-0A0A0A0C-0C0C0404 
0290: 24646460-60606061-61418181-85858484 
02A0: 848484C4-C4C44446-46426262-6A6A2A2A 
02B0: 2A3A1C1C-1C141414-14141454-54505050 
02C0: 50505050-54446424-24202022-2222020E 
02D0: 0E0E0E4E-4E4E4642-42404000-00000404 
02E0: 04242420-20303030-71717151-5557575F 
02F0: 5F5F0B0B-0A0A0A00-04040424-24646460 
0300: 60606060-6464E484-84848484-848480C0 
0310: C0C84A4A-4E4E4E5E-7E3E3636-36323232 
0320: 30300040-44444444-44440400-00000000 
0330: 00000004-44646464-60606A6A-2A2A0E0E 
0340: 0F0F0F17-17171551-51505050-50141414 
0350: 14342424-24202020-20202000-40444C4C 
0360: 4E4E4E4E-4A4A4242-42828484-A4A4A4A0 
0370: A0A02020-40404454-54545450-10101818 
0380: 181C1C1C-0C0C0606-22222262-62666666 
0390: 64646404-04040400-00000000-00000041 
03A0: 4D4D4D4D-5C7C7C3C-34303032-32323212 
03B0: 06060646-46444040-40404040-40400424 
03C0: 24242424-24202028-08080808-48404444 
03D0: 44C4C6C2-C2929292-92163636-36363230 
03E0: 20206060-64444444-44444000-08080808 
03F0: 28282820-20202424-04444442-42434343 
0400: 43031313-16161616-14343474-74747470 
0410: 70684848-0C0C0C0C-0C0C0C00-00004040 
0420: 40646464-64642626-22222222-22220206 
0430: 46464646-42480808-0888989C-9C9C9CF4 
0440: F4F0F070-70706060-60242424-04040501 
0450: 01010143-43434246-666E6E6E-2E2E2E28 
0460: 28080808-08004444-44444454-50505010 
0470: 30303434-34242626-26060642-424A4A4A 
0480: 4A4A4A0E-04040404-24202020-20202020 
0490: 24646464-44404040-00001010-1014141F 
04A0: 1F5F5F7B-7B7B7B7B-622222A2-80848484 
04B0: 84840400-00004040-44444444-44446060 
04C0: 60202828-282C2C2C-3C3C3C36-56525252 
04D0: 52525252-52121614-04042420-20202020 
04E0: 20206064-6464444D-4D490909-09090904 
04F0: 04040404-06060602-02626262-62626664 
0500: 74747474-54541414-10101090-9098988C 
0510: 8C8C8CEC-EC6C6860-60202020-20242626 
0520: 26262606-02424242-42424242-44040404 
0530: 04243030-30303838-397D7D7D-7D5D5541 
0540: 40000000-00000000-06060666-66666262 
0550: 6262626A-2E0C0C0C-0C0C0808-00004040 
0560: 44444454-54545410-30303030-B0B4B4B4 
0570: B4B686C6-C6CECE4A-4A4A4A4A-4A4A0A26 
0580: 26242424-25252521-41414141-41404044 
0590: 04040404-04000020-60707070-707A7A1A 
05A0: 1A1E1E1E-1E1E1604-04444440-40404040 
05B0: 40400424-24242424-24244444-40404040 
05C0: 40080A0A-0E0E0E0E-0E0E0E42-42434341 
05D0: 61617575-757534B4-94909090-9090D0D0 
05E0: D0C04040-40646424-242C2E2A-2A2A2A2A 
05F0: 2A0A0A0E-0E464646-46444440-40000000 
0600: 20202024-24242424-64445050-50585858 
0610: 1C1C1C1C-16161606-07072723-23232323 
0620: 63606464-44444444-4C0C0C08-08080808 
0630: 08040404-64646464-64606060-00101092 
0640: 92929696-96961616-16464642-62626268 
0650: 28282828-2C0C0C0C-0C0C0444-40404040 
0660: 40000000-04040424-24242033-33333373 
0670: 77775757-5F5E5C18-18080808-08000004 
0680: 44446464-64602020-20200000-00040404 
0690: 44444448-4A4A4A4A-4A5A5E36-36363636 
06A0: 32222020-A0C0C0C4-C4C4C4C4-C4C4C0C0 
06B0: 80800000-00000404-2C2C2E6E-6A6B6B6B 
06C0: 6B636767-67260606-04000000-00101414 
06D0: 14141414-54545474-70606068-68682828 
06E0: 28280C0C-04060606-06020242-42424266 
06F0: 64646464-24242020-20202020-38585C5C 
0700: 5C5C5C50-D0D0D0D0-D0848484-A6262626 
0710: 26666363-63434307-07060604-04000000 
0720: 00080808-4C4C6C64-64602020-20243434 
0730: 34141414-54545454-52525212-02020206 
0740: 06060606-2A2A6868-68686868-68642404 
0750: 04040404-04000000-40404042-46464676 
0760: 76363232-32323030-10189CDC-DCDDCDCD 
0770: CDC5C101-00002020-20202424-24666666 
0780: 46424242-42424242-42080C0C-0C0C0C0C 
0790: 2C2C3C34-34747070-70505050-44444404 
07A0: 06060606-02020202-02024260-6060646C 
07B0: 6C2C2C2C-08080800-00000000-40404444 
07C0: 44444444-44427233-33333333-333736B6 
07D0: 9696D6C0-C0C0C0C8-48484C4C-0C0C0424 
07E0: 20202020-20202464-64646464-40404000 
07F0: 00000206-0E0E0E0E-0A1A1A1A-7A7A7A72 
0800: 72767676-66242404-04040400-00000000 
0810: 00000444-44444444-44646060-28282828 
0820: 292B2F2F-2F272707-57565250-50505050 
0830: 14141414-14242020-A0A0E0E0-E0E4E4E4 
0840: 0C0C0C0C-0C0C0808-0A0A4242-42424246 
0850: 46062626-24242424-24301050-50505050 
0860: 54545454-545C0C0C-08080828-2A2A2A22 
0870: 62666666-66666666-42000000-00010505 
0880: 05050545-41404040-40606474-34343438 
0890: 38381A1A-1A1E0686-C6C6C6C6-C6C2C2C0 
08A0: C0002020-24242424-24246440-40404040 
08B0: 4044444C-0C0C0808-08082820-20203434 
08C0: 76767676-76725252-12121204-04040404 
08D0: 04050149-49494969-6D6D6D24-24242424 
08E0: 00000000-40404040-46460606-06262222 
08F0: 32327272-7AFAFEDE-DEDE9E9E-90808080 
0900: 80800004-04040404-04444040-60606060 
0910: 24242424-24040446-464E4A4A-4A4A0A0A 
0920: 0A062624-34343434-70705050-51515555 
0930: 55454544-00000000-00000000-00060E2E 
0940: 6E6E6E6A-6A6A6A22-22200404-04040404 
0950: 00404040-40444454-54541434-34303030 
0960: B0B0A0A0-A4ACECCC-CE4E4A4A-4A020202 
0970: 02020606-06262620-20206060-60614545 
0980: 45050504-14141410-18181858-585C5C5C 
0990: 74766626-26222222-22222222-22424646 
09A0: 44444404-04040400-00080808-4868686C 
09B0: 6C6C6C64-64747476-36121292-92929296 
09C0: 96969414-54544444-40404028-28282828 
09D0: 282C2D25-05050101-01014140-40444446 
09E0: 46060626-26263232-32301010-10545C5C 
09F0: 5C5C4C48-48480800-20242424-24246464 
0A00: 64606060-60000004-04040606-06020202 
0A10: 02024242-52565676-7C7C7838-38382828 
0A20: 20200101-050505C5-C5C5C5C5-C5C4C480 
0A30: 82828202-0A2E2E2E-2E2E2C68-68686060 
0A40: 74747454-54101010-10100000-00040404 
0A50: 44444444-60606062-62222222-2A2E0E0E 
0A60: 0E0E0E06-04000000-00004040-40505454 
0A70: 54141434-35353131-31313131-35754646 
0A80: 4646CA8A-8A8A8A8A-8A8A8284-84044444 
0A90: 44444464-60606060-60202424-24243414 
0AA0: 141C1C18-185A5A5A-5A5A5646-46464606 
0AB0: 06062020-20202020-24242464-64444440 
0AC0: 40404000-0008080A-0E0E0E0E-2E266662 
0AD0: 70707071-71717515-15151514-10101000 
0AE0: 00000404-44444464-646E6E6E-6AEAEAEA 
0AF0: 8A8A8E8E-84040404-04040444-40606060 
0B00: 70703030-30303414-14141454-44444242 
0B10: 4242020A-0A0A0A0E-2C2C2C2C-64646464 
0B20: 64646465-45010101-01010101-10141414 
0B30: 14145656-72727A7A-6A6A2A2A-2E2E2E0C 
0B40: 04040404-44404040-40C0C0C0-C0C0C084 
0B50: 84A42424-24242420-20604040-42424252 
0B60: 56161616-1E1E1A1A-18184848-4C6C6C64 
0B70: 64242420-20202020-20204445-45454747 
0B80: 47464642-02020202-02060E0E-2E6E6C6C 
0B90: 6C686860-30303010-14141414-14141050 
0BA0: 50404044-44444406-06060202-02022A2A 
0BB0: 6E6E6E6E-E4E4A0A0-A0A08080-00000404 
0BC0: 04044444-44444040-50101010-14151535 
0BD0: 3737373F-3F3F2B2A-6A6A6848-40404444 
0BE0: 44444444-00000000-20202024-24242464 
0BF0: 64644444-4444440E-0A0A0A1A-1E1E1E16 
0C00: 16565656-44406060-60606060-60242404 
0C10: 84848484-8480C0C0-40484848-4C0C2C2C 
0C20: 2E262622-22232323-23236357-54545454 
0C30: 54545410-10101010-10000000-04246464 
0C40: 6C6C6C68-68282A2A-02020206-06464444 
0C50: 44444440-40000000-20202424-24247474 
0C60: 74545454-50505818-181A9A9A-9E9E8E8E 
0C70: 8A8AE2E2-62606024-24242404-04000101 
0C80: 01010145-45454545-44646060-60202026 
0C90: 2E0E1E1E-1E1E1E1A-1A1A1818-18404040 
0CA0: 40446464-24242020-20202020-00040404 
0CB0: 44444444-46464242-0A2A2A2A-2A2A2A22 
0CC0: 20242474-54555151-51515111-01000484 
0CD0: 84A4A4A4-A4202068-68684848-484E0E0E 
0CE0: 0E060202-02020242-42404040-44444444 
0CF0: 04042020-30303078-78787C5C-5C5C5C1C 
0D00: 14100202-02020202-02064666-66666262 
0D10: 62220200-01010105-05454544-44404048 
0D20: 48484C0C-2C2C2C2C-34343010-90D0D0D0 
0D30: D2D2D2D2-16161626-26262020-20202000 
0D40: 00404044-44444444-04040808-28282828 
0D50: 28282064-64465656-56561612-12121210 
0D60: 14141414-74646060-60606064-640C0D0D 
0D70: 0D0D0909-09030302-06464646-46666662 
0D80: 62606060-30303014-14141414-14141414 
0D90: 40404040-404C6C6C-2CACACAC-ACACA822 
0DA0: 22220202-42424646-46464644-40000000 
0DB0: 00002024-24242424-20606061-61415555 
0DC0: 5D1D1C1C-18181818-10101252-52524266 
0DD0: 66662626-26262222-20000000-00000008 
0DE0: 084C4C4C-4C4C4C4C-4C484800-00202022 
0DF0: 26262626-A6A6C6C6-C2D25252-52521614 
0E00: 14141419-19192929-29696464-64646404 
0E10: 00000000-00000000-44464646-46424262 
0E20: 222A2A2E-2E2E0C0C-08081818-18505454 
0E30: 54545454-54501000-00202424-24242464 
0E40: 64646262-424A4A0A-0A0A0F0F-0F070504 
0E50: 04444444-446060E0-E0A0A0A0-B0B4B4B4 
0E60: 94949494-10105050-544E4E4E-4E4E6E2A 
0E70: 22222222-22222246-46464444-44444000 
0E80: 00000000-00000024-6C6C6C6C-6C686860 
0E90: 60301212-12161616-16161616-52525041 
0EA0: 41414545-45444420-20202020-20282828 
0EB0: 2C2C6E4E-4E464242-42420202-02060606 
0EC0: 06043430-303030F0-F0F4F4F4-F4E4CCCC 
0ED0: 8C8C8888-08080808-04044646-66666262 
0EE0: 62626262-66262606-06040405-05050101 
0EF0: 01011155-5454545C-78787878-3828282C 
0F00: 2C2C0404-04044444-46464642-42420222 
0F10: 22222222-22222626-24246464-44444858 
0F20: 58585858-D8D89C94-94949410-50507070 
0F30: 60646464-64646022-22030B0B-0B0F0F0F 
0F40: 0E060604-40404040-60646464-64242424 
0F50: 24200000-00001010-14545454-54505050 
0F60: 52524242-62222A2A-2A2A2A2E-2E2E2604 
0F70: 44404040-40404040-40000404-04242424 
0F80: 24202060-60707171-F1F5DDDF-DF9F9E9E 
0F90: 9A121202-02020644-44444444-44404060 
0FA0: 60602020-24242C2C-2C2C0C48-48484040 
0FB0: 40400202-02020606-06161616-36363070 
0FC0: 70707070-70703014-04040C0C-0C080808 
0FD0: 48484C44-46464642-62636363-23232525 
0FE0: 25250505-44404040-40505054-14141414 
0FF0: 9C9CBCBC-BCB8B8A8-E0E2E2C2-C6460606 

   При  прогоне  программы  в отладчике ей
подставляется  отладочная  команда  чтения
канала  0, после чего ставится точка оста-
нова и вызывается обработчик данной коман-
ды (рис.5.3.2).

[прим.издателей: здесь  был  рабочий экран 
монитора-отладчика  в альбомном расположе- 
нии, см.графический материал] 

    Рис.5.3.2. Отладка программы СЛА
    с помощью отладчика Debugger-51.

   Выделенная  область  памяти, содержащая
данные  ответного  сообщения программы СЛА
(компрессированные данные  канала 0 ),сре-
дствами  отладчика   сохраняется   в  файл 
result.bin, после чего полученный файл те- 
стируется  на  корректность и соответствие
сгенерированному сигналу программой Signal 
generator (рис. 5.3.3). 

 ▒▒ Signal generator ▒▒▒▒▒▒▒▒ [_][O][X]
 ╟────────────────────────────────────╢
 ┌────┐┌──────┐┌────┐┌──────┐┌────┐ ┘    └┘      └┘    └┘      └┘    └ ┐┌┐┌─┐┌┐ ┌┐┌┐┌─┐┌┐┌┐┌┐ ┌┐┌┐┌┐┌─┐┌┐ └┘└┘ └┘└─┘└┘└┘ └┘└┘└┘└─┘└┘└┘└┘ └┘└ ─┐┌┐┌─┐ ┌┐ ┌─┐ ┌┐┌─┐┌┐┌┐┌─┐ ┌─┐┌─┐  └┘└┘ └─┘└─┘ └─┘└┘ └┘└┘└┘ └─┘ └┘ └ ┐ ┌┐┌─┐┌─┐ ┌─┐ ┌─┐┌─┐ ┌┐ ┌─┐┌─┐ ┌─ └─┘└┘ └┘ └─┘ └─┘ └┘ └─┘└─┘ └┘ └─┘  ┐┌─┐┌─┐┌─┐┌──┐ ┌─┐┌──┐┌─┐┌┐┌─┐┌─┐┌ └┘ └┘ └┘ └┘  └─┘ └┘  └┘ └┘└┘ └┘ └┘ ┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌ └┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘  ┌─┐ ┌──┐ ┌─┐ ┌──┐ ┌┐ ┌─┐ ┌─┐ ┌──┐ ─┘ └─┘  └─┘ └─┘  └─┘└─┘ └─┘ └─┘  └ ─┐┌─────┐┌───┐┌───┐┌────┐┌────┐┌──  └┘     └┘   └┘   └┘    └┘    └┘   ┐┌────┐┌─────┐┌────┐┌─────┐┌────┐┌ └┘    └┘     └┘    └┘     └┘    └┘
  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████║
 ╟────────────────────────────────────╢
 [Generate] Seed= [2]  tested ok [Test]
 ╙────────────────────────────────────╜

    Рис.5.3.3. Проверка содержимого
        ответного сообщения СЛА.

   При тестировании распознаётся метод ко-
дирования, указанный в поле данных ОС,дан-
ные  канала  декомпрессируются, после чего
происходит сравнение распакованного сигна-
ла (на рисунке - нижний) и исходного кана-
ла 0 (на рисунке - верхний).

────────────────────────────────────────── 

       5.4. Описание работы с СЛА

   Программа предназначена для автоматиза-
ции процесса наладки приборов,подключенных
к шине типа ММИ. Устройство  рассчитано на
использование внутри предприятия.Ниже при-
ведено  описание основных требований к ин-
терфейсу системы СЛА - ПЭВМ [16]:

   Для  работы  СЛА  необходима ПЭВМ обще-
го назначения с установленным  программным
обеспечением обслуживания специализирован-
ного  логического  анализатора, подключен-
ная к СЛА  по последовательному интерфейсу 
RS-232. 
   Программа ПЭВМ (ПУЛА) должна  осуществ-
лять  управление  логическим  анализатором
ММИ (СЛА) по  интерфейсу  RS-232, а  также
прием  и  вывод на экран дисплея временных
диаграмм процессов передачи  информации по
интерфейсу ММИ  при настройке аппаратуры и
локализации отказов. Она должна также обе-
спечивать  чтение  и  запись в/из файла на
магнитном диске результатов измерения из/в
рабочего  буфера  совместно  с параметрами
запуска и измерения.
   Запуск  измерения ЛА должен инициирова-
ться с клавиатуры ПЭВМ.При запуске измере-
ния ПУЛА должна выполнять следующую после-
довательность действий:

 останов измерения от предыдущего запу- 
ска выдачей  на ЛА команды <Остановить из- 
мерение>; 
 гашение на дисплее временной диаграммы 
от предыдущего измерения; 
 запуск  измерения  выдачей на ЛА кадра 
параметров командой <Запустить измерение>; 
 циклический  опрос  байта состояния из 
ЛА с  помощью  запросов <Читать  состояние 
ЛА> (с выводом на  экран) до окончания из- 
мерения  или  до вмешательства оператора с 
клавиатуры  ПЭВМ  с выдачей  на ЛА команды 
<Остановить измерение>; 
 при  успешном  завершении  измерения - 
прием из ЛА результатов измерения запроса- 
ми <Читать канал> последовательно по заде- 
йствованным каналам в рабочий буфер, с по- 
следующим выводом на экран или в файл. 

   ПУЛА должна обеспечивать инициируемую с
клавиатуры  установку в исходное состояние
ЛА выдачей по интерфейсу на ЛА команды ус-
тановки в исходное с последующим приемом и
индикацией байта состояния ЛА.
   Самоконтроль  ЛА  может  запускаться по
командам  оператора ПЭВМ с последующей ин-
дикацией результатов на дисплее.С ПЭВМ до-
лжна подаваться команда <Запустить самоко- 
нтроль ЛА> и запрос <Читать состояние ЛА>, 
приведенные в разделе 3.3.
   ЛА может быть  подключен к ПЭВМ для ра-
боты  в одномашинном  и двухмашинном режи-
мах.Одномашинным является режим работы,ко-
гда одна и та же ПЭВМ  производит управле-
ние комплексом устройств и снимает резуль-
таты измерения. В двухмашинном режиме одна
из ПЭВМ  осуществляет контроль, а другая -
снимает результаты измерения с ЛА.

   При  работе в одномашинном режиме взаи-
модействие ПУЛА и программы контроля может
осуществляться в следующем порядке:

 снимается питание с АКИА и с ЛА;
 подается питание на ПЭВМ;
 вызывается ПУЛА, задается тип устройс- 
тва и запрашивается тип  средств  коммута- 
ции; 
 в аппаратуру на место заданного устро- 
йства устанавливается ЛА с требуемым типом 
средств  коммутации и с заданным устройст- 
вом; 
 подается питание на ЛА;
 средствами  ПУЛА  ЛА устанавливается в 
исходное  состояние и контролируется соот- 
ветствие типа средств коммутации заданному 
типу устройства; 
 подается питание на АКИА;
 средствами ПУЛА задаются параметры за- 
пуска и измерения ЛА  и осуществляется за- 
пуск измерения ЛА в однократном режиме. 
 выполняется выход из ПУЛА в ДОС;
 вызывается и запускается программа ко- 
нтроля АКИА; 
 осуществляется останов программы конт- 
роля и выход из нее в ДОС; 
 вызывается ПУЛА без нарушения  состоя- 
ния ЛА; 
 средствами ПУЛА опрашивается состояние 
ЛА и, если запуск состоялся,принимаются из 
ЛА и выводятся на экран результаты измере- 
ния. 

   При  работе в двухмашинном режиме взаи-
модействие ПУЛА и программы контроля может
осуществляться в следующем порядке:

 снимается питание с АКИА и с ЛА;
 подается  питание  на  вспомогательную 
ПЭВМ с установленной ПУЛА; 
 вызывается ПУЛА,задается тип устройст- 
ва и запрашивается тип средств коммутации; 
 в аппаратуру на место заданного устро- 
йства устанавливается ЛА с требуемым типом 
средств  коммутации и с заданным устройст- 
ва; 
 подается питание на ЛА;
 средствами  ПУЛА  ЛА устанавливается в 
исходное состояние и контролируется  соот- 
ветствие типа средств коммутации заданному 
типу устройства; 
 подается питание на АКИА;
 средствами ПУЛА задаются параметры за- 
пуска  и измерения ЛА и осуществляется за- 
пуск измерения ЛА в однократном режиме или 
в периодическом режиме; 
 вызывается и запускается программа ко- 
нтроля АКИА; 
 средствами ПУЛА опрашивается состояние 
ЛА и, если запуск состоялся,принимаются из 
ЛА и выводятся на экран результаты измере- 
ния. 

   Одновременный (двухмашинный) режим  ра-
боты может быть реализован на одной ПЭВМ с
установленной  многозадачной  операционной
системой, такой как MS Windows.

────────────────────────────────────────── 

         6. Экономическая часть

6.1. Определение трудоёмкости разработки
         программного продукта

   Разрабатываемый программный продукт от-
носится  к подсистеме <Управление  качест-
вом>.
   Исходные данные для расчёта:

 количество разновидностей форм входной 
информации: 2 (в том числе переменной: 2); 
 количество разновидностей  форм выход- 
ной информации: 2; 
 степень новизны  разрабатываемой зада- 
чи: В (разработка проекта с использованием 
типовых  проектных  решений при условии их 
изменения;разработка проектов,имеющих ана- 
логичные решения); 
 сложность  алгоритма: 1 (алгоритмы оп- 
тимизации и моделирования систем  и объек- 
тов); 
 сложность организации контроля входной 
информации: группа  12 (входные  данные  и 
документы однообразной формы и содержания, 
осуществляется формальный контроль); 
 сложность организации  контроля выход- 
ной информации: группа 22 (печать докумен- 
тов однообразной формы и содержания, вывод 
массивов данных на магнитные носители); 

   Программный продукт разработан в кросс-
средах  программирования  для  процессоров
типа MCS-51: редактор-транслятор Asm51Edit 
2 и отладчик Debugger-51, на языке АССЕМБ- 
ЛЕР,с использованием типовых проектных ре-
шений и стандартных модулей  в объёме 20%.
Разработка  проекта велась в режиме работы
в реальном времени.

   При расчёте  норм времени в зависимости
от  исходных  данных  для  расчёта следует
применять  соответствующие поправочные ко-
эффициенты.  [13]  Далее  приведён  список
значений этих коэффициентов.
  
1. Разработка технического задания: 
 для  разработчика  постановки  задачи:
0,65;
 для разработчика программного  обеспе-
чения: 0,35. 
2. Разработка эскизного проекта: 
 для  разработчика  постановки  задачи:
0,7;
 для разработчика  программного обеспе-
чения: 0,3. 
3. Разработка технического проекта. 

           1·2
      K  = ───·1·1,26·0,85 ў 1,07.
       общ  2

4. Разработка рабочего проекта. 

       1,20·2
   K  = ──────·1·1,32·1,15·0,8 ў 1,468.
   общ    2

5. Внедрение. 

        K  = 1·1·1,21·0,8 = 0,968.
        общ

   Для  учета  применения  ПЭВМ в процессе
проектирования  вводятся поправочные коэф-
фициенты:

 для расчёта  трудоёмкости (для  стадий 
ТП, РП, внедрение): 0,6; 
 для расчёта затрат  машинного времени: 
1,32. 

   Поскольку типовые нормы времени на про-
граммирование задач для ЭВМ были рассчита-
ны для устаревших средств разработки ПО,то
во все  используемые  коэффициенты следует
внести поправочный коэффициент 0,6.

   Определим  трудоёмкость по стадиям раз-
работки проекта.Результаты расчётов приве-
дены в таблице 6.1.1.

                            Таблица 6.1.1 
┌──────────────┬───────┬────────┬────────┐ 
│    Стадия    │Затраты│Поправо-│ Затраты│ 
│  разработки  │времени│  чный  │ времени│ 
│   проекта    │ чел.- │ коэффи-│с учётом│ 
│              │  дни  │ циент  │п.коэфф.│ 
├──┬───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │постановки │       │0,65·0,6│   12   │ 
│  │задачи     │       │        │        │ 
│ТЗ├───────────┤   31  ├────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │ПО         │       │0,35·0,6│    7   │ 
├──┼───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │постановки │       │0,7·0,6 │   27   │ 
│  │задачи     │       │        │        │ 
│ЭП├───────────┤   67  ├────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │ПО         │       │0,3·0,6 │   12   │ 
├──┼───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │постановки │   57  │ 1,07x  │   21   │ 
│  │задачи     │       │x0,6·0,6│        │ 
│ТП├───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │ 1,07x  │        │ 
│  │ПО         │   21  │x0,6·0,6│    8   │ 
├──┼───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │        │        │ 
│  │постановки │   23  │ 1,46x  │   11   │ 
│  │задачи     │       │x0,6·0,6│        │ 
│РП├───────────┼───────┼────────┼────────┤ 
│  │Разработчик│       │ 1,46x  │        │ 
│  │ПО         │  104  │x0,6·0,6│   54   │ 
├──┼───────────┼───────┼────────┼────────┤ 
│В │Разработчик│       │        │        │ 
│н │постановки │   14  │ 0,968x │    5   │ 
│е │задачи     │       │x0,6·0,6│        │ 
│д ├───────────┼───────┼────────┼────────┤ 
│р │Разработчик│       │ 0,968x │        │ 
│. │ПО         │   21  │x0,6·0,6│    7   │ 
├──┴───────────┼───────┼────────┼────────┤ 
│ Всего        │  338  │        │   164  │ 
└──────────────┴───────┴────────┴────────┘ 

   Численность исполнителей рассчитывается
исходя  из планового фонда рабочего време-
ни, который составляет 80 дней,по формуле:

                ТОбщ
            Ч = ──── [чел],
                  Ф

   где ТОбщ - суммарные затраты времени на
всех стадиях разработки; Ф - плановый фонд
рабочего времени.

  ТОбщ=164 чел.-дней, Ф=80 раб. дней.

               164
            Ч = ─── = 2,05 чел.
                80

   Затраты машинного времени составляют:

            33·1,32 ў 44 дня.

────────────────────────────────────────── 

   6.2. Построение ленточного графика

   Ленточный график представляет собой та-
блицу, где  перечислены наименования видов
работ, должности исполнителей,трудоёмкость
и длительность выполнения каждого вида ра-
бот. Продолжением таблицы является график,
отражающий  продолжительность каждого вида
работ в виде отрезков времени,которые рас-
полагаются в соответствии с последователь-
ностью выполнения работ [14].
   Для построения ленточного графика испо-
льзуются следующие исходные данные:

 общая трудоёмкость разработки;
 трудоёмкость отдельных стадий;
 планируемый  срок разработки (80 рабо- 
чих дней); 
 необходимый состав исполнителей (руко- 
водитель, инженер-разработчик). 

 Исходя из полученных в п. 6.1. данных по-
строим ленточный график (рис.6.2.1).

┌───┬──┬─────────────────────────────────┐ 
Ста-Вре- Продолжительность работы,недели │ 
│дия│мя├─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┤ 
разр.ис-1│ │3│ │5│ │7│ │9│ 11│ 13│ 15│ 17│ 
пр-та п│ │2│ │4│ │6│ │8│ 10│ 12│ 14│ 16│ │ 
├───┼──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 
│ТЗ │ 9│5│4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 
│ЭП │19│ │1│5│4│5│4│ │ │ │ │ │ │ │ │ │ │ │ 
│ТП │14│ │ │ │ │ │1│5│5│3│ │ │ │ │ │ │ │ │ 
│РП │32│ │ │ │ │ │ │ │ │2│5│6│2│3│6│5│3│ │ 
Внед. 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │2│4│ 
├───┼──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 
Всего80│5│5│5│4│5│5│5│5│5│5│6│2│3│6│5│5│4│ 
└───┴──┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ 

     Рис. 6.2.1. Ленточный график.

────────────────────────────────────────── 

  6.3. Составление сметы на разработку

   Себестоимость   программного   продукта
складывается из следующих видов затрат:

1. заработная  плата разработчиков (услов- 
ная,принятая за основу на предприятии) за
80 рабочих дней, с учетом занятости руко-
водителя  данным  проектом в 25% времени.
При  этом рабочий месяц  приравнивается к
21 рабочему дню:

 (5000·0,25+3100)·80/21 = 13059,52 руб;

2. дополнительная  заработная плата разра- 
 ботчиков,составляющая 10% от суммы пункта
1:

      13059,52·0,10 = 1305,95 руб;

3. отчисления на социальные нужды, состав- 
ляющие 36% от суммы пунктов 1 и 2:

 0,36·(13059,52+1305,95) = 5171,57 руб;

4. затраты на машинное время: 
 амортизация ЭВМ:
- норма амортизации: 25,3 руб/день;
- эксплуатация ЭВМ длится 44 рабочих дня:

         25,3·44 = 1113,20 руб;

 затраты на электроэнергию:
- мощность ЭВМ: 0,2 кВт;
- эксплуатация ЭВМ длится 44 рабочих дня;
- рабочий день составляет 8 часов;
- стоимость 1 кВт-часа электроэнергии рав-
на 0,89 руб:

       448·0,2·0,89 = 62,66 руб;

 затраты на программное обеспечение:
- используемые средства разработки созданы
на предприятии;
- на ЭВМ установлена ОС Windows'98;
- срок амортизации ОС: 2 года;
- эксплуатация ЭВМ длится 44 рабочих дня;
- год включает 250 рабочих дней;
- стоимость дистрибутива ОС: 3100 руб;
- поскольку  данная  ОС  используется  для
других задач, кроме разработки ПО СЛА, то
вводится   коэффициент  использования  ОС
проектировщиками СЛА, равный 0,5:

        44
      ─────·3100·0,5 = 136,40 руб;
      250·2

   Себестоимость программного продукта:

   13059,52+1305,95+5171,57+1113,20+
     +62,66+136,40 = 20849,30 руб.

Уровень рентабельности программного проду-
кта  закладывается  предприятием на уровне 
25% от себестоимости: 

      20849,30·0,25 = 5212,32 руб.

   В цену  программного продукта включают-
ся:
 себестоимость (20849,30 руб);
 рентабельность (5212,32 руб);
 налог на добавленную стоимость (20%):

 0,2·(20849,30+5212,32) = 5212,32 руб.

   Таким образом, цена программного проду-
кта составит:
                          ┌─────────────┐
20849,30+5212,32+5212,32 =│31273,94 руб.│
                          └─────────────┘ 
────────────────────────────────────────── 

      6.4. Выводы по экономической
  эффективности программного продукта

   Внедрение  разработанного  программного
продукта позволит:

 повысить  качество, объём, технический 
уровень  и скорость  выполняемых с помощью 
программы работ; 
 увеличить объёмы и сократить сроки пе- 
реработки информации; 
 улучшить показатели  основной деятель- 
ности предприятия. 

   Расчёт  по  экономической эффективности
представлен в таблице 6.4.1.

                           Таблица 6.4.1. 
┌──────────────┬────────────┬────────────┐ 
│              │   Ручная   │  Наладка с │ 
│              │  наладка   │ помощью СЛА│ 
├──────────────┼────────────┼────────────┤ 
│Трудоёмкость  │            │            │ 
│решения одной │            │            │ 
│задачи,       │     25     │      3     │ 
│чел.-час.     │            │            │ 
├──────────────┼────────────┼────────────┤ 
│Количество    │            │            │ 
│задач, решае- │     50     │     50     │ 
│мых за год    │            │            │ 
├──────────────┼────────────┼────────────┤ 
│Часовая ста-  │            │            │ 
│вка, руб.     │     15     │     15     │ 
├──────────────┼────────────┼────────────┤ 
│Стоимость ча- │            │            │ 
│са машинного  │     -      │    25,3    │ 
│времени, руб. │            │            │ 
├──────────────┼────────────┼────────────┤ 
│Затраты при   │            │            │ 
│расчёте       │ 25·50·15 = │3·(15+25,3)x│ 
│за год, руб.  │   = 30000  │ x50 = 6045 │ 
└──────────────┴────────────┴────────────┘ 

   Годовая экономия:

        30000-6045 = 23955 руб.

   Срок окупаемости:

    31273,94
    ──────── ў 1,3 года ў 16 месяцев.
      23955





Другие статьи номера:

Sofтинка - Новая версия триколорного редактора 8 color editor v 0.04. Улучшения, результаты тестирования и список изменений.

Inferno - Об оболочке.

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Комментарии к тексту диплома.

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 1.

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 2.

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 3.

Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 4.

Inferno - Вступление от редакторов.

Inferno - Авторы журнала.

Размышления - В гостях у Кристобаля ХУНТЫ. Методика оценки фантастических произведений и способы придумывания новых фантастических идей.

Размышления - Как стать писателем. Руководство.

Inferno - Письма в редакцию.

Поэзия - Стих "Кто я?"

Возможности Спектрума - Pseudo-Color: миф или реальность? Алгоритм перевод чёрно-белого изображения в цветное.

Gamedev - WORM-255F. Код игры Питон размером в 255 байт с комментариями.

Юмор - Литературные анекдоты.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Ресурсы - ZX-Spectrum: ресурсы в Интернет - 3...
Зигзаг - ЗИГЗАГ - так называется новая руБрика журнала.
Софт - о глюках в NICRON'е.
Обратная связь - Пару слов об Оптроне 27. К вопросу о прикладном применении Спектрума.
Реклама - Вниманию владельцев ZX Spectrum!

В этот день...   25 апреля