LABORATORIUM PODSTAW
SYSTEMÓW
MIKROPROCESOROWYCH
∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇
SPRAWOZDANIE Z ĆWICZENIA NR 7.
TEMAT:Układy transmisji szeregowej. Programowa transmisja szeregowa.
Sprawozdanie sporządził: ROBERT SIWIEC
Grupa dziekańska: ED 5.1
Rok akademicki: 96/97
∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇
KATEDRA ELEKTRONIKI
POLITECHNIKA LUBELSKA
ZADANIE NR 1
Wykorzystując wewnętrzny układ transmisji szeregowej dokonano wizualizacji komunikacji szeregowej pomiędzy DSM-51 a komputerem PC, która jest przedstawiona w tabeli nr 2. W tabeli nr 1 zaproponowano ustawienia rejestrów dla poszczególnych prędkości transmisji:
Tabela 1:
Lp. |
Prędkość transmisji |
TH1 |
TL1 |
SCON |
TMOD |
1. |
1200 |
D0H |
D0H |
40H |
20H |
2. |
2400 |
E8H |
E8H |
40H |
20H |
3. |
9600 |
FAH |
FAH |
40H |
20H |
Tabela 2:
Znak |
1200 |
2400 |
9600 |
`7' |
błąd |
`7' |
spacja |
`5' |
błąd |
`5' |
spacja |
`9' |
błąd |
`9' |
spacja |
ZADANIE NR 2
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 |
40H |
40H |
50H |
20H |
2. |
1200 |
D0H |
D0H |
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 NR 3
Wykorzystując przykłady z zadań 1 i 2 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 wysyła jeden znak i przechodzi w tryb odbioru również jednego znaku. I tak na przemian.
Listing programu:
;********************************************************
;Cwiczenie7 - STEROWNIK TRANSMISJI SZEREGOWEJ
;PRZYKłAD 1 - NADAWANIE
;********************************************************
;********* 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/300bodów=192
TH1_SET EQU 256-192
TL1_SET EQU 256-192
;**************************************
LJMP START
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 TI
LCALL LCD_CLR
LOOP:
LCALL WAIT_KEY
JNB TI,$ ;czy można nadać
CLR TI ;kolejny znak
ADD A,#30H
MOV SBUF,A ;nadaj znak
LCALL WRITE_DATA ;wyświetl na LCD
CLR RI
JNB RI,$
MOV A,SBUF
LCALL WRITE_DATA
SJMP LOOP
ZADANIE NR 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 |
|
02H |
2. |
9600 |
A0H |
A0H |
|
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 NR 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 |
|
02H |
2. |
9600 |
A0H |
A0H |
|
02H |
Poniżej przedstawiono propozycję programu:
Listing programu:
;************************************************
;Źwiczenie 7 - PROGRAMOWA REALIZACJA TRANSMISJI
;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 NR 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:
;************************************************
;ćwiczenie 7 - PROGRAMOWA REALIZACJA TRANSMISJI
;PRZEKŁ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 $