ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์...

14
ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 ภาควิชาไฟฟ้าและคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยนเรศวร ดร. พรพิศุทธิ์ วรจิรันตน1 การทดลองที่ 10 เรื่อง การสื่อสารข้อมูลแบบอนุกรม ว ัตถุประสงค์ 1. เพื่อให ้นิสิตเข ้าใจภาษา Assembly เบื้องต ้น 2. เพื่อให ้นิสิตเข ้าใจการทางาน การสื่อสารอนุกรม (Serial) ของไมโครคอนโทรลเลอร์เมื่อรับข ้อมูลทีกาหนด ให ้แสดงการทางานผ่าน Hyper Terminal อุปกรณ์ในการทดลอง 1. ชุดทดลองไมโครคอนโทรลเลอร์ SILA-START-C51 2. เครื่องคอมพิวเตอร์ PC พร ้อมโปรแกรมสาหรับการเขียนและคอมไพล์ภาษา Assembly SXA51 3. สายต่อพอร์ตอนุกรม 4. โปรแกรม Hyper Terminal ทฤษฎี

Transcript of ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์...

Page 1: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

1

การทดลองที ่10

เรือ่ง การสือ่สารขอ้มลูแบบอนกุรม

วตัถปุระสงค ์

1. เพือ่ใหน้สิติเขา้ใจภาษา Assembly เบือ้งตน้

2. เพือ่ใหน้สิติเขา้ใจการท างาน การสือ่สารอนุกรม (Serial) ของไมโครคอนโทรลเลอรเ์มือ่รับขอ้มลูที่

ก าหนด ใหแ้สดงการท างานผา่น Hyper Terminal

อปุกรณ์ในการทดลอง

1. ชดุทดลองไมโครคอนโทรลเลอร ์SILA-START-C51

2. เครือ่งคอมพวิเตอร ์PC พรอ้มโปรแกรมส าหรับการเขยีนและคอมไพลภ์าษา Assembly SXA51

3. สายตอ่พอรต์อนุกรม

4. โปรแกรม Hyper Terminal

ทฤษฎ ี

Page 2: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

2

Page 3: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

3

การรับสง่ขอ้มลูแบบอนุกรมม ี4 โหมด คอื

Mode 0 สง่ขอ้มลูชดุละ 10 bits คอื 1 Start bit, 8 Data bits และ 1 Stop bit

อตัราการสง่ขอ้มลู

Baud Rate 12

oscf : oscf Oscillator frequency

Mode 1 สง่ขอ้มลูชดุละ 10 bits เหมอืน Mode 0 แตอ่ตัราการสง่ขอ้มลู สามารถก าหนดไดด้ว้ย Timer 1

(ใน Mode 2) หรอื Timer 2 (8052)

อตัราการสง่ขอ้มลู

Baud Rate 12561232 TH

fK osc

If SMOD = 0, then K=1

If SMOD = 1, then K=2 (SMOD is in PCON register)

Mode 2 สง่ขอ้มลูชดุละ 11 bits คอื 1 Start bit, 8 Data bits, 1 programmable data bit จาก TB8

หรอื RB8 และ 1 Stop bit อตัราการสง่ขอ้มลูขึน้อยูก่บั SMOD bitใน PCON

อตัราการสง่ขอ้มลู

SMOD = 1, Baud Rate 32

oscf

SMOD = 0, Baud Rate 64

oscf

แตก่ารก าหนดคา่ SMOD ใน PCON ไมส่ามารถเขา้ถงึ ขอ้มลูระดับบติได ้ตอ้งอา่นคา่ขึน้มาแกไ้ขแลว้เขยีน

ลงไปใหม ่(Read-Modify-Write) เชน่

MOV A, PCON

Page 4: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

4

SETB ACC.7

MOV PCON, A

Mode 3 สง่ขอ้มลูชดุละ 11 bits เหมอืน Mode 2 แตอ่ตัราการสง่ขอ้มลูสามารถก าหนดไดด้ว้ย Timer 1

(ใน Mode 2) หรอื Timer 2 (8052)

Baud Rate Crystal (MHz) SMOD TH1 Baud Rate *

9,600 12 1 -7(F9H) 8,923

2,400 12 0 -13(F3H) 2,404

1,200 12 0 -16(E6H) 1,202

19,200 11.059 1 -3(FDH) 19,200

9,600 11.059 0 -3(FDH) 9,600

2,400 11.059 0 -12(F4H) 2,400

1,200 11.059 0 -24(E8H) 1,200

Example 1 เขยีนฟังกช์ัน่ initializing ก าหนดคา่เริม่ตน้ใหพ้อรท์อนุกรม โดยใช ้

Timer 1 สง่ขอ้มลู 8 bits ดว้ยอตัรา Baud 2,400

1. Set bit REN เป็น “1” เพือ่ใหรั้บขอ้มลูได ้และเลอืก Mode 1 เพือ่การรับสง่

2. Set bit T1 เป็น “1” เพือ่บอกวา่ buffer สง่ขอ้มลูวา่ง

3. Set bit M1/M0 ใน TMOD เป็น “1/0” ใหท้ างานในโหมด 2, 8 bits auto-reload

4. ก าหนดให ้TH1 เป็น 0F3H เพือ่ก าหนด Baud rate 2,400

5. Set bit TR1 ใน TCON เป็น “1” เพือ่เริม่ใช ้Timer 1

INIT: MOV SCON, #52H ; ก าหนดพอรท์อนุกรมโหมด 1

MOV TMOD, #20H ; ก าหนด Timer 1 โหมด 2

MOV TH1, #0F3H ; ใสค่า่ก าหนด Baud rate

SET TR1 ; เริม่ Timer 1

RET

Page 5: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

5

Example 2 เขยีนฟังกช์ัน่ สง่คา่ตัวอกัษรออกทางพอรท์อนุกรม โดย TX_DATA คอื data memory

address 80H และ RX_DATA คอื data memory address 81H

TX_TEXT: MOV A, TX_DATA

JNB TI, $ ; เชค็วา่ Buffer วา่งรยึงั

CLR TI

JNB TF, $ ; รอจน Timer overflow

MOV SBUF, A; สง่ขอ้มลูออก

CLR TF

RET ; กลับโปรแกรมหลัก

Example 3 เขยีนฟังกช์ัน่ รับขอ้มลู ASCII จากทางพอรท์อนุกรม

RX_TEXT : JNB RI, $ ; รอรับขอ้มลู

CLR RI

MOV A, SBUF ; อา่นขอ้มลูจากพอรท์

MOV RX_DATA, A; เอาไปเก็บไวใ้น RX_DATA

RET ; กลับโปรแกรมหลัก

Note: เมือ่ตอ้งการสง่ตวัอกัษรออก

MOV TX_DATA, ‘Z’ ; เอาตวั Z ไปใสใ่น TX_DATA พรอ้มแปลงเป็น ASCII

ACALL TX_TEXT

Note: เมือ่ตอ้งการรับตวัอกัษร

ACALL RX_TEXT

Example 4 เขยีนโปรแกรม รับสง่ขอ้มลู 8 bits และ parity จากทางพอรท์อนุกรม Baud rate 19,200

1. Set SMOD PCON เพือ่ double baud rate

2. Set bit REN เป็น “1” เพือ่ใหรั้บขอ้มลูได ้และเลอืก Mode 3 เพือ่การรับสง่

3. Set bit T1 เป็น “1” เพือ่บอกวา่ buffer สง่วา่ง

4. Set bit M1/M0 ใน TMOD เป็น “1/0” ใหท้ างานในโหมด 2

5. ก าหนดให ้TH1 เป็น 0FDH เพือ่ก าหนด Baud rate 19,200

6. Set bit TR1 ใน TCON เป็น “1” เพือ่เริม่ใช ้Timer 1

Page 6: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

6

INT: MOV A, PCON

SETB ACC.7 ; Double baud rate

MOV PCON, A

MOV SCON, #0D2H; เลอืกโหมด 3

MOV TMOD,#20H ; ก าหนด Timer1 โหมด2

MOV TH1, #0FDH ; ใสค่า่ก าหนด Baud rate

SET TR1 ; เริม่ Timer1

OUT: MOV C, P ; ใสค่า่ parity bit ใน C

MOV TB8, C ; ใสล่งใน TB8

WAIT: JNB TI, WAIT ; เชค็วา่ Buffer วา่งรยึงั

CLR TI

JNB TF, $ ; รอจน Timer overflow

MOV SBUF, A ; สง่ขอ้มลูออก

CLR TF

RET ; กลับโปรแกรมหลัก

IN: JNB RI, $ ; รอรับขอ้มลู

CLR RI

MOV A, SBUF ; อา่นขอ้มลูจากพอรท์

MOV C, TB8 ; ตรวจสอบ parity

CPL C ;ถา้ขอ้มลูผดิพลาด C จะมคีา่ 1*

RET ; กลับโปรแกรมหลัก

วธิทีดลอง

1.เขยีนโปรแกรมและสรา้ง Hex file

2. ทีเ่ครือ่งคอมพวิเตอร ์ตอ่สายอนุกรมจากพอรต์อนุกรมของเครือ่งคอมพวิเตอร ์(com1) ไปยงัพอรต์อนุกรม

ของบอรด์ Microcontroller (RS232) โดยใชส้ายและ connector ทีแ่จกใหเ้ทา่น ัน้ ท าการโหลดผา่น

โปรแกรม ลงไปยงับอรด์ Microcontroller

3. เมือ่load hex file ลงในบอรด์ microcontroller แลว้ ที ่computer เลอืก Accessories communications Hyper terminal ตัง้ชือ่ Lab10 เลอืก com1 ใชค้า่ bit/sec 9600 แลว้สัง่ run program

4. เมือ่ตอ้งการแกไ้ข program และ load hex file ลงในบอรด์ microcontroller อกีครัง้ ตอ้ง disconnect

Hyper terminal ตัง้คา่ mode ของ com1 ใหม ่แลว้จงึ connect Hyper terminal เพือ่ run program

การทดลองที ่10.1

สง่ขอ้มลูออกทาง Serial port

การทดลองที ่10.2

สง่และรับขอ้มลูทาง Serial port

การทดลองที ่10.3

สง่และรับขอ้มลูทาง Serial port โดยใช ้Interrupt

Page 7: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

7

แบบฝึกหดั

ทดลองแกไ้ขขอ้มลูตามใจชอบ

จากโปรแกรมที ่10.3 ทดลองเปลีย่นคา่ Baud rate เป็น 57600 และ 600

ท าเสร็จแลว้รายงานตอ่อาจารยผ์ูส้อน ท ารายงานสง่

การทดลองที ่10.1

;FILENAME: LAB10_1.ASM

;DESCRIPTION:

;DATE: 04/02/2553

;NOTE: Transmit

;-------------------------------------------------------

; Main Program.

;-------------------------------------------------------------

ORG 0000H ; Reset

Vector

MAIN: MOV TMOD,#021H ; T1 8Bit

Auto, T0 16Bit

MOV TH1,#0FDH ; 9600 bps

Timer1 Default

MOV TL1,#0FDH ;

SETB TR1 ; Start Timer1

MOV SCON,#040H ; Mode1 RX

Disable

MOV DPTR,#SERIAL_TEXT ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX Text to

Serial Port

MOV DPTR,#HELLO_TEXT ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

AJMP $

;-------------------------------------------------------------

; TX Serial Text from ROM Pointer

;-------------------------------------------------------------

TX_TEXT: CLR TI ; Clear

TI

TX_LOOP: CLR A ; Clear ACC.

MOVC A,@A+DPTR ; Get Data

from ROM with Pointer

INC DPTR ; Increase

Pointer

CJNE A,#0,TX_CHAR ;

Check null terminated 000H Char.

RET ; End =>

Return

Page 8: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 8

TX_CHAR: MOV SBUF,A ; Send Data

to SBUF

JNB TI,$ ; Wait until

TX already (TI=1)

CLR TI ; Clear TI

ACALL DELAY_100ms ; Delay each

character

AJMP TX_LOOP ;

Jump to TX_LOOP

;-------------------------------------------------------------

; Dummy Delay time 100m

;-------------------------------------------------------------

DELAY_100ms: MOV R7,#100

; Do 100 times

DELAY_100ms_1: MOV R6,#0E6H ; Each

loop = 1 ms

DELAY_100ms_2: NOP

NOP

DJNZ R6,DELAY_100ms_2

DJNZ R7,DELAY_100ms_1

RET

;-------------------------------------------------------------

;Define Constant < Store in Flash EEPROM

Program Memory >

;-------------------------------------------------------------

NULL EQU 0

SERIAL_TEXT: DB 00AH,00DH

DB 00AH,00DH

DB 'Serial UART Communication

< baudrate 9600bps > ',00AH,00DH

DB 'Kind friends and

companions, come join me in rhyme ',00AH,00DH

DB 'Come lift up your voices in

chorus with mine ',00AH,00DH

DB 'Come lift up your voices in

chorus with mine ', 00AH,00DH,NULL

HELLO_TEXT: DB 00DH,'For we may or might

never all meet here again .',00AH,00DH,NULL

END

การทดลองที ่10.2

;FILENAME: LAB10_2.ASM

;DESCRIPTION:

;DATE: 04/02/2553

;NOTE: Transmit and receive

;--------------------------------------------------------

; Define User Register

;-------------------------------------------------------------

BUFFER EQU 030H ;

Buffer

;-------------------------------------------------------------

; Main Program.

Page 9: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 9

;-------------------------------------------------------------

ORG 0000H ; Reset Vector

MAIN: MOV TMOD,#021H ; T1 8Bit Auto, T0

16Bit

MOV TH1,#0FDH ; 9600 bps Timer1

Default

MOV TL1,#0FDH ;

SETB TR1 ; Start Timer1

MOV SCON,#040H ; Mode1 RX Disable

MOV DPTR,#SERIAL_TEXT ; Set Pointer

Serial TX

ACALL TX_TEXT ; TX Text to Serial

Port

MOV DPTR,#HELLO_TEXT ; Set Pointer

Serial TX

ACALL TX_TEXT ; TX Text to Serial

Port

START_LOOP: MOV R0,#BUFFER ; Clear

BUFFER to start pointer

SETB REN ; Set RX Enable

LOOP: JNB RI,$ ; Wait byte

received

CLR RI ;

MOV A,SBUF ; Get byte

from SBUF

MOV @R0,A ;

CJNE A,#00DH,RX_NEXT ; Check

Enter key receive?

MOV A,R0

CJNE A,#BUFFER,DATA_VALID ;

Check enter key only?

DATA_EMPTY: MOV DPTR,#NODATA_TEXT1

; Set Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

AJMP START_LOOP

DATA_VALID: MOV DPTR,#GOT_TEXT1 ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

MOV A,R0 ; Keep end of

message pointer

MOV R0,#BUFFER ; Reset

Pointer

REPLY_LOOP: CLR TI ; Send reply

byte to PC

MOV SBUF,@R0 ; by get data from

BUFFER

JNB TI,$ ;

CLR TI ;

INC R0 ; Increase to next pointer

CJNE A,0,REPLY_LOOP ; Check end

of message already?

MOV DPTR,#GOT_TEXT2 ; Set Pointer

Serial TX

Page 10: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 10

ACALL TX_TEXT ;TX Text to Serial

Port

AJMP START_LOOP

RX_NEXT: INC R0 ; Increase pointer

AJMP LOOP ; Back to do loop

;-------------------------------------------------------------

; TX Serial Text from ROM Pointer

;-------------------------------------------------------------

TX_TEXT: CLR TI ; Clear TI

TX_LOOP: CLR A ; Clear ACC.

MOVC A,@A+DPTR ; Get Data

from ROM with Pointer

INC DPTR ; Increase

Pointer

CJNE A,#0,TX_CHAR ;

Check null terminated 000H Char.

RET ; End => Return

TX_CHAR: MOV SBUF,A ; Send Data to SBUF

JNB TI,$ ; Wait until TX

already (TI=1)

CLR TI ; Clear TI

AJMP TX_LOOP ; Jump to

TX_LOOP

;-------------------------------------------------------------

;Define Constant < Store in Flash EEPROM

Program Memory >

;-------------------------------------------------------------

NULL EQU 0

SERIAL_TEXT: DB 00AH,00DH

DB 00AH,00DH

DB 'Serial UART Communication

< baudrate 9600bps > ',00AH,00DH

DB 'So here',027H,'s a health to

the company and one to my lass',00AH,00DH

DB 'Let',027H,'s drink and be

merry all out of one glass ',00AH,00DH

DB 'Let',027H,'s drink and be

merry all grief to refrain', 00AH,00DH,NULL

HELLO_TEXT: DB 'For we may or might never

all meet here again.',00AH,00DH

DB ' I',027H,'m waiting for a

message from you.',00AH,00DH

DB 'type any message then

press ENTER key.',00AH,00DH,NULL

NODATA_TEXT1: DB 'No more data

received',00AH,00DH,NULL

GOT_TEXT1: DB 'I',027H,'d got message

[',NULL

GOT_TEXT2: DB '] from

you.',00AH,00DH,NULL

END

Page 11: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์

11

การทดลองที ่10.3

;FILENAME: LAB10_3.ASM

;DESCRIPTION:

;DATE: 04/02/2553

;NOTE:

;-------------------------------------------------------------

RX_OK BIT F0 ; Define bit to show

that receiving message is finished

;-------------------------------------------------------------

; Define User Register

;-------------------------------------------------------------

TX_DATA EQU 02FH ; For

keeping TX Data

BUFFER EQU 030H ;

Buffer

;-------------------------------------------------------------

; Main Program.

;------------------------------------------------------------

ORG 0000H ; Reset

Vector

AJMP MAIN ; Jump to

Main

ORG 0023H ; TI+RI

Vector

AJMP SER_INT ; Goto

Serial interrupt subroutine

MAIN: MOV TMOD,#021H ; T1 8Bit

Auto, T0 16Bit

MOV TH1,#0FDH ; 9600 bps

Timer1 Default

MOV TL1,#0FDH ;

MOV IE,#10010000B ; En.

EA, ES

SETB TR1 ; Start Timer1

MOV SCON,#050H ; Mode1 RX

Enable

CLR RX_OK ; Clear

RX_OK flag

MOV DPTR,#SERIAL_TEXT ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

MOV DPTR,#HELLO_TEXT ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

MOV R0,#BUFFER ; Clear

BUFFER to start pointer

REPLY_LOOP: JNB RX_OK,$

MOV DPTR,#GOT_TEXT1 ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

Page 12: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 12

ACALL TX_BUFFER ; TX Buffer to

Serial Port

MOV DPTR,#GOT_TEXT2 ; Set

Pointer Serial TX

ACALL TX_TEXT ; TX

Text to Serial Port

EXIT: AJMP REPLY_LOOP ; Back to

received next message

;-------------------------------------------------------------

; TX Serial Text from ROM Pointer

;-------------------------------------------------------------

TX_TEXT: CLR TI ; Clear TI

TX_TEXT_LOOP: CLR A ; Clear

ACC.

MOVC A,@A+DPTR ; Get Data

from ROM with Pointer

INC DPTR ; Increase

Pointer

CJNE A,#000H,TX_TEXT_CHAR ;

Check null terminated 000H Character.

RET ; End =>

Return

TX_TEXT_CHAR: MOV TX_DATA,A ; Send

Data to SBUF

SETB TI ; Set TI to

SER_INT subroutine

AJMP TX_TEXT_LOOP ; Wait

for TX

;-------------------------------------------------------------

; TX Buffer Text from Internal RAM

;-------------------------------------------------------------

TX_BUFFER: CLR TI ; Clear TI

MOV R0,#BUFFER ; Set BUFFER

to start pointer

TX_BUFFER_LOOP: MOV A,@R0 ; Get

Data from ROM with buffer offset

INC R0 ; Increase

buffer pointer

CJNE A,#00DH,TX_BUFFER_CHAR

; Check 0FFH End of Text Char.

CLR RX_OK ; Clear

RX_OK flag after TX all

RET ; End =>

Return

TX_BUFFER_CHAR: MOV TX_DATA,A ; Send

Data to SBUF

SETB TI ; Set TI to

SER_INT subroutine

AJMP TX_BUFFER_LOOP ; Wait

for TX

;-------------------------------------------------------------

; Serial interrupt subroutine

;-------------------------------------------------------------

SER_INT: PUSH ACC ; Push ACC.

to stack

JB RI, SER_RX ; RX or TX? If

RX then received and clear RI

SER_TX: CLR TI ; Clear

TI

MOV SBUF,TX_DATA

Page 13: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 13

SER_TX_WAIT: JNB TI,$ ; Wait

until TX already (TI=1) then clear TI

SER_TX_EXIT: CLR TI

POP ACC ; Pop Acc. to

Stack

RETI ; Return

interrupt

SER_RX: CLR RI ; Clear RI

CLR RX_OK ; Clear

RX_OK flag

MOV A,SBUF ; Get data to

ACC.

MOV @R0,A ; Move to

Buffer @R0

INC R0 ; Increase R0

CJNE A,#00DH,SER_RX_EXIT

; Check 00DH End of Buffer text

SETB RX_OK ; Set RX_OK

received message ok.

SER_RX_EXIT: POP ACC ; Pop Acc. to

Main

RETI ; Return

interrupt

;-------------------------------------------------------------

;Define Constant < Store in Flash EEPROM

Program Memory >

;-------------------------------------------------------------

NULL EQU 0

SERIAL_TEXT: DB 00AH,00DH

DB 00AH,00DH

DB 'Serial UART Communication

< baudrate 19200bps > ',00AH,00DH

DB 'Our ship lies at anchor, she

is ready to dock ',00AH,00DH

DB 'I wish her safe landing

without any shock',00AH,00DH

DB 'And if ever I should meet

you by land or by sea', 00AH,00DH,NULL

HELLO_TEXT: DB 'I will always remember your

kindness to me. ',00AH,00DH

DB ' I',027H,'m waiting for a

message from you.',00AH,00DH

DB 'type any message then

press ENTER key.',00AH,00DH,NULL

NODATA_TEXT1: DB 'No more data

received',00AH,00DH,NULL

GOT_TEXT1: DB 'I',027H,'d got message

[',NULL

GOT_TEXT2: DB '] from

you.',00AH,00DH,NULL

END

การบา้น

1. จากการทดลอง 10.3 เขยีน code รับสง่ขอ้มลูโดยใช ้baud rate 300 และ 38400 (เขยีนเฉพาะสว่นทีต่อ้ง

แกไ้ข)

Page 14: ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์ รายวิชา 303361 · ปฏิบัติการ วิชา ไมโครโปรเซสเซอร์

ปฏบิตักิาร วชิา การเชือ่มตอ่ไมโครคอมพวิเตอรแ์ละไมโครคอนโทรลเลอร ์รายวชิา 305381

ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร

ดร. พรพศิทุธิ ์วรจรัินตน์ 14