Politechnika Lubelska
Wydział Elektryczny
Laboratorium Podstaw Techniki Mikroprocesorowej
GRUPA ED 5.3
1.Chudy Paweł
2.Gieroba Grzegorz
3.Drabik Leszek
Ćwiczenie nr 7.
Temat:Układy transmisji szeregowej. Programowa transmisja szeregowa.
Celem ćwiczenia była wizualizacja komunikacji szeregowej pomiędzy DSM-51
a komputerem. W zadaniu porównywaliśmy znaki nadawane i odbierane, przy czym nadanie
lub odbiór mogło zachodzić w mikroprocesorze lub komputerze.
Zadanie 1
Celem zadania polegała była wizualizacja komunikacji szeregowej pomiędzy DSM-51
a komputerem oraz taka modyfikacja programu by nie zmieniając formatu transmisji ustawić kolejne szybkości transmisji 1200, 2400, 9600 bodów. Realizowana była szeregowa transmisja asynchroniczna - nadawanie.
Wywołanie programu z parametrem 300 (timer na 300):
klawisz |
LCD |
monitor |
5 |
5 |
5 |
9 |
9 |
9 |
8 |
8 |
8 |
6 |
6 |
6 |
Ustawienia timera i rejestrów dla różnych szybkości transmisji:
Lp |
Szybkość transmisji |
TH1 |
TL1 |
SCON |
TMOD |
1 |
1200 |
256-48 |
256-48 |
40H |
20H |
2 |
2400 |
256-24 |
256-24 |
40H |
20H |
3 |
9600 |
256-6 |
256-6 |
40H |
20H |
Wywołanie programu z parametrem 2400:
Znak |
1200 |
2400 |
9600 |
0 |
błąd transmisji |
0 |
„spacja” |
1 |
błąd transmisji |
1 |
„spacja” |
4 |
błąd transmisji |
4 |
„spacja” |
8 |
błąd transmisji |
8 |
„spacja” |
9 |
błąd transmisji |
9 |
„spacja” |
Zadanie 2
Celem zadania była taka modyfikacja programu z zadania 1, by zrealizować transmisję asynchroniczną w trybie odbiór z kolejnymi szybkościami - 300, 1200, 4800, 9600 bodów.
Ustawienia timera i rejestrów dla różnych szybkości transmisji:
Lp. |
Szybkość transmisji |
TH1 |
TL1 |
SCON |
TMOD |
1 |
300 |
256-192 |
256-192 |
50H |
20H |
2 |
1200 |
256-48 |
256-48 |
50H |
20H |
3 |
4800 |
256-12 |
256-12 |
50H |
20H |
4 |
9600 |
256-6 |
256-6 |
50H |
20H |
Treść programu:
T0_G EQU 0
T0_C EQU 0
T0_M EQU 0
TIM0 EQU T0_M+T0_C*4+T0_G*8
T1_G EQU 0
T1_C EQU 0
T1_M EQU 2
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
TR_M EQU 1
TR_R EQU 1
SCON_SET EQU TR_M*64+TR_R*16
TH1_SET EQU X ;za X wstawiano
TL1_SET EQU X ;dane z tabeli
LJMP START
ORG 100H
START:
MOV SCON,#SCON_SET
ORL PCON,#80H
MOV TMOD,#TMOD_SET
MOV TH1,#TH1_SET
MOV TL1,#TL1_SET
SETB TR1
LCALL LCD_CLR
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
LCALL WRITE_DATA
SJMP LOOP
Wywołanie programu z parametrem 4800 (timer na X):
Znak z klawiatury |
300 |
1200 |
4800 |
9600 |
0 |
błąd transmisji |
błąd transmisji |
0 |
błąd transmisji |
1 |
błąd transmisji |
błąd transmisji |
1 |
błąd transmisji |
2 |
błąd transmisji |
błąd transmisji |
2 |
błąd transmisji |
3 |
błąd transmisji |
błąd transmisji |
3 |
błąd transmisji |
6 |
błąd transmisji |
błąd transmisji |
6 |
błąd transmisji |
Zadanie 3
Celem zadania było wykonanie transmisji szeregowej asynchronicznej dwustronnej
z szybkością 4800 bodów.
Treść programu:
T0_G EQU 0
T0_C EQU 0
T0_M EQU 0
TIM0 EQU T0_M+T0_C*4+T0_G*8
T1_G EQU 0
T1_C EQU 0
T1_M EQU 2
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
TR_M EQU 1
TR_R EQU 1
SCON_SET EQU TR_M*64+TR_R*16
TH1_SET EQU 256-12
TL1_SET EQU 256-12
LJMP START
ORG 23H
PUSH ACC
PUSH PSW
JBC TI,NAD
CLR RI
MOV A,SBUF
LCALL WRITE_DATA
NAD:
POP PSW
POP ACC
RETI
ORG 100H
START:
MOV SCON,#SCON_SET
ORL PCON,#80H
MOV TMOD,#TMOD_SET
MOV TH1,#TH1_SET
MOV TL1,#TL1_SET
SETB TR1
SETB EA
SETB ES
LCALL LCD_CLR
LOOP:
LCALL WAIT_KEY
ADD A,#30H
MOV SBUF,A
SJMP LOOP
Zadanie 4
Celem zadania była wizualizacja komunikacji pomiędzy DSM-51 a komputerem realizowana w oparciu o programową transmisję szeregową - nadawanie.
Ustawienia timera i rejestrów dla różnych szybkości transmisji:
Lp. |
Szybkość transmisji |
TH0 |
TL0 |
PCON |
TMOD |
1 |
3600 |
0 |
0 |
80H |
02H |
2 |
9600 |
256-96 |
256-96 |
80H |
02H |
Wywołanie programu z parametrem 3600 (timer na 4800):
znak |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
LCD |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
monitor |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
Wywołanie programu z parametrem 3600 (timer na 3600, 9600):
znak |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
LCD |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
monitor (3600) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
monitor (9600) |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
błąd |
Zadanie 5
Celem zadania była taka modyfikacja programu z zadania 4 by zrealizować programową transmisję szeregową asynchroniczną - odbiór.
Ustawienia timera i rejestrów dla różnych szybkości transmisji:
Lp. |
Prędkość transmisji |
TH0 |
TL0 |
PCON |
TMOD |
1. |
3600 |
256-256 |
256-128 |
80H |
02H |
2. |
9600 |
256-96 |
256-48 |
80H |
02H |
Treść programu:
T0_G EQU 0
T0_C EQU 0
T0_M EQU 2
TIM0 EQU T0_M+T0_C*4+T0_G*8
T1_G EQU 0
T1_C EQU 0
T1_M EQU 0
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
BIT_TIME EQU 11059200/12/X ;za X wartość równą
T0_SET EQU 256-BIT_TIME ; TH0 z tabeli
T0_STRT EQU 256-BIT_TIME/2
IN EQU INT0
LJMP START
ORG 03H
SETB TR0
CLR EX0
RETI
ORG 0BH
PUSH PSW
PUSH ACC
DJNZ R2,NEXT
CLR TR0
MOV TL0,#T0_STRT
MOV R2,#10
SETB EX0
MOV A,R7
LCALL WRITE_DATA
POP ACC
POP PSW
RETI
NEXT:
MOV C,IN
MOV A,R7
RRC A
MOV R7,A
POP ACC
POP PSW
RETI
ORG 100H
START:
LCALL LCD_CLR
MOV TMOD,#TMOD_SET
MOV TH0,#T0_SET
MOV TL0,#T0_STRT
MOV R2,#10
SETB EA
SETB ET0
SETB EX0
SJMP $
Wywołanie programu z parametrem 3600 (timer na 3600) i 9600 ( timer na 9600):
znak |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
monitor |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
LCD (3600) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
LCD (9600) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Zadanie 6
Celem zadania była modyfikacja programu z zadania 4 tak by poszerzyć zakres szybkości programowej transmisji szeregowej asynchronicznej do 300 bodów.
Treść programu:
T0_G EQU 0
T0_C EQU 0
T0_M EQU 1
TIM0 EQU T0_M+T0_C*4+T0_G*8
T1_G EQU 0
T1_C EQU 0
T1_M EQU 0
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
BIT_TIME EQU 11059200/12/300
TL0_SET EQU FF
TH0_SET EQU F3
IN EQU INT0
LJMP START
ORG 03H
SETB TR0
CLR EX0
RETI
ORG 0BH
PUSH PSW
PUSH ACC
DJNZ R2,NEXT
CLR TR0
MOV TL0,#TL0_SET
MOV TH0,#TH0_SET
MOV R2,#10
SETB EX0
MOV A,R7
LCALL WRITE_DATA
POP ACC
POP PSW
RETI
NEXT:
MOV C,IN
MOV A,R7
RRC A
MOV R7,A
POP ACC
POP PSW
RETI
ORG 100H
START:
LCALL LCD_CLR
MOV TMOD,#TMOD_SET
MOV TH0,#TH0_SET
MOV TL0,#TL0_SET
MOV R2,#10
SETB EA
SETB ET0
SETB EX0
SJMP $
Wnioski
Przeprowadzone ćwiczenie pokazało, że do poprawnej transmisji szeregowej asynchronicznej
wymagana jest równość szybkości transmisji obu elementów nadającego i odbierającego.
By poszerzyć zakres szybkości transmisji do 300 bodów konieczne było do odliczania impulsów zastosowanie timera pracującego w trybie 1 (licznik 16-bitowy).