P O L I T E C H N I K A L U B E L S K A
w Lublinie
SPRAWOZDANIE
LABORATORIUM Z TECHNIK MIKROPROCESOROWYCH |
Ćwiczenie nr 1 |
TEMAT: SKRZYŻOWANIE Z SYGNALIZACJĄ ŚWIETLNĄ |
Data: 2008-02-25 |
RACHWAŁ MAREK ID6.3
|
|
ZAD. 1
Zróżnicowanie długości świecenia świateł dla drogi poziomej i pionowej (jedna z dróg główna).
Skrzyżowanie o timerze 0 przy czym przejazd poziomo dla samochodów jest dłuższy niż przejazd pionowo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
0100: 0100: 75 B9 01 0103: 75 BC 4C 010A: 74 80 010C: F2
010D: 78 2B 010F: 79 29
0111: 0111: 7F DB 0113: 7A 01
0115: 0115: EA 0116: 31 47 0116: F3
0119: EA 011A: 31 51 011C: F2 011D: FB
011E: EA 011F: 31 5B 0121: FC
0122: EA 0123: 31 65 0125: FD
0126: EA 0127: 31 6F 0129: 12 B1 0C 012C: 12 81 00
012F: 012F: 74 14
013C: EB 013D: 6C 013E: FB 013F: F2
0140: DD ED
0142: 0A 0143: DF D0
0145: B0 CA
0147: 0147: B3 0148: 22 0149: F3 F5 F6 014D: DE EE F6
0151: 0151: B3 0152: 22 0153: F6 F6 FA 0157: F9 F9 FA
015B: 015B: B3 015C: 22 015D: 00 0B 0B 0161: 00 02 00
0165: 0165: B3 0166: 22 0167: 14 08 04
016F: 016F: 23 0170: C0 E0 0172: 31 EF 0174: F5 B2
0176: D0 E0 0178: 14 0179: 31 EF 17B: F5 B3 017D: 22
017E: 017E: 50 52 5A
018F: 018F: 5A 4D 49 019F: 5A 4F 4C
01A6: 01A6: 5A 4D 49 01B6: 43 5A 45
01BF: 01BF: 5A 4D 49 01CF: 43 5A 45
01DE: 01DE: 50 52 5A
01EF: 01EF: E3 01F0: 22
01F1: 01 7E 01 01F9: 01 DE 01
|
;TITLE 'DSM51-M01 SKRZYŻOWANIE' ;************************************** ;Program ustawia 8 kolejnych stanów świateł na skrzyżowaniu ;1 - przejazd samochodów poziomo (i przejście poziomo pieszych) ;2 - zmiana świateł - żółte dla samochodów jadących poziomo ; - zielone mrugające dla pieszych ;3 - zmiana świateł - czerwone dla samochodów jadących poziomo ; - czerwone dla pieszych ;4 - zmiana świateł - czerwone z żółtym dla samochodów w pionie ;5 - przejazd samochodów pionowo (i przejście pionowo pieszych) ;6 - zmiana świateł - żółte dla samochodów jadących pionowo ; - zielone mrugające dla pieszych ;7 - zmiana świateł - czerwone dla samochodów jadących pionowo ; - czerwone dla pieszych ;8 - zmiana świateł - czerwone z żółtym dla samochodów w poziomie
;************************************** ;Ustawienie układu 8255 ;PORT A - WYJŚCIE MOD 0 - światła dla pieszych ;przejście pionowo ;A0 -> czerwone ;A1 -> zielone ;przejście poziomo ;A2 -> czerwone ;A3 -> zielone
;PORT B - WYJŚCIE MOD 0 - światła dla samochodów ;przejazd pionowo ;B3 -> czerwone ;B4 -> żółte ;B5 -> zielone ;przejazd poziomo ;B0 -> czerwone ;B1 -> żółte ;B2 -> zielone
;PORT C - WYJŚCIE - nieużywane
SET_8255 EQU 10000000B
;************************************** LJMP START
;************************************** ORG 100H START: MOV R0,#CS55D ;inicjalizacja 8255 MOV A,#SET_8255 MOVX @R0,A
MOV R0,#CS55A ;port A - światła dla pieszych MOV R1,#CS55B ;port B - światła dla samochodów
;************************************** ;kolejne powtórzenie wszystkich stanów świateł na skrzyżowaniu LOOP: MOV R7,#8 ;8 stanów świateł na skrzyżowaniu MOV R2,#1 ;stan pierwszy
;************************************** ;ustawienie kolejnego stanu świateł STAN: MOV A,R2 ;światła dla samochodów ACALL SET_AUTO ;dla stanu numer (R2) MOVX @R1,A
MOV A,R2 ;światła dla pieszych ACALL SET_PEOPLE ;dla stanu numer (R2) MOVX @R0,A MOV R3,A ;zapamiętaj status pieszych
MOV A,R2 ;mruganie świateł dla pieszych ACALL SET_BLINK ;dla stanu numer (R2) MOV R4,A ;zapamiętaj status mrugania
MOV A,R2 ;czas świateł w stanie numer (R2) ACALL SET_TIME ;N * 0.5 sek MOV R5,A ;zapamiętaj czas
MOV A,R2 ;text na wyświetlacz LCD ACALL SET_TEXT ;dla stanu numer (R2) LCALL LCD_CLR LCALL WRITE_TEXT
;************************************** ;odliczanie czasu jednego stanu z dokładnością 0.5 sek ;mruganie świateł dla pieszych jeżli to konieczne ;z częstotliwością 1Hz BLINK: MOV A,#20 LCALL DELAY_100MS
MOV A,R3 ;mruganie świateł dla pieszych XRL A,R4 ;-zmiana stanu na przeciwne MOV R3,A ;dla wybranych świateł MOVX @R0,A
DJNZ R5,BLINK ;czas = R5 * 0.5 sek
INC R2 ;kolejny stan DJNZ R7,STAN
SJMP LOOP ;rozpocznij od pierwszego stanu
;************************************** ;dane do zapalenia świateł dla samochodów w 8 kolejnych stanach SET_AUTO: MOVC A,@A+PC RET DB 11110011B,11110101B,11110110B,11100110B DB 11011110B,11101110B,11110110B,11110100B
;************************************** ;dane do zapalenia świateł dla pieszych w 8 kolejnych stanach SET_PEOPLE: MOVC A,@A+PC RET DB 11110110B,11110110B,11111010B,11111010B DB 11111001B,11111001B,11111010B,11111010B
;************************************** ;dane do mrugania świateł dla pieszych w 8 kolejnych stanach ;1-mruganie odpowiedniego światła SET_BLINK: MOVC A,@A+PC RET DB 00000000B,00001000B,00000000B,00000000B DB 00000000B,00000010B,00000000B,00000000B
;************************************** ;czas kolejnych stanów wyrażony w 0.5 sek SET_TIME: MOVC A,@A+PC RET DB 25,8,4,4,15,8,4,4
;************************************** ;pobranie adresu tekstu dla kolejnego stanu SET_TEXT: RL A PUSH ACC ACALL SET_TXT MOV DPL,A
POP ACC DEC A ACALL SET_TXT MOV DPH,A RET
;************************************** ;teksty opisujące stan na skrzyżowaniu w kolejnych stanach TEXT1: DB 'PRZEJAZD POZIOMO',0
TEXT2: DB 'ZMIANA SWIATEL ' DB 'ZOLTE ',0
TEXT3: DB 'ZMIANA SWIATEL ' DB 'CZERWONE',0
TEXT4: DB 'ZMIANA SWIATEL ' DB 'CZERWONE ZOLTE',0
TEXT5: DB 'PRZEJAZD PIONOWO',0
;************************************** SET_TXT: MOVC A,@A+PC RET
DW TEXT1,TEXT2,TEXT3,TEXT4 DW TEXT5,TEXT2,TEXT3,TEXT4
;END |
ZAD. 2
Ciągłe mruganie świateł żółtych.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
0100: 0100: 75 B9 01 0103: 75 BC 4C 010A: 74 80 010C: F2
010D: 78 2B 010F: 79 29
0109: 74 FF 0108: F2 010C: 010C: 7F ED 010E: F3
010F: 74 05 0111:12 B1 12 0114: 74 FF 0116: F3
0117: 74 05 0119: 12 81 12
011C: B0 EE |
SET_8255 EQU 10000000B
;************************************** LJMP START
;************************************** ORG 100H START: MOV R0,#CS55D ;inicjalizacja 8255 MOV A,#SET_8255 MOVX @R0,A
MOV R0,#CS55A ;port A - światła dla pieszych MOV R1,#CS55B ;port B - światła dla samochodów
MOV A,#11111111B MOV @R0,A LOOP: MOV A,#11101101B MOVX @R1,A
MOV A,#5 LCALL DELAY_100MS MOV A,#11111111B MOVX @R1,A
MOV A,#5 LCALL DELAY_100MS
SJMP LOOP |
ZAD. 3
Działanie skrzyżowania jak w zad.1 ale naciśnięcie na klawiaturze matrycowej przycisku „0” powoduje włączenie stanu alarmowego (mruganie świateł żółtych). Wciśnięcie przycisku „1” powoduje powrót do normalnej pracy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
0100: 0100: 75 B9 01 0103: 75 BC 4C 010A: 74 80 010C: F2
010D: 78 2B 010F: 79 29
0111: 0111: 7F DB 0113: 7A 01
0115: 0115: EA 0116: 31 47 0116: F3
0119: EA 011A: 31 51 011C: F2 011D: FB
011E: EA 011F: 31 5B 0121: FC
0122: EA 0123: 31 65 0125: FD
0126: EA 0127: 31 6F 0129: 12 B1 0C 012C: 12 81 00
012F: 012F: 74 14
013C: EB 013D: 6C 013E: FB 013F: F2
0140: DD ED
0142: 0A 0143: DF D0
0145: B0 CA
0147: 0147: B3 0148: 22 0149: F3 F5 F6 014D: DE EE F6
0151: 0151: B3 0152: 22 0153: F6 F6 FA 0157: F9 F9 FA
015B: 015B: B3 015C: 22 015D: 00 0B 0B 0161: 00 02 00
0165: 0165: B3 0166: 22 0167: 14 08 04
016F: 016F: 23 0170: C0 E0 0172: 31 EF 0174: F5 B2
0176: D0 E0 0178: 14 0179: 31 EF 17B: F5 B3 017D: 22
017E: 017E: 50 52 5A
018F: 018F: 5A 4D 49 019F: 5A 4F 4C
01A6: 01A6: 5A 4D 49 01B6: 43 5A 45
01BF: 01BF: 5A 4D 49 01CF: 43 5A 45
01DE: 01DE: 50 52 5A
01EF: 01EF: E3 01F0: 22
01F1: 01 7E 01 01F9: 01 DE 01
|
;TITLE 'DSM51-M01 SKRZYŻOWANIE' ;************************************** ;Program ustawia 8 kolejnych stanów świateł na skrzyżowaniu ;1 - przejazd samochodów poziomo (i przejście poziomo pieszych) ;2 - zmiana świateł - żółte dla samochodów jadących poziomo ; - zielone mrugające dla pieszych ;3 - zmiana świateł - czerwone dla samochodów jadących poziomo ; - czerwone dla pieszych ;4 - zmiana świateł - czerwone z żółtym dla samochodów w pionie ;5 - przejazd samochodów pionowo (i przejście pionowo pieszych) ;6 - zmiana świateł - żółte dla samochodów jadących pionowo ; - zielone mrugające dla pieszych ;7 - zmiana świateł - czerwone dla samochodów jadących pionowo ; - czerwone dla pieszych ;8 - zmiana świateł - czerwone z żółtym dla samochodów w poziomie
;************************************** ;Ustawienie układu 8255 ;PORT A - WYJŚCIE MOD 0 - światła dla pieszych ;przejście pionowo ;A0 -> czerwone ;A1 -> zielone ;przejście poziomo ;A2 -> czerwone ;A3 -> zielone
;PORT B - WYJŚCIE MOD 0 - światła dla samochodów ;przejazd pionowo ;B3 -> czerwone ;B4 -> żółte ;B5 -> zielone ;przejazd poziomo ;B0 -> czerwone ;B1 -> żółte ;B2 -> zielone
;PORT C - WYJŚCIE - nieużywane
SET_8255 EQU 10000000B
;************************************** LJMP START
;************************************** ORG 100H START: MOV R0,#CS55D ;inicjalizacja 8255 MOV A,#SET_8255 MOVX @R0,A
MOV R0,#CS55A ;port A - światła dla pieszych MOV R1,#CS55B ;port B - światła dla samochodów
;************************************** ;kolejne powtórzenie wszystkich stanów świateł na skrzyżowaniu LOOP: MOV R7,#8 ;8 stanów świateł na skrzyżowaniu MOV R2,#1 ;stan pierwszy
;************************************** ;ustawienie kolejnego stanu świateł STAN: MOV A,R2 ;światła dla samochodów ACALL SET_AUTO ;dla stanu numer (R2) MOVX @R1,A
MOV A,R2 ;światła dla pieszych ACALL SET_PEOPLE ;dla stanu numer (R2) MOVX @R0,A MOV R3,A ;zapamiętaj status pieszych
MOV A,R2 ;mruganie świateł dla pieszych ACALL SET_BLINK ;dla stanu numer (R2) MOV R4,A ;zapamiętaj status mrugania
MOV A,R2 ;czas świateł w stanie numer (R2) ACALL SET_TIME ;N * 0.5 sek MOV R5,A ;zapamiętaj czas
MOV A,R2 ;text na wyświetlacz LCD ACALL SET_TEXT ;dla stanu numer (R2) LCALL LCD_CLR LCALL WRITE_TEXT
;************************************** ;odliczanie czasu jednego stanu z dokładnością 0.5 sek ;mruganie świateł dla pieszych jeżli to konieczne ;z częstotliwością 1Hz BLINK: MOV A,#10
L1: JNB TF0,3 MOV TH0,#76 CLR TF0 DJNZ ACC,L1
MOV A,R3 ;mruganie świateł dla pieszych XRL A,R4 ;-zmiana stanu na przeciwne MOV R3,A ;dla wybranych świateł MOVX @R0,A
DJNZ R5,BLINK ;czas = R5 * 0.5 sek
INC R2 ;kolejny stan DJNZ R7,STAN
LJMP LOOP ;rozpocznij od pierwszego stanu
;************************************** AWARIA: MOV A,#11111111B MOVX @R0,A MOV R1,#CS55B MOV A,#11101101B MOVX @R1,A
MOV A,#5 LCALL DELAY_100MS
MOV A,#11111111B MOVX @R1,A
MOV A,#5 LCALL DELAY_100MS
MOV R1,#CSKBO MOVX A,@R1 JNB ACC.1,LOOP
LJMP AWARIA
;*************************************** ;dane do zapalenia świateł dla samochodów w 8 kolejnych stanach SET_AUTO: MOVC A,@A+PC RET DB 11110011B,11110101B,11110110B,11100110B DB 11011110B,11101110B,11110110B,11110100B
;************************************** ;dane do zapalenia świateł dla pieszych w 8 kolejnych stanach SET_PEOPLE: MOVC A,@A+PC RET DB 11110110B,11110110B,11111010B,11111010B DB 11111001B,11111001B,11111010B,11111010B
;************************************** ;dane do mrugania świateł dla pieszych w 8 kolejnych stanach ;1-mruganie odpowiedniego światła SET_BLINK: MOVC A,@A+PC RET DB 00000000B,00001000B,00000000B,00000000B DB 00000000B,00000010B,00000000B,00000000B
;************************************** ;czas kolejnych stanów wyrażony w 0.5 sek SET_TIME: MOVC A,@A+PC RET DB 25,8,4,4,15,8,4,4
;************************************** ;pobranie adresu tekstu dla kolejnego stanu SET_TEXT: RL A PUSH ACC ACALL SET_TXT MOV DPL,A
POP ACC DEC A ACALL SET_TXT MOV DPH,A RET
;************************************** ;teksty opisujące stan na skrzyżowaniu w kolejnych stanach TEXT1: DB 'PRZEJAZD POZIOMO',0
TEXT2: DB 'ZMIANA SWIATEL ' DB 'ZOLTE ',0
TEXT3: DB 'ZMIANA SWIATEL ' DB 'CZERWONE',0
TEXT4: DB 'ZMIANA SWIATEL ' DB 'CZERWONE ZOLTE',0
TEXT5: DB 'PRZEJAZD PIONOWO',0
;************************************** SET_TXT: MOVC A,@A+PC RET
DW TEXT1,TEXT2,TEXT3,TEXT4 DW TEXT5,TEXT2,TEXT3,TEXT4
;END |