m3


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 3

TEMAT: Licznik obiektów.

Data:

2008-03-31

RACHWAŁ MAREK ID6.3

Budowa i zasada działania

Licznik obiektów (model M-03) jest przystawką systemu DSM-51. Przystawka ta, zawierająca fotokomórkę, przeznaczona jest do zliczania przesuwających się obiektów. Dzięki zastosowaniu dwóch fototranzystorów umieszczonych naprzeciw diody emitującej promieniowanie podczerwone, możliwe jest określenie nie tylko liczby obiektów przecinających wiązkę promieniowania, ale także kierunku ich ruchu i czasu przejścia (prędkości ruchu). Zastosowane w modelu układy różniczkujące, generujące krótkie impulsy w momencie zasłaniania i odsłaniania każdego z fototranzystorów, umożliwiają obsługę przystawki z wykorzystaniem zgłoszenia przerwania zewnętrznego. Diody emitujące promieniowanie podczerwone wymagają zazwyczaj zasilania stosunkowo dużym prądem. System mikroprocesorowy może decydować o zapaleniu i zgaszeniu diody nadawczej w przystawce. Umożliwia to pisanie programów oszczędnie gospodarujących energią. Układ licznika obiektów podłącza się do złącza wejść / wyjść cyfrowych systemu DSM-51.

0x01 graphic

Informacje z modelu, jak i sygnały sterujące są przesyłane przez port C układu 8255. Port C powinien być tak ustawiony aby jego starsza część (PC4...7) była ustawiona jako wyjście, natomiast młodsza część (PC0...4) jako wejście. Schemat blokowy modelu przedstawia rysunek 1. Dioda D1, emitująca promieniowanie podczerwone, jest sterowana linią PC4. Ustawienie na linii PC4 stanu logicznego 0 powoduje włącznie diody D1. Promieniowanie z diody dociera do fototranzystorów T1 i T2 powodując ich przewodzenie. Stan fototranzystorów jest sygnalizowany odpowiednio przez diody D2 (dla T1) i D3 (dla T2). Informacja o stanie fototranzystora T1 może być również odczytana na linii PC1, a fototranzystora T2 na linii PC2. Stan 0 na odpowiedniej linii (i świecenie diody) oznacza, że fototranzystor nie jest oświetlony promieniami podczerwonymi (jest zasłonięty lub dioda D1 jest wyłączona). Dodatkowo sygnały z fototranzystorów podawane są na układy różniczkujące generujące dodatnie impulsy przy każdorazowej zmianie stanu tych sygnałów. Te impulsy podawane są odpowiednio na linie PC0 (dla T1) i PC3 (dla T2). Linie te są włączone w system przerwań w DSM-51 umożliwiając przerwaniom ą obsługę każdej zmiany fototranzystorów.

1 ;TITLE 'LICZNIK OBIEKTŕW'

2 ;**************************************

3 ;Program liczy obiekty przesuwajĄce si© przez model M-03.

4 ;Obiekty przesuwajĄce si© z g˘ry na d˘ˆ sĄ dodawane do licznika.

5 ;Obiekty przesuwajĄce si© z doˆu do g˘ry sĄ odejmowane od licznika.

6 ;Program liczy tylko obiekty duľe, kt˘re w czasie przesuwania

7 ;si© przesˆaniajĄ w jakim˜ momencie oba tory podczerwieni

8 ;jednocze˜nie.

9 ;Obiekty maˆe, kt˘re ani na chwil© nie przesˆaniajĄ obu

10 ;tor˘w podczerwieni jednocze˜nie, sĄ uznawane za zakˆ˘cenia.

11 ;Liczba obiekt˘w jest wy˜wietlana na wy˜wietlaczu LCD jako liczba

12 ;hexalna bez znaku.

13

14 ;**************************************

15 ;uľywane rejestry

16 ;R1 - adresowanie urzĄdzeä we/wy

17 ;R2 - licznik obiekt˘w

18 ;R3 - licznik ostatnio wy˜wietlonej liczby obiekt˘w

19 ;R7 - licznik kolejnych faz ruchu pojedyäczego obiektu

20 ;R6 - licznik prawidˆowych faz ruchu obiektu 'z g˘ry'

21 ;R5 - licznik prawidˆowych faz ruchu obiektu 'z doou'

22

23 B0R3 EQU 3 ;adres rejestru R3 z banku 0

24

25 INT55 EQU P1.1 ;uaktywnienie przerwaä 8255

26

27 ;Ustawienie ukadu 8255

28 ;PORT A - WEJ—CIE MOD 0 - nieuľywane

29 ;PORT B - WEJ—CIE MOD 0 - nieuľywane

30 ;PORT CA - WYJ—CIE

31 ;C4=0 -> zapalenie LEDa podczerwonego

32 ;PORT CB - WEJ—CIE

33 ;C1=0 -> tor 1 przessoni©ty

34 ;C2=0 -> tor 2 przessoni©ty

35 ;C0(IPB)=impuls dodatni - zmiana w torze 1

36 ;C3(IPA)=impuls dodatni - zmiana w torze 2

37 SET_8255 EQU 10010011B

38

39

40 ;**************************************

41 0000: 02 01 00 LJMP START

42

43 ;**************************************

44 ORG 13H

45 ;obssuga przerwania z wejjcia INT1

46 0013: C0 E0 PUSH ACC ;przechowanie akumulatora

47 0015: C0 D0 PUSH PSW ;i rejestru stanu na stosie

48

49 0017: 79 00 MOV R1,#CSIC ;odczyt ze sterownika przerwaä

50 0019: E3 MOVX A,@R1 ;numeru przerwania

51 001A: 54 03 ANL A,#03H

52 001C: F3 MOVX @R1,A ;skasowanie przerwania

53

54 001D: B4 03 0B CJNE A,#3,INT_NO3 ;inne przerwanie

55

56 ;przerwanie IPB - TOR 1

57 0020: 0F INC R7 ;licznik kolejnych faz ruchu obiektu

58 0021: EF MOV A,R7

59 0022: 20 E0 03 JB ACC.0,T1_KIER_OK

60 0025: 0D INC R5 ;przy kierunku nieprawiddowym przerwanie

61 ;IPB dla 2 i 4 fazy ruchu

62 0026: 80 0F SJMP OBIEKT

63 0028: T1_KIER_OK: ;przy kierunku prawiddowym przerwanie

64 0028: 0E INC R6 ;IPB dla 1 i 3 fazy ruchu

65 0029: 80 0C SJMP OBIEKT

66

67 002B: INT_NO3:

68 002B: B4 02 22 CJNE A,#2,INT_END ;inne przerwanie-nie wystĄpi

69

70 ;przerwanie IPA - TOR 2

71 002E: 0F INC R7 ;licznik kolejnych faz ruchu obiektu

72 002F: EF MOV A,R7

73 0030: 30 E0 03 JNB ACC.0,T2_KIER_OK

74 0033: 0D INC R5 ;przy kierunku nieprawiddowym przerwanie

75 ;IPA dla 1 i 3 fazy ruchu

76 0034: 80 01 SJMP OBIEKT

77 0036: T2_KIER_OK: ;przy kierunku prawiddowym przerwanie

78 0036: 0E INC R6 ;IPB dla 1 i 3 fazy ruchu

79

80 0037: OBIEKT:

81 0037: 79 2A MOV R1,#CS55C ;odczyt stanu na porcie C 8255

82 0039: E3 MOVX A,@R1

83 003A: 54 0F ANL A,#0FH ;tylko mˆodsza cz©˜† jest wej˜ciem

84

85 003C: B4 06 11 CJNE A,#6,INT_END ;czy obiekt w kt˘rym˜ torze podczerwieni

86

87 ;obiekt juľ poza licznikiem - analiza kierunku ruchu i prawidˆowo˜ci przesuwu

88 003F: BF 04 08 CJNE R7,#4,INT_ERROR ;nie byo czterech faz ruchu

89 0042: BE 04 01 CJNE R6,#4,OK_NO ;ruch nie by 4 razy sklasyfikowany

90 ;jako w prawiddowym kierunku

91 0045: 0A INC R2 ;ruch prawiddowy - zwi©kszam licznik

92 0046: OK_NO:

93 0046: BD 04 01 CJNE R5,#4,INT_ERROR ;ruch nie byy 4 razy sklasyfikowany

94 ;jako w kierunku przeciwnym

95 0049: 1A DEC R2 ;ruch w kierunku przeciwnym

96

97 004A: INT_ERROR:

98 004A: 7F 00 MOV R7,#0 ;zerownie licznik˘w jednego obiektu

99 004C: 7E 00 MOV R6,#0

100 004E: 7D 00 MOV R5,#0

101

102 0050: INT_END:

103 0050: D0 D0 POP PSW ;odtworzenie rejestr˘w na koniec przerwania

104 0052: D0 E0 POP ACC

105 0054: 32 RETI

106

107 ;**************************************

108 ORG 0100H

109 0100: START:

110 0100: 79 2B MOV R1,#CS55D ;ustawienie ukkadu 8255

111 0102: 74 93 MOV A,#SET_8255

112 0104: F3 MOVX @R1,A

113

114 0105: 19 DEC R1

115 0106: 74 EF MOV A,#11101111B ;wˆĄczenie nadajnika IR

116 0108: F3 MOVX @R1,A

117

118 0109: 12 81 0C LCALL LCD_CLR ;wypisanie napisu na wy˜wietlaczu LCD

119 010C: 90 01 3A MOV DPTR,#TEXT

120 010F: 12 81 00 LCALL WRITE_TEXT

121

122 ;zerowanie sterownika przerwaä

123 0112: 79 10 MOV R1,#CSAD ;skasowanie ewentualnego przerwania

124 0114: E3 MOVX A,@R1 ;wystawianego przez przetwornik A/C

125

126 0115: 79 00 MOV R1,#CSIC ;skasowanie przerwaä 0..3

127 0117: E4 CLR A ;w sterowniku przerwaä

128 0118: F3 MOVX @R1,A

129 0119: 04 INC A

130 011A: F3 MOVX @R1,A

131 011B: 04 INC A

132 011C: F3 MOVX @R1,A

133 011D: 04 INC A

134 011E: F3 MOVX @R1,A

135

136 011F: E4 CLR A

137 0120: FF MOV R7,A ;wyzerowanie licznik˘w pojedyäczego obiektu

138 0121: FE MOV R6,A

139 0122: FD MOV R5,A

140

141 0123: FA MOV R2,A ;wyzerowanie licznik˘w obiekt˘w

142 0124: FB MOV R3,A

143

144 0125: D2 AF SETB EA ;wˆĄczenie przerwaä z wej˜cia INT1

145 0127: D2 AA SETB EX1 ;- tj. sterownika przerwaä

146 0129: C2 91 CLR INT55 ;uaktywnienie sterownika na przerwania

147 ;z ukkadu 8255

148

149 012B: LOOP:

150 012B: EA MOV A,R2

151 012C: B5 03 02 CJNE A,B0R3,WRITE ;zapis na LCD dla nowej wartooci licznika

152 012F: 80 FA SJMP LOOP

153

154 0131: WRITE:

155 0131: FB MOV R3,A ;zapami©tanie nowej wartooci licznika

156 0132: 31 59 ACALL KURSOR_2L ;przesuni©cie kursora o 2 pozycje w lewo

157 0134: EB MOV A,R3

158 0135: 12 81 04 LCALL WRITE_HEX ;wyywietlenie nowej wartooci licznika

159 0138: 80 F1 SJMP LOOP

160

161 ;**************************************

162 013A: TEXT:

163 DB 'Liczba obiektow GORA -> DOL 00',0

164 013A: 4C 69 63

013D: 7A 62 61

0140: 20 6F 62

0143: 69 65 6B

0146: 74 6F 77

0149: 20 47 4F

014C: 52 41 20

014F: 2D 3E 20

0152: 44 4F 4C

0155: 20 30 30

0158: 00

165 ;**************************************

166 ;podprogram przesuwajĄcy kursor o 2 pozycje w lewo

167 0159: KURSOR_2L:

168 0159: 74 10 MOV A,#10H ;kod rozkazu dla wy˜wietlacza LCD

169 015B: 12 81 06 LCALL WRITE_INSTR ;przesuni©cia kursora w lewo

170 015E: 74 10 MOV A,#10H

171 0160: 12 81 06 LCALL WRITE_INSTR

172 0163: 22 RET

173

174 ;**************************************

175 ;END

**************************************************************************

Żeby móc wyświetlić liczbę w postaci dziesiętnej należy uprzednio zamienić ją na kod BCD. Realizację tej procedury ukazuje poniższy fragment programu:

BCD:

MOV B,#10

DIV AB

SWAP A

ADD A,B

LCALL WRITE_HEX

RET

Powyższą procedurę należy wstawić w miejsce wywołania WRITE_HEX w linii 158 kodu programu. Procedura ta pozwala na wyświetlanie dwucyfrowych liczb w postaci dziesiętnej.

**************************************************************************

W celu sygnalizacji zliczania kolejnych elementów za pomocą buzera, należy po 91 linii kodu dopisać następujący fragment programu:

CLR P1.5

LCALL DELAY_100MS

SETB P1.5

Jeśli uprzednio nie wpiszemy żadnej wartości do akumulatora, to buzer wyda dźwięk długości 100ms. Należy zwrócić uwagę, by elementy nie pojawiały się częściej niż wskazujący na nie czas działania buzera, bo może to spowodować zapętlenie procedury.

**************************************************************************

Modyfikacja programu w tym ćwiczeniu miała polegać na przedstawieniu na wyświetlaczu zliczania obiektów w obie strony - „w górę” i „w dół”. Do tego celu wykorzystujemy dwa rejestry: R3 - do zliczania w jedna stronę i R4 - w drugą. Na początku należy wyzerować oba rejestry zliczające (w poniższym programie odpowiadają za to linie 142 i 143 kodu). W programie źródłowym wyświetlaliśmy jedną liczbę dwucyfrową. Teraz potrzebujemy czterech miejsc, dlatego dwukrotnie wywołujemy procedurę KURSOR_2L (linie 156, 157) przesuwającą kursor o dwa miejsca w lewo. Oto listing tego programu:

1 ;TITLE 'LICZNIK OBIEKTÓW'

2 ;**************************************

3 ;Program liczy obiekty przesuwające się przez model M-03.

4 ;Obiekty przesuwające się z góry na dół są dodawane do licznika.

5 ;Obiekty przesuwające się z dołu do góry są odejmowane od licznika.

6 ;Program liczy tylko obiekty duże, które w czasie przesuwania

7 ;się przesłaniają w jakimś momencie oba tory podczerwieni

8 ;jednocześnie.

9 ;Obiekty małe, które ani na chwilę nie przesłaniają obu

10 ;torów podczerwieni jednocześnie, są uznawane za zakłócenia.

11 ;Liczba obiektów jest wyświetlana na wyświetlaczu LCD jako liczba

12 ;hexalna bez znaku.

13

14 ;**************************************

15 ;używane rejestry

16 ;R1 - adresowanie urządzeń we/wy

17 ;R2 - licznik obiektów

18 ;R3 - licznik ostatnio wyświetlonej liczby obiektów

19 ;R7 - licznik kolejnych faz ruchu pojedyńczego obiektu

20 ;R6 - licznik prawidłowych faz ruchu obiektu 'z góry'

21 ;R5 - licznik prawidłowych faz ruchu obiektu 'z dołu'

22

23 0003 B0R3 EQU 3 ;adres rejestru R3 z banku 0

24

25 0091 INT55 EQU P1.1 ;uaktywnienie przerwań 8255

26

27 ;Ustawienie układu 8255

28 ;PORT A - WEJ—CIE MOD 0 - nieużywane

29 ;PORT B - WEJ—CIE MOD 0 - nieużywane

30 ;PORT CA - WYJ—CIE

31 ;C4=0 -> zapalenie LEDa podczerwonego

32 ;PORT CB - WEJ—CIE

33 ;C1=0 -> tor 1 przesłonięty

34 ;C2=0 -> tor 2 przesłonięty

35 ;C0(IPB)=impuls dodatni - zmiana w torze 1

36 ;C3(IPA)=impuls dodatni - zmiana w torze 2

37 0093 SET_8255 EQU 10010011B

38

39

40 ;**************************************

41 0000: 02 01 00 LJMP START

42

43 ;**************************************

44 0013: ORG 13H

45 ;obsługa przerwania z wejścia INT1

46 0013: C0 E0 PUSH ACC ;przechowanie akumulatora

47 0015: C0 D0 PUSH PSW ;i rejestru stanu na stosie

48

49 0017: 79 00 MOV R1,#CSIC ;odczyt ze sterownika przerwań

50 0019: E3 MOVX A,@R1 ;numeru przerwania

51 001A: 54 03 ANL A,#03H

52 001C: F3 MOVX @R1,A ;skasowanie przerwania

53

54 001D: B4 03 0B CJNE A,#3,INT_NO3 ;inne przerwanie

55

56 ;przerwanie IPB - TOR 1

57 0020: 0F INC R7 ;licznik kolejnych faz ruchu obiektu

58 0021: EF MOV A,R7

59 0022: 20 E0 03 JB ACC.0,T1_KIER_OK

60 0025: 0D INC R5 ;przy kierunku nieprawidłowym przerwanie

61 ;IPB dla 2 i 4 fazy ruchu

62 0026: 80 0F SJMP OBIEKT

63 0028: T1_KIER_OK: ;przy kierunku prawidłowym przerwanie

64 0028: 0E INC R6 ;IPB dla 1 i 3 fazy ruchu

65 0029: 80 0C SJMP OBIEKT

66

67 002B: INT_NO3:

68 002B: B4 02 22 CJNE A,#2,INT_END ;inne przerwanie-nie wystąpi

69

70 ;przerwanie IPA - TOR 2

71 002E: 0F INC R7 ;licznik kolejnych faz ruchu obiektu

72 002F: EF MOV A,R7

73 0030: 30 E0 03 JNB ACC.0,T2_KIER_OK

74 0033: 0D INC R5 ;przy kierunku nieprawidłowym przerwanie

75 ;IPA dla 1 i 3 fazy ruchu

76 0034: 80 01 SJMP OBIEKT

77 0036: T2_KIER_OK: ;przy kierunku prawidłowym przerwanie

78 0036: 0E INC R6 ;IPB dla 1 i 3 fazy ruchu

79

80 0037: OBIEKT:

81 0037: 79 2A MOV R1,#CS55C ;odczyt stanu na porcie C 8255

82 0039: E3 MOVX A,@R1

83 003A: 54 0F ANL A,#0FH ;tylko młodsza część jest wejściem

84

85 003C: B4 06 11 CJNE A,#6,INT_END ;czy obiekt w którymś torze podczerwieni

86

87 ;obiekt już poza licznikiem - analiza kierunku ruchu i prawidłowości przesuwu

88 003F: BF 04 08 CJNE R7,#4,INT_ERROR ;nie było czterech faz ruchu

89 0042: BE 04 01 CJNE R6,#4,OK_NO ;ruch nie był 4 razy sklasyfikowany

90 ;jako w prawidłowym kierunku

91 0045: 0A INC R2 ;ruch prawidłowy - zwiększam licznik

92 0046: OK_NO:

93 0046: BD 04 01 CJNE R5,#4,INT_ERROR ;ruch nie był 4 razy sklasyfikowany

94 ;jako w kierunku przeciwnym

95 0049: 0C INC R4 ;ruch w kierunku przeciwnym

96

97 004A: INT_ERROR:

98 004A: 7F 00 MOV R7,#0 ;zerownie liczników jednego obiektu

99 004C: 7E 00 MOV R6,#0

100 004E: 7D 00 MOV R5,#0

101

102 0050: INT_END:

103 0050: D0 D0 POP PSW ;odtworzenie rejestrów na koniec przerwania

104 0052: D0 E0 POP ACC

105 0054: 32 RETI

106

107 ;**************************************

108 0100: ORG 0100H

109 0100: START:

110 0100: 79 2B MOV R1,#CS55D ;ustawienie układu 8255

111 0102: 74 93 MOV A,#SET_8255

112 0104: F3 MOVX @R1,A

113

114 0105: 19 DEC R1

115 0106: 74 EF MOV A,#11101111B ;włączenie nadajnika IR

116 0108: F3 MOVX @R1,A

117

118 0109: 12 81 0C LCALL LCD_CLR ;wypisanie napisu na wyświetlaczu LCD

119 010C: 90 01 3E MOV DPTR,#TEXT

120 010F: 12 81 00 LCALL WRITE_TEXT

121

122 ;zerowanie sterownika przerwań

123 0112: 79 10 MOV R1,#CSAD ;skasowanie ewentualnego przerwania

124 0114: E3 MOVX A,@R1 ;wystawianego przez przetwornik A/C

125

126 0115: 79 00 MOV R1,#CSIC ;skasowanie przerwań 0..3

127 0117: E4 CLR A ;w sterowniku przerwań

128 0118: F3 MOVX @R1,A

129 0119: 04 INC A

130 011A: F3 MOVX @R1,A

131 011B: 04 INC A

132 011C: F3 MOVX @R1,A

133 011D: 04 INC A

134 011E: F3 MOVX @R1,A

135

136 011F: E4 CLR A

137 0120: FF MOV R7,A ;wyzerowanie liczników pojedyńczego obiektu

138 0121: FE MOV R6,A

139 0122: FD MOV R5,A

140

141 0123: FA MOV R2,A ;wyzerowanie liczników obiektów

142 0124: FB MOV R3,A

143 0125: FC MOV R4,A

144

145 0126: D2 AF SETB EA ;włączenie przerwań z wejścia INT1

146 0128: D2 AA SETB EX1 ;- tj. sterownika przerwań

147 012A: C2 91 CLR INT55 ;uaktywnienie sterownika na przerwania

148 ;z układu 8255

149

150 012C: LOOP:

151 012C: EA MOV A,R2

152 012D: 80 00 SJMP WRITE ;zapis na LCD dla nowej wartości licznika

153

154 012F: WRITE:

155 012F: FB MOV R3,A ;zapamiętanie nowej wartości licznika

156 0130: 31 5D ACALL KURSOR_2L ;przesunięcie kursora o 2 pozycje w lewo

157 0132: 31 5D ACALL KURSOR_2L

158 0134: EC MOV A,R4

159 0135: 12 81 04 LCALL WRITE_HEX

160 0138: EB MOV A,R3

161 0139: 12 81 04 LCALL WRITE_HEX ;wyświetlenie nowej wartości licznika

162 013C: 80 EE SJMP LOOP

163

164 ;**************************************

165 013E: TEXT:

166 013E: 4C 69 63 DB 'Liczba obiektow GORA->DOL 0000',0

0141: 7A 62 61

0144: 20 6F 62

0147: 69 65 6B

014A: 74 6F 77

014D: 20 47 4F

0150: 52 41 2D

0153: 3E 44 4F

0156: 4C 20 30

0159: 30 30 30

015C: 00

167

168 ;**************************************

169 ;podprogram przesuwający kursor o 2 pozycje w lewo

170 015D: KURSOR_2L:

171 015D: 74 10 MOV A,#10H ;kod rozkazu dla wyświetlacza LCD

172 015F: 12 81 06 LCALL WRITE_INSTR ;przesunięcia kursora w lewo

173 0162: 74 10 MOV A,#10H

174 0164: 12 81 06 LCALL WRITE_INSTR

175 0167: 22 RET

176

177 ;**************************************

178 ;END



Wyszukiwarka

Podobne podstrony:
M3 6 4
10 M3 JankowskiM MuszyńskiA ZAD10
M3 2 2
M3, WSFiZ Warszawa, Semestr II, Technologie informacyjne - ćwiczenia (e-learning) (Grzegorz Stanio)
fiz m3 teoria
1 3 m3 wstep
M3 2 1
ECCC Sylabus IT M3 A
M3 1 7
pielegn srod rodz m3
M3, weterynaria uwm III rok, patofizjo
ECCC Sylabus CS M3 D
16 M3 KobierskiM SzypowskaK ZAD16
M3 6 1
Lista na MESM3
M3 doc
CWICZ M3, Studia, I, Fizyka
Projekt m3, Metody elementów skończonych
Fizyka - dokumenty, CWICZ D1, M3

więcej podobnych podstron