Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 1
การทดลองที ่7
เรือ่ง การใชง้าน keyboard
วตัถปุระสงค ์
1. เพือ่ใหน้สิติเขา้ใจภาษา Assembly เบือ้งตน้
2. เพือ่ใหน้สิติสามารถใชง้าน keyboard ขนาด 4x3 และ 7-segment display
อปุกรณ์ในการทดลอง
1. บอรด์ทดลองไมโครคอนโทรลเลอร ์
2. เครือ่งคอมพวิเตอร ์PC พรอ้มโปรแกรมส าหรับการเขยีนและคอมไพลภ์าษา Assembly SXA51
3. สายตอ่พอรต์อนุกรม
4. บอรด์ 7-segment Display
5. keyboard ขนาด 4x3
ทฤษฎ ี
ในกรณีทีต่อ้งการทีรั่บคา่สถานะจาก Switch จ านวนมากนัน้ สามารถท าไดโ้ดยการเพิม่จ านวนของ Input Port ให ้มากขึน้ตาม อยา่งไรกด็ ีในการเพิม่จ านวนของ Input port จะท าใหร้ะบบมรีาคาแพง การเพิม่จ านวนของ Switch สามารถท าไดโ้ดยใชก้ารท างานของ Software ชว่ยอาศัยหลักการพืน้ฐานทีว่า่ Microcomputer นัน้ สามารถท างานไดเ้ร็วมากเมือ่เทยีบกบัการท างานของ Switch ดังนัน้แลว้ Microcomputer ก็ไมจ่ าเป็นตอ้งรับคา่ของ Switch ทัง้หมดพรอ้มกนั โดยเลอืกรับ Input ทลีะตวั หรอืทลีะชดุ ก็ได ้จนครบจ านวนของ Switch ทัง้หมด ในการทดลอง เป็นการตอ่ Switch แบบ Matrix ซึง่ Port 1 บติ P1.0-P1.2 ถกูใชใ้นการเลอืกวา่จะอา่นคา่สถานะของ Switch ในแถวใด และ Port 1 บติ P1.3-P1.6 เป็นการเลอืกวา่จะอา่นคา่สถานะของ Switch ในหลักใด การเขยีนโปรแกรมเพือ่รับคา่สถานะของ Switch ทัง้หมดสามารถแสดงเป็น Pseudo code ไดด้ังนี ้1. สง่ขอ้มลู ‘0’ ไปออกที ่column แรก และใหข้อ้มลูที ่บติ อืน่ๆ เป็น ‘1’ ทัง้หมด ( 1111 1011B ออกไปที ่Port
1) 2. ถา้ column ถกูกด .ใหค้า่ขอ้มลูการกด keyเป็น 1 3. ถา้ column แรกไมถ่กูกด ใหบ้ติทีเ่ป็น column ตอ่ไปเป็น ‘0’ (Ex 1111 1101B) แลว้วนกลบัไปท า ขอ้ 2 อกี
ครัง้ แตใ่หข้อ้มลูการกด key เปลีย่นเป็น 2 ท าจนกวา่จะครบทกุ column พรอ้มทัง้เปลีย่นคา่ขอ้มลูการกด key ไปเรือ่ยๆตามล าดับ
4. สง่ขอ้มลู ‘1’ ออกไปทีท่กุแถว (Ex 1111 0000B) แลว้อา่นคา่เขา้มา ถา้บติทีเ่ป็นแถว 1 เป็น ‘0’ บวกคา่ 0 เขา้กบัคา่ขอ้มลูการกด key ถา้บติทีเ่ป็นแถว 2 เป็น ‘0’ บวกคา่ 3 เขา้กบัคา่ขอ้มลูการกด key ถา้บติทีเ่ป็นแถว 3 เป็น ‘0’ บวกคา่ 6 เขา้กบัคา่ขอ้มลูการกด key ถา้บติทีเ่ป็นแถว 4 เป็น ‘0’ บวกคา่ 9 เขา้กบัคา่ขอ้มลูการกด key
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 2
วธีทีดลอง
การตอ่อปุกรณ์
1. ที ่connector ของ keypad ตอ่ขา 1 เขา้กบัขา 2 และขา 4 เขา้กบัขา 8
2. ตอ่ Port 3 เขา้กบั connector ของ keypad ดังแสดงในตาราง
3. ตอ่ Port 1เขา้กบั connector DATA และ ตอ่ Port 0 เขา้กบั connector Address ของ 7-segment บอรด์
Column Pin Port
2 7 3.0
1 8 3.1
0 9 3.2
Row Pin Port
3 2 3.6
2 3 3.5
1 5 3.4
0 6 3.3
1 2 3
4 5
0
7 8 9
*
6
#
1 2 3 4 5 6 7 8 9
6
5
3
2
9 1 8 74
1 2 3
4 5 6
7 8 9
* 0 #
1 3 5 7 9
2 4 6 8 10
รูปที ่1
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 3
การเขยีนและใชง้านโปรแกรม
1.เขยีนโปรแกรมและสรา้ง Hex file
2. ทีเ่ครือ่งคอมพวิเตอร ์ตอ่สายอนุกรมจากพอรต์อนุกรมของเครือ่งคอมพวิเตอร ์(com1) ไปยงัพอรต์อนุกรมของ
บอรด์ Microcontroller (RS232) โดยใชส้ายและ connector ทีแ่จกใหเ้ทา่น ัน้ ท าการโหลดผา่นโปรแกรม Flash
magic ดังนี ้
รปูแสดงลักษณะวงจรของบอรด์ไมโครคอนโทรลเลอร ์
11.0592MHz
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 4
a. เปิดโปรแกรม Flash magic โดยท าการตัง้คา่ตา่งๆ ดังนี ้ เลอืกที ่Options----> Advanced Options
b. คลิก้เลอืก Use DTR to control RST ออก
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 5
c. ทีห่มายเลข 1 เลอืกรุน่ของ MCS-51 และ com port ใหต้รงกบัทีเ่ราใช ้ตัง้คา่อืน่ๆ ตามหมายเลข 2 และ 4 ตามรปูพรอ้มทัง้ Browse ไฟลท์ีห่มายเลข 3 เลอืก Hex file จากนัน้คลิก้เลอืก Start ทีห่มายเลข 5แลว้โปรแกรมจะให ้Reset MCS-51 เพือ่โหลด Hex file ลงอปุกรณ์
d. กดปุ่ ม reset ทีบ่อรด์ไมโครคอนโทรลเลอร ์
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 6
แบบฝึกหดั
1. แกไ้ขโปรแกรมใหแ้สดงคา่บน 7-segment ครบทัง้ 8 หลกั
2. เขยีนโปรแกรมเพือ่แสดงคา่ทีก่ดจากคยีบ์อรด์บน 7-segment ครบทัง้ 8 หลัก และ เมือ่กด key ‘*’ ตวัเลขที่
แสดงทัง้หมดจะเลือ่นไปทางซา้ย เมือ่กด key ‘#’ ตัวเลขทีแ่สดงทัง้หมดจะเลือ่นไปทางขวา
การทดลองที ่7.1
;-------------------------------------------------------------
; Define Port&Pin Name
;-------------------------------------------------------------
DISP EQU P1 ; 7 Segment display
address
DIS_COL EQU P0 ; 7 segment
column address
KPAD_ROW0 BIT P3.3 ; Keypad Input Row
0
KPAD_ROW1 BIT P3.4 ; Keypad Input Row
1
KPAD_ROW2 BIT P3.5 ; Keypad Input Row
2
KPAD_ROW3 BIT P3.6 ; Keypad Input Row
3
KPAD_COL2 BIT P3.0 ; Keypad Output
Column 2
KPAD_COL1 BIT P3.1 ; Keypad Output
Column 1
KPAD_COL0 BIT P3.2 ; Keypad Output
Column 0
;-------------------------------------------------------------
; Define User Register
;-------------------------------------------------------------
FLAG EQU 02FH ; User FLAG
KEYPRESSED BIT FLAG.0 ; Define KEYPRESS
flag
R_SHF BIT FLAG.1 ; Define Right Shift
flag
DIG1_BUFFER EQU 030H ; For storing DIG1
Data
DIG2_BUFFER EQU 031H ; For storing DIG2
Data
KPAD_DATA EQU 032H ; For storing Keypad
Data
;-------------------------------------------------------------
; Main Program.
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 7
;-------------------------------------------------------------
ORG 0000H ; Reset
Vector
MOV P3,#11111111B ; Clear
status keypad
MAIN: MOV DIG1_BUFFER,#0 ; Clear
DIG1 Buffer
MOV DIG2_BUFFER,#0 ; Clear
DIG2 Buffer
MOV FLAG,#0 ; Clear
FLAG Status
LOOP: ACALL GET_KPAD ; Get Keypad
Data
MOV A,KPAD_DATA
JZ NEXT ; Check
Keypad Pressed?
JB KEYPRESSED,SHOW ; Check
Keypad still pressed?
SETB KEYPRESSED ; Set bit
keypressed
LEFT_SHIFT: MOV
DIG2_BUFFER,DIG1_BUFFER ; Shift Display
to Right
MOV DIG1_BUFFER,KPAD_DATA
; Shift Keypad data in
AJMP SHOW ;
Jump to Show Display
NEXT: CLR KEYPRESSED ; Clear bit
keypressed
SHOW: ACALL SHOW_DSP ; Call Show
DSP Subroutine
CLR R_SHF ; Clear bit
Right Shift
AJMP LOOP ; Jump to
loop
;-------------------------------------------------------------
; Keypad Scan key Subroutine
;-------------------------------------------------------------
GET_KPAD: MOV P3,#0FFH ; Pull P3 to
High
MOV KPAD_DATA,#0 ; Clear
Keypad Data
CHK_COL0: CLR KPAD_COL0 ; Begin Scan
Column 0
MOV A,P3 ; Get Port3
Value
ANL A,#01111000B
; Get only bit 3 4 5 6
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 8
CJNE
A,#01111000B,COL0_DETECT ; Check All
rows '1'?
AJMP CHK_COL1 ; All rows '1'
=> check next column
COL0_DETECT: MOV KPAD_DATA,#01
; Initialize KPAD_DATA = 1
AJMP GET_ROW ;
Jump to get row value
CHK_COL1: SETB KPAD_COL0 ; Stop Scan
Column 0
CLR KPAD_COL1 ; Begin Scan
Column 1
MOV A,P3 ; Get Port3
Value
ANL A,#01111000B
; Get only bit 3 4 5 6
CJNE
A,#01111000B,COL1_DETECT ; Check All
rows '1'?
AJMP CHK_COL2 ; All rows '1'
=> check next column
COL1_DETECT: MOV KPAD_DATA,#02
; Initial KPAD_DATA = 2
AJMP GET_ROW ;
Jump to get row value
CHK_COL2: SETB KPAD_COL1 ; Stop Scan
Column 1
CLR KPAD_COL2 ; Begin Scan
Column 2
MOV A,P3 ; Get Port3
Value
ANL A,#01111000B
; Get only bit 3 4 5 6
CJNE
A,#01111000B,COL2_DETECT ; Check All
rows '1'?
RET ; All rows '1'
=> return
COL2_DETECT: MOV KPAD_DATA,#03
; Initial KPAD_DATA = 3
GET_ROW: MOV P3,#01111000B ; Send
1 to all Row to find Crosspoint
JB KPAD_ROW0,CHK_ROW1 ;
Check Row 0 Detect?
RET ; Row 0
Detect => return
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 9
CHK_ROW1: JB KPAD_ROW1,CHK_ROW2 ;
Check Row 1 Detect?
MOV A,KPAD_DATA ; Add 3 with
KPAD_DATA
ADD A,#3
MOV KPAD_DATA,A
RET ; Return
CHK_ROW2: JB KPAD_ROW2,CHK_ROW3 ;
Check Row 2 Detect?
MOV A,KPAD_DATA ; Add 6
with KPAD_DATA
ADD A,#6
MOV KPAD_DATA,A
RET ; Return
CHK_ROW3: MOV A,KPAD_DATA ; Add 9 with
KPAD_DATA
ADD A,#9
MOV KPAD_DATA,A
RET ; Return
;-------------------------------------------------------------
; Show DSP Subroutine
;-------------------------------------------------------------
SHOW_DSP: MOV R4,#150 ; Set loop 5 times
SCAN_DSP_LOOP: MOV A,DIG1_BUFFER ;
Restore DIG1 to Display
MOV DPTR,#SEGCODE ; Move
7-seg code Pointer
MOVC A,@A+DPTR ; Get ROM
Data from Pointer+ACC.
MOV DISP,A ; Out
ACC. to DATABUS
MOV A,#00H
MOV DIS_COL,A ; Select 1st
digit
ACALL DELAY_1ms
MOV A,DIG2_BUFFER ;
Restore DIG2 to Display
MOV DPTR,#SEGCODE ; Move
7-seg code Pointer
MOVC A,@A+DPTR ; Get ROM
Data from Pointer+ACC.
MOV DISP,A ; Out
ACC. to DATABUS
MOV A,#01H
MOV DIS_COL,A ;
Select 1st digit
ACALL DELAY_1ms
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 10
DJNZ R4,SCAN_DSP_LOOP; Do
until 5 times
RET
;-------------------------------------------------------------
; Dummy Delay time 1m,10ms,1s
;-------------------------------------------------------------
DELAY_1ms: MOV R6,#0E6H ; Each loop =
1 ms
DELAY_1ms_1: NOP
NOP
DJNZ R6,DELAY_1ms_1
RET
DELAY_10ms: MOV R7,#010 ; Do
10 times
DELAY_10ms_1: MOV R6,#0E6H ; Each
loop = 1 ms
DELAY_10ms_2: NOP
NOP
DJNZ R6,DELAY_10ms_2
DJNZ R7,DELAY_10ms_1
RET
DELAY_1s: MOV R5,#100 ; Do
100 times
DELAY_1s_1: ACALL DELAY_10ms
DJNZ R5,DELAY_1s_1
RET
;-------------------------------------------------------------
;Define Constant < Store in Flash EEPROM
Program Memory >
;-------------------------------------------------------------
;Segment code
SEGCODE: DB 10000000B
DSP_NUM1: DB 00000110B
DSP_NUM2: DB 01011011B
DSP_NUM3: DB 01001111B
DSP_NUM4: DB 01100110B
DSP_NUM5: DB 01101101B
DSP_NUM6: DB 01111101B
DSP_NUM7: DB 00000111B
DSP_NUM8: DB 01111111B
DSP_NUM9: DB 01101111B
DSP_STAR: DB 01110110B
DSP_NUM0: DB 00111111B
DSP_HASH: DB 01100011B
END
ปฏบิตักิาร วชิา การเชือ่มตอ่ไมโครคอมพวิเตอรแ์ละไมโครคอนโทรลเลอร ์รายวชิา 305381
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 11
การบา้น
1. อธบิายโปรแกรมโดยสรปุและใช ้Flowchart
หมายเหต ุอนุญาตใหพ้มิพไ์ดย้กเวน้ ค าตอบของค าถาม และค าอธบิาย
ปฏบิตักิาร วชิา การเชือ่มตอ่ไมโครคอมพวิเตอรแ์ละไมโครคอนโทรลเลอร ์รายวชิา 305381
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 12