Страница: 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