WYDZIAŁ ELEKTRYCZNY POLITECHNIKI LUBELSKIEJ
LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH
Imię i Nazwisko: Piotr Skwarek |
Grupa: ED 5.4 |
||||
Data wyk. ćwicz. 25.11.96 |
Numer ćwiczenia 7 |
Temat ćwiczenia: Układy transmisji szeregowej. Programowa transmisja szeregowa. |
Ocena: |
Zespół:
1. Skwarek Piotr
2. Małaj Marcin
I. Cel ćwiczenia
Przy obecnym stanie techniki mikroprocesorowej często zachodzi konieczność przesyłania danych lub sygnałów pomiędzy dwoma odrębnymi jednostkami mikroprocesorowymi. Najpraktyczniejszym sposobem przy przesyłaniu danych jest transmisja szeregowa jest tak głównie ze względu na mniejszy koszt poprowadzenia łącza złożonego z jednej lini. Jednak transmisja szeregowa ma też swoje wady są nimi niższa prędkość transmisji oraz skorelowania prędkości nadawania przez jeden procesor i prędkości odbioru przez drugi. W tym ćwiczeniu mieliśmy właśnie okazję zapoznania się z zaletami oraz problemami wynikającymi ze stosowania transmisji szeregowej.
II. Wykonanie ćwiczenia
Zadanie 1. Nadawanie znaków z klawiatury mikrokontrolera przez złącze szeregowe i odbiór ich przez program RS uruchomiony na podłączonym PC-cie.
Ustawienia timerów i trybu pracy sterownika szeregowego
Lp. |
Prędkość transmisji |
TH1 |
TL1 |
SCON |
TMOD |
1 |
1200 |
D0H |
D0H |
50H |
20H |
2 |
2400 |
E8H |
E8H |
50H |
20H |
3 |
9600 |
FAH |
FAH |
50H |
20H |
Znaki nadawane - odbierane przy różnych prędkościach transmisji.
ZNAK |
1200 |
2400 |
9600 |
UWAGI |
`7' |
błąd - śmieci |
`7' |
inny znak |
|
`5' |
błąd - śmieci |
`5' |
inny znak |
pojawia się kilka znaków niktóre nic nie znaczące |
`9' |
błąd - śmieci |
`9' |
inny znak |
|
Zadanie 2. Odbiór znaków z klawiatury mikrokontrolera przez złącze szeregowe, znaki nadawane przez program RS uruchomiony na podłączonym PC-cie.
Opierając się na przykładzie z zadania 1, dokonano modyfikacji programu p7_1.asm dla transmisji asynchronicznej w trybie odbiór przyjmując kolejno szybkości transmisji: 300, 1200, 4800, 9600 bodów. Poniżej przedstawiono propozycje ustawień rejestrów:
Tabela 3
Lp. |
prędkość transmisji |
TH1 |
TL1 |
SCON |
TMOD |
1. |
300 |
D0H |
D0H |
50H |
20H |
2. |
1200 |
E8H |
E8H |
50H |
20H |
3. |
4800 |
F4H |
F4H |
50H |
20H |
4. |
9600 |
FAH |
FAH |
50H |
20H |
Poniżej przedstawiono w tabeli wyniki obserwacji poprawności transmisji:
Tabela 4:
Znak |
300 |
1200 |
4800 |
9600 |
`7' |
błąd |
błąd |
`7' |
błąd |
`5' |
błąd |
błąd |
`5' |
błąd |
`9' |
błąd |
błąd |
`9' |
błąd |
Zadanie 3.
Wykorzystując przykłady z zadań 1 i 2 oraz program p7.4.asm wykonano operację transmisji szeregowej dwustronnej o parametrach jak w zadaniu 2. Poniżej przedstawiona jest propozycja programu realizujące to zadanie. Program działa w taki sposób, że DSM-51 może ciągle wysylać znaki wprzypadku zaistnienia przerwania od transmisji szeregowej skacze do programu obsługi przerwania iw którym umieszczony jest program odbioru znaku.
Listing programu:
;********************************************************
;PRZYKŁAD 1 - TRANSMISJA DWUSTRONNA
;********************************************************
;********* Ustawienie TIMERÓW *********
;TIMER 0
T0_G EQU 0 ;GATE
T0_C EQU 0 ;COUNTER/-TIMER
T0_M EQU 0 ;MODE (0..3)
TIM0 EQU T0_M+T0_C*4+T0_G*8
;TIMER 1
T1_G EQU 0 ;GATE
T1_C EQU 0 ;COUNTER/-TIMER
T1_M EQU 2 ;MODE (0..3)
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
;*************** Transmisja Szeregowa ********************
TR_M EQU 1 ;tryb transmisji (1..3)
TR_R EQU 1 ;zezwolenie na odbiór
SCON_SET EQU TR_M*64+TR_R*16
;SMOD=1
;TIMER1=57600/300 bodów=192
TH1_SET EQU 256-6
TL1_SET EQU 256-6
;**************************************
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 ;port szeregowy
ORL PCON,#80H ;SMOD=1
MOV TMOD,#TMOD_SET ;Timer 1 dla
MOV TH1,#TH1_SET ;transmisji
MOV TL1,#TL1_SET
SETB TR1 ;start Timera 1
SETB EA
SETB ES
LCALL LCD_CLR
LOOP:
LCALL WAIT_KEY
ADD A,#30H
MOV SBUF,A ;nadaj znak
SJMP LOOP
Zadanie 4.
Wykorzystując sposób programowej transmisji szeregowej dokonano wizualizacji komunikacji pomiędzy DSM-51 a PC, na przykładzie programu p7_4.hex. Poniżej zaproponowano ustawienia rejestrów:
Tabela 5
Lp. |
Prędkość transmisji |
TH0 |
TL0 |
PCON |
TMOD |
1. |
4800 |
F4H |
F4H |
F0H |
02H |
2. |
9600 |
A0H |
A0H |
F0H |
02H |
Poniżej przedstawiono tabele pokazującą poprawność transmisji:
Tabela 6
Znak |
3600 |
4800 |
9600 |
`7' |
`7' |
błąd |
błąd |
`6' |
`6' |
błąd |
błąd |
`1' |
`1' |
błąd |
błąd |
Zadanie 5.
W oparciu o zadanie 4 dokonano modyfikacji programu p7_4.asm dla transmisji asynchronicznej w trybie odbiór przyjmując kolejno szybkości transmisji: 3600, 9600 bodów. W tabeli poniżej zaproponowano wstępne ustawienia rejestrów:
Tabela 7:
Lp. |
Prędkość transmisji |
TH0 |
TL0 |
PCON |
TMOD |
1. |
3600 |
F0H |
F0H |
F0H |
02H |
2. |
9600 |
A0H |
A0H |
F0H |
02H |
Poniżej przedstawiono propozycję programu:
Listing programu:
;************************************************
;PRZYKťAD 4 - NADAWANIE
;************************************************
;********* Ustawienie TIMER˘w *********
;TIMER 0
T0_G EQU 0 ;GATE
T0_C EQU 0 ;COUNTER/-TIMER
T0_M EQU 2 ;MODE (0..3)
TIM0 EQU T0_M+T0_C*4+T0_G*8
;TIMER 1
T1_G EQU 0 ;GATE
T1_C EQU 0 ;COUNTER/-TIMER
T1_M EQU 0 ;MODE (0..3)
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
;******* Transmisja Szeregowa *********
;Timer/Bit = Fosc[Hz] /12 /V[bod]
BIT_TIME EQU 11059200/12/3600
T0_SET EQU 256-BIT_TIME
T0_STRT EQU 256-BIT_TIME/2
IN EQU INT0
;**************************************
LJMP START
;******PRZERWANIE INT 0****************
ORG 03H
SETB TR0
CLR EX0 ;BLOKUJ PRZERWANIE INT 0
RETI
;********* Przerwanie TIMER 0 *********
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: ;kolejny bit transmisji
MOV C,IN
MOV A,R7
RRC A
MOV R7,A ;bit na port
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 $
Zadanie 6.
W oparciu o program z zadania 4 dokonano modyfikacji programu p7_4.asm tak aby poszerzyć zakres szybkości transmisji szeregowej do 300 bodów. Poniżej przedstawiono propozycje programu realizującego to zadanie. Program z braku czasu nie został przetestowany.
Listing programu:
;************************************************
;PRZYKŁAD 4 - NADAWANIE
;************************************************
;********* Ustawienie TIMERÓW *********
;TIMER 0
T0_G EQU 0 ;GATE
T0_C EQU 0 ;COUNTER/-TIMER
T0_M EQU 1 ;MODE (0..3)
TIM0 EQU T0_M+T0_C*4+T0_G*8
;TIMER 1
T1_G EQU 0 ;GATE
T1_C EQU 0 ;COUNTER/-TIMER
T1_M EQU 0 ;MODE (0..3)
TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
;******* Transmisja Szeregowa *********
;Timer/Bit = Fosc[Hz] /12 /V[bod]
BIT_TIME EQU 11059200/12/300 ;=3072
TL0_SET EQU FF
TH0_SET EQU F3
IN EQU INT0
;**************************************
LJMP START
;******PRZERWANIE INT 0****************
ORG 03H
SETB TR0
CLR EX0 ;BLOKUJ PRZERWANIE INT 0
RETI
;********* Przerwanie TIMER 0 *********
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: ;kolejny bit transmisji
MOV C,IN
MOV A,R7
RRC A
MOV R7,A ;bit na port
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 $