Реферат: Регистратор дискретных сигналов
Бит С служит показателем конца ввода данных с ком-порта (1 – последний канал, ноль – не последний канал). Сохранение времени включения и выключения для нулевого канала начинается с ячейки с адресом 20Н; сначала записываются часы, затем минуты включения, затем часы и минуты выключения. Таким образом для каждого канала в памяти отводится 4 байта, общее количество оперативной памяти используемое программой 32 байта. Структура использования памяти описана в следующей таблице:
Адрес | Содержимое | Адрес | Содержимое |
20h | Таймер 1 часы включения | 21h | Таймер 1 минуты включения |
22h | Таймер 1 часы выключения | 23h | Таймер 1 минуты выключения |
24h | Таймер 2 часы включения | 25h | Таймер 2 минуты включения |
26h | Таймер 2 часы выключения | 27h | Таймер 2 минуты выключения |
28h | Таймер 3 часы включения | 29h | Таймер 3 минуты включения |
2Аh | Таймер 3 часы выключения | 2Bh | Таймер 3 минуты выключения |
2Ch | Таймер 4 часы включения | 2Dh | Таймер 4 минуты включения |
2Eh | Таймер 4 часы выключения | 2Fh | Таймер 4 минуты выключения |
30h | Таймер 5 часы включения | 31h | Таймер 5 минуты включения |
32h | Таймер 5 часы выключения | 33h | Таймер 5 минуты выключения |
34h | Таймер 6 часы включения | 35h | Таймер 6 минуты включения |
36h | Таймер 6 часы выключения | 37h | Таймер 6 минуты выключения |
38h | Таймер 7 часы включения | 39h | Таймер 7 минуты включения |
3Ah | Таймер 7 часы выключения | 3Bh | Таймер 7 минуты выключения |
3Ch | Таймер 8 часы включения | 3Dh | Таймер 8 минуты включения |
3Eh | Таймер 8 часы выключения | 3Fh | Таймер 8 минуты выключения |
При чтении из CОМ порта принята следующая расшифровка принимаемых байтов. Один блок составляет 5 байтов: первый управляющий далее идут 4 байта с данными, в следующей последовательности: Часы включения канала – минуты включения канала – часы выключения канала – минуты выключения канала. Передача данных ведется в двоичной форме. Управляющий байт использует 4 младших бита, первые три несут номер канала в двоичном коде, четвертый показывает последний канал идет или нет (1 – последний, 0 – не последний). Если канал последний, то после приема 4 следующих байтов данных связь с портом прекратится, если нет, то продолжится с приема следующего управляющего байта.
Алгоритм обработки прерывания будет выглядеть следующим образом.
TF0 := 0;
R1 := R1+1;
If (R1<20) Then goto exit ;
R1 := 0;
R2 := R2+1;
If (R2<60) Then goto exit ;
R2 := 0;
R3 := R3+1;
For (i=0 to 7) do {
R0 := 20h + i*4 ;
If ( @R0+1 =R3) then if (@R0 = R4) then P[i] :=0;
If (@R0+3 = R3) Then if (@R0+2=R4) then P[i] :=1;};
If (R3<60) Then goto exit ;
R3 := 0;
R4 := R4+1;
If (R4<24) Then goto exit ;
R4 := 0;
Gosub Pause50; [Подпрограмма запуска таймера, будет поисана далее]
Return
3.2 Программа на языке ассемблера.
На языке ассемблера программа разделена на несколько процедур затем в главном модуле все процедуры связываются друг с другом так как это необходимо. Далее приводится подробное описание этих подпрограмм.
OMCS-51 MACRO ASSEMBLER VSKURS1
PAGE 1
loc obj line source
0100 1 ORG 100h
0100 75B80C 2 MOV IP, #00001100b