Регистратор дискретных сигналов

Страница: 8/9

При чтении из 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

0103 75A80C 3 MOV IE, #00001100b

0106 758991 4 MOV TMOD, #10010001b

0109 758844 5 MOV TCON, #01000100b

010C 758000 6 MOV P0, #0h

010F 75A000 7 MOV P2, #0h

0112 7E05 8 MOV R6, #5h

0114 7930 9 MOV R1, #30h

0116 8E90 10 CON: MOV P1, R6

0118 3094FD 11 JNB P1.4, $

011B E580 12 MOV A, P0

011D F8 13 MOV R0, A

011E 75F0A0 14 MOV B, #0A0h

0121 A4 15 MUL AB

0122 9450 16 SUBB A, #50h

0124 A7E0 17 MOV @R1, 0E0h

0126 09 18 INC R1

0127 DEED 19 DJNZ R6, CON

0129 E8 20 MOV A, R0

012A 20E708 21 JB ACC.7,GRR

012D B4340C 22 CJNE A, #34h, NORM

0130 4008 23 JC ERROR

0132 30E707 24 JNB ACC.7,NORM

0135 B4A304 25 GRR: CJNE A, #0A3h, NORM

0138 4002 26 JC NORM

013A D2A7 27 ERROR: SETB P2.7

013C E590 28 NORM: MOV A, P1

013E 55F0 29 ANL A, 0F0h

0140 F535 30 MOV 35h, A

0142 C299 31 INTT1: CLR TI

0144 7588FF 32 MOV TCON, #0FFh

0147 7598DC 33 MOV SCON, #11011100B

014A 758920 34 MOV TMOD, #20h

014D D299 35 SETB TI

014F 3099FD 36 JNB TI, $

0152 E599 37 MOV A, SBUF

0154 C299 38 CLR TI

0156 B4060F 39 CJNE A, #6h, DD

0159 F9 40 MOV R1, A

015A E7 41 MOV A, @R1

015B C9 42 XCH A, R1

015C 7430 43 MOV A, #30h

015E 29 44 ADD A, R1

015F C9 45 XCH A, R1

0160 E7 46 MOV A, @R1

0161 F599 47 MOV SBUF, A

0163 3099FD 48 JNB TI, $

0166 2176 49 AJMP ENDD

0168 7936 50 DD: MOV R1, #36h

OMCS-51 MACRO ASSEMBLER VSKURS1

PAGE 2

016A 7E03 51 MOV R6, #3h

016C 8999 52 CC: MOV SBUF, R1

016E 3099FD 53 JNB TI, $

0171 C299 54 CLR TI

0173 09 55 INC R1

0174 DEF6 56 DJNZ R6, CC

0176 75B000 57 ENDD: MOV P3, #0h

0179 2106 58 AJMP BEGIN

017B 00 59 NOP

0013 60 ORG 0013h

0013 120030 61 CALL INTERRUPT

0016 32 62 RETI

0017 00 63 NOP

001B 64 ORG 001Bh

001B 120053 65 CALL TIMERFULL

001E 32 66 RETI

0030 67 ORG 030h

0030 00 68 INTERRUPT: NOP

Реферат опубликован: 26/06/2009