Zadanie 1.

Wizualizacja komunikacji szeregowej pomiędzy DSM-51 a komputerem PC z wykorzystaniem wewnętrznego układu transmisji szeregowej.

Ustawienia rejestrów

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 RS z parametrem 2400 i porównanie wysyłanych znaków (tych

samych) dla różnych szybkości.

Znak

1200

2400

9600

1

błąd

1

spacja

2

błąd

2

spacja

3

błąd

3

spacja

Zadanie 2.

Modyfikacja programu z zadania 1 dla transmisji asynchronicznej w trybie odbiór .

Ustawienia Timera 1 i rejestru SCON.

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

Listing 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-X ; X=57600/szybkość transmisji [body]

TL1_SET EQU 256-X ;

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 RS z parametrem 4800

Znak z klawiatury

300

1200

4800

9600

0

błąd

błąd

0

błąd

1

błąd

błąd

1

błąd

2

błąd

błąd

2

błąd

3

błąd

błąd

3

błąd

6

błąd

błąd

6

błąd

Zadanie 3.

Transmisja szeregowa dwustronna.

Listing programu

;********* 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 DPTR,#0FF21H

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

MOV R2,#6

CLR F0

LCALL LCD_CLR

LOOP:

MOVX A,@DPTR

CPL A

JNZ L2

JNB F0,HOOP

CLR F0

SETB PSW.1 ;PUSZCZONY KLAWISZ

MOV A,#20

LCALL DELAY_MS

SJMP HOOP

L2:

MOV R2,#0FFH

L1:

INC R2

CLR C

RRC A

JNC L1

SETB F0 ;JEST ZNAK DO NADANIA

HOOP:

JB RI,ODBIOR ;czy można nadać

JB TI,NADAJ

SJMP LOOP

ODBIOR:

CLR RI ;kolejny znak

MOV A,SBUF ;nadaj znak

LCALL WRITE_DATA ;wyświetl na LCD

SJMP LOOP

NADAJ:

JBC PSW.1,NADAWAJ

SJMP LOOP

NADAWAJ:

CLR TI

MOV A,R2

ADD A,#30H

MOV SBUF,A

LCALL WRITE_DATA

SJMP LOOP