Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 1
การทดลองที ่5
เรือ่ง การใชง้าน Timer/Counter
วตัถปุระสงค ์
1. เพือ่ใหน้สิติเขา้ใจภาษา Assembly เบือ้งตน้
2. เพือ่ใหน้สิติเขา้ใจการท างานตัวจับเวลา และ ตวันับ (Timer/Counter) ของไมโครคอนโทรลเลอร ์
อปุกรณ์ในการทดลอง
1. บอรด์ทดลองไมโครคอนโทรลเลอร ์
2. เครือ่งคอมพวิเตอร ์PC พรอ้มโปรแกรมส าหรับการเขยีนและคอมไพลภ์าษา Assembly SXA51
3. สายตอ่พอรต์อนุกรม
4. บอรด์ 7-segment Display
5. สวทิช ์1 ตัว
6. บอรด์แสดงผลดว้ย LED
7. อปุกรณ์ก าเนดิสญัญาณ TTL ปรับความถีไ่ด ้
ทฤษฎ ี
Timer จะมกีารนับเพิม่ขึน้ทกุ 1 Machine cycle โดยทั่วไป ไมโครคอนโทรลเลอรต์ระกลู MCS-51 จะใชเ้วลา 1
Machine cycle=12/f.oscillator
TMOD Register
GATE Bit
เป็น Bit ทีใ่ชค้วบคมุให ้Timer ท างานหรอืไม ่ถา้ Bit นีข้อง Timer x ถกูตัง้เป็น
1 (Hardware controlled) จะท าให ้Timer ท างานก็ตอ่เมือ่สญัญาณทีข่า INTx เป็น 1 และ Bit TRx ใน
Register TCON เป็น 1 ดว้ย
0 (Software controlled) จะท าให ้Timer ท างานเมือ่ Bit TRx ใน Register TCON เป็น 1
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 2
C/~T Bit
ส าหรับเลอืกการท างานของ วา่จะใชเ้ป็น Timer หรอื Counter ถา้ Bit นีเ้ป็น
1 (Counter) เลอืกการท างานเป็น Counter ซึง่ก็จะท าการนับสญัญาณทีเ่ขา้มาที ่ขา Tx
0 (Timer) เลอืกการท างานเป็น Timer ซึง่ก็จะท าการนับสญัญาณ Clock/12
M1/M0 Bits
เป็น 2 Bit ทีใ่ชง้านรว่มกนัเพือ่เลอืก Mode การท างานของ Timer/Counter คา่ใน M1 และ M0 จะเลอืกไดด้ังนี ้
M1 M0 การท างาน
0 0 Mode 0 Register THx และ TLx จะท างานเป็นตัวนับ 13 Bit คา่จากการนับ 8 Bit บนมาจาก THx และ
อกี 5 Bit ลา่งมาจากคา่ 5 Bit ลา่งของ TLx
0 1 Mode 1 Register THx และ TLx ท างานเป็นตัวนับ 16 Bit คา่จากการนับ 8 Bit บนอยูใ่น THx และคา่
จากการนับ 8 Bit ลา่งอยูใ่น TLx
1 0 Mode 2 ในการนับของ TLx ขนาด 8 Bit เมือ่นับถงึคา่สงูสดุคอื FFH แลว้เมือ่มกีารนับตอ่จะเกดิ
Overflow แลว้จะ Reload เอาขอ้มลูจาก THx เขา้ไปยงั TLx เพือ่เป็นคา่เริม่ตน้ในการนับครัง้ตอ่ไป
1 1 Mode 3 การท างานของ Timer 0 และ Timer 1 จะตา่งกนั
Timer 0 TL0 จะท างานเป็น 8 Bit Timer/Counter ซึง่ใชง้านเหมอืนกบั
Mode 0 และ TH1 จะท างานเป็น Timer ซึง่ควบคมุการท างาน
ไดจ้าก Control bit ของ Timer 1
Timer 1 หยดุท างาน
TCON Register
TF1 Bit
Timer 1 Overflow Flag ซึง่จะมสีถานะเป็น ‘1’ เมือ่ Timer 1 register นับจนเกดิ Overflow สถานะของ TF1 นี ้จะ
ถกู Clear ไดเ้องเมือ่ CPU ท างานตาม Interrupt Service routine (ISR) นัน้ๆ โดยปกตแิลว้ Interrupt จาก Timer
จะถกู disable เอาไว ้จงึไมม่กีารกะโดดไปท างานยงั ISR นัน้ๆ และ TFx จะไมถ่กู clear โดยอตัโนมตั ิถา้ตอ้งการให ้
มกีารกระโดดไปท า ISR ตอ้งมกีาร set bit EA และ ET ใน Register IE กอ่น
TR1 Bit
Timer 1 Run Control Bit เป็น Bit ทีส่ามารถควบคมุไดด้ว้ย Software ส าหรับควบคมุการนับของ Timer 1
Register ใหนั้บ หรอืหยดุ
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 3
TF0 Bit
Timer 0 Overflow Flag
TR0 Bit
Timer 0 Run Control Bit
IE1 Bit
Bit นีจ้ะเป็น ‘1’ เมือ่มสีญัญาณทีเ่ขา้มาทางขา ~INT1 (โดยมสีภาวะลอจกิของสญัญาณตามก าหนดใน Bit IT1)
แลว้จะท าใหเ้กดิการกระโดดไปท างานยงั Interrupt Service Routine ของ INT1 (Bit นี ้จะกลับเป็น ‘0’ ไดเ้องถา้
เป็นการ Interrupt แบบ Level activated (Bit IT1 = ‘1’))
IT1 Bit
เป็น Bit ทีใ่ชก้ าหนดลักษณะของสญัญาณทีจ่ะเขา้มาทีข่า ~INT1
ถา้ IT1 เป็น ‘1’ จะเกดิการ Interrupt ถา้สญัญาณที ่ขา ~INT1 เปลีย่นจาก ‘1’ to ‘0’
ถา้ IT1 เป็น ‘0’ จะเกดิการ Interrupt ถา้สภาวะของสญัญาณที ่ขา ~INT1 เป็น ‘0’
IE0 Bit
มกีารท างานเหมอืน IE1
IT0 Bit
มกีารท างานเหมอืน IT1
การท างานของ Timer/Counter ใน Mode 0, 1 และ 2 ของ Timer 0 และ Timer 1 จะคลา้ยกนั สว่นการท างานใน
Mode 3 จะแตกตา่งกนั โดยสรปุไดด้ังนี ้
Mode 0
การท างานใน Mode นี ้จะเป็นการใชง้านของ Timer register แบบ 13 Bit ซึง่จะใช ้8 Bit บนจาก THx และ 5 Bit
ลา่งจาก TLx
การนับจะเป็นการนับขึน้ และเมือ่ถงึคา่มากทีส่ดุ (THx = FFh, TLx = 1Fh) แลว้มกีารนับเพิม่อกี Timer interrupt
flag TFx (ใน Register TCON) จะมคีา่เป็น ‘1’
การนับจะท างานเมือ่สถานะของ Bit TRx = ‘1’ และ (GATE = ‘0’ หรอื Pin ~INTx = ‘1’)
ในการก าหนดให ้GATE = ‘1’ นัน้ จะท าใหก้ารท างานของ Timer นี ้ถกูควบคมุโดยสญัญาณจากภายนอกซึง่เขา้มา
ทีข่า ~INTx
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 4
Mode 1
การท างานใน Mode 1 นี ้เหมอืนกบัการท างานใน Mode 0 แตเ่ป็นการใชง้านของ Timer register ทัง้ 16 Bit
Mode 2
การท างานใน Mode นี ้จะเป็นการใชง้านของ Timer register แบบ 8 Bit ของ TLx เมือ่ TLx เกดิ Overflow หรอื
เกดิเปลีย่นแปลงจาก FFH เป็น 00H Timer interrupt flag TFx จะมคีา่เป็น ‘1’ และจะมกีารท า Automatic reload
โหลดคา่ทีเ่ก็บไวใ้น THx ไปเกบ็ไวใ้น TLx ซึง่จะเป็นคา่เริม่ตน้ของการนับครัง้ตอ่ไป
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 5
Mode 3
ในโหมดนี ้Timer 1 จะไมถ่กูใชง้านแตเ่ราสามารถสวติชใ์ห ้Timer 1 ไปท างานในโหมดอืน่ได ้แตก่ารท างานของ
Timer 1 จะไมม่กีารอนิเทอรรั์พทเ์กดิขึน้
Timer 0 จะแยกเป็น 2 ตัวตวัละ 8 บติ คอื TL0 และ TH0 เมือ่ Timer เกดิ Overflow จะมกีารเซตบติ TF0 และ
TF1 ตามล าดับ
สว่น Counter register TL0 จะใชส้ญัญาณทีค่วบคมุการท างาน เหมอืนกบัการใชใ้น Mode 0 และส าหรับ Counter
register TH0 จะถกูก าหนดใหท้ างานเป็น Timer เทา่นัน้ โดยจะใชก้ารควบคมุจาก Bit TR1 และ TF1 ของ Timer 1
และเมือ่ใชง้าน Timer 0 ใน Mode 3 แลว้ ตวั Timer 1 จะสามารถควบคมุใหห้ยดุนับไดโ้ดยการเปลีย่นเขา้เป็น
Mode 3 และในการใชง้านจะไมส่ามารถใชก้าร Interrupt ได ้
Mode 3 นีอ้อกแบบส าหรับการใชง้านทีต่อ้งการ Timer/Counter ทีเ่พิม่ขึน้
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 6
วธีทีดลอง
1. เขยีนและสรา้ง Hex file.
2. ทีเ่ครือ่งคอมพวิเตอร ์ตอ่สายอนุกรมจากพอรต์อนุกรมของเครือ่งคอมพวิเตอร ์(com1) ไปยงัพอรต์อนุกรม
ของบอรด์ Microcontroller (RS232) โดยใชส้ายและ connector ทีแ่จกใหเ้ทา่น ัน้ ท าการโหลดผา่น
โปรแกรม ลงในบอรด์ Microcontroller
3. การทดลองที ่5.1 และ 5.2 ใหนั้กเรยีนท าสงัเกตการณ์ใชง้าน Timer ใน mode 1 และ mode 2
ตามล าดับ
ตอ่สาย จากบอรด์ MCS-51 กบั connector 24B port ของบอรด์ LED ดังตาราง และ ตอ่ ground และไฟเลีย้งของทัง้สองบอรด์เขา้ดว้ยกนั
Port ขา บอรด์ LED
1.0 5
4. การทดลองที ่5.3 ใหนั้กเรยีนท าสงัเกตการณ์ใชง้าน Timer เป็นตวัจับเวลา
ตอ่บอรด์ MCS-51 กบั บอรด์ 7- segment โดย P0 ตอ่กบั Address และ P1 ตอ่กบั Data ตอ่ ground และไฟเลีย้งของทัง้สองบอรด์เขา้ดว้ยกนั
ตอ่สวทิชก์บั P3.2
Timer จะเริม่ท างานเมือ่กด switch ทีต่อ่อยูก่บัขา P3.2 และ Timer จะหยดุท างานเมือ่กด switch ทีต่อ่อยูก่บัขา
P3.2 อกีครัง้ โดย 7-segment จะแสดงจ านวนครัง้ที ่Timer 0 ใน mode1 overflow ในชว่งเวลาระหวา่งการกด
switch ทัง้ 2 ครัง้
5. การทดลองที ่5.4 ใหนั้กเรยีนท าสงัเกตการณ์ใชง้าน Counter เป็นตัวนับสญัญาณ pulse ทีเ่ขา้มาทีข่า T0
(P3.4)
ตอ่สวทิชก์บั P3.2
ตอ่สญัญาณ TTL จากแหลง่ก าเนดิเขา้ทีข่า T0 (P3.4) และตอ่ ground จากแหลง่ก าเนดิเขา้กบั ground
ของ microcontroller
เลอืกชว่งความถี ่x1Hz แลว้ลองเปลีย่นชว่งความถีเ่ป็น x10 Hz, x100Hz สงัเกตผลการทดลอง
Counter จะเริม่ท างานเมือ่กด switch ทีต่อ่อยูก่บัขา P3.2 บนบอรด์ทดลอง และ Counter จะหยดุท างานเมือ่กด
switch ทีต่อ่อยูก่บัขา P3.2 อกีครัง้โดย 7-segment จะแสดงคา่ใน TL0 ของ Counter ใน mode1 ในชว่งเวลา
ระหวา่งการกด switch ทัง้ 2 ครัง้
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 7
การทดลองที ่5.1
;FILENAME: LAB5_1.ASM
;DESCRIPTION: Timer0 mode 1
;DATE: 26/12/2553
;NOTE: LED display at P1
;------------MAIN------------------------------
ORG 0000H
MOV TMOD,#01H
MAIN: MOV R1,#40D
START_TIMER: MOV TH0,#3CH
MOV TL0,#0AFH ; FFFFH-50000D=3CAFH
SETB TR0
LOOP: JNB TF0, LOOP
CLR TF0
DJNZ R1,START_TIMER
CPL P1.0
AJMP MAIN
END
การทดลองที ่5.2
;FILENAME: LAB5_2.ASM
;DESCRIPTION: Timer0 mode 2
;DATE: 26/12/2553
;NOTE: LED display at P1
;------------MAIN------------------------------
ORG 0000H
MOV TMOD,#02H
MOV TH0,#037H ; FFH-200D=37H
MAIN: MOV R1,#40D
LOOP1: MOV R2,#250D
START_TIMER: SETB TR0
LOOP2: JNB TF0, LOOP2
CLR TF0
DJNZ R2, START_TIMER
DJNZ R1, LOOP1
CPL P1.0
AJMP MAIN
END
การทดลองที ่5.3
;FILENAME: LAB5_3.ASM ;DESCRIPTION: Stop watch
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 8
;DATE: 26/12/2553
;NOTE: 7-segment display TF . Use switch P3.2
;------------MAIN------------------------------
ORG 0000H
PORT_LED7 EQU P1
PORT_DIG EQU P0
DSP1_BUFFER EQU 03CH ; For DSP1 Data
DSP2_BUFFER EQU 03DH ; For DSP2 Data
START_STOP_SW BIT P3.2
TIMER_ON BIT PSW.5 ; Show timer status
MOV A,#00H
MOV PORT_LED7,A ; Clear
DISPLAY
;****************************************
MAIN: MOV R6,#00H ;R6=TF0
;overflow counter
CLR TIMER_ON
;****************************************
TIMER: MOV TMOD,#021H
;Timer0 mode 1, Timer1 mode2
MOV TH0,#00H
MOV TL0,#00H
;****************************************
BEGIN: MOV A,R6
MOV B,#16
; Move Divider to Register B
DIV AB
MOV DSP2_BUFFER,A
; Store NUM
MOV DSP1_BUFFER,B
; Store DEN
MOV R4,#50
; Set loop 100 times
SCAN_DSP_LOOP: MOV A,DSP1_BUFFER
MOV DPTR,#SEGCODE
; Move DIGIT Start Pointer
MOVC A,@A+DPTR
; Get ROM Data from Pointer+ACC.
MOV PORT_LED7,A
; Out ACC. to DISPLAY
MOV A,#00H
MOV PORT_DIG,A ; Enable DSP1
ACALL DELAY_T ; Delay
MOV A,DSP2_BUFFER
MOV DPTR,#SEGCODE
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 9
MOVC A,@A+DPTR
MOV PORT_LED7,A
MOV A,#01H
MOV PORT_DIG,A
ACALL DELAY_T ; Delay
DJNZ R4, SCAN_DSP_LOOP
; Do until 5 times
TIMER_START: JB START_STOP_SW,EXIT
; Check S1 pressed?
ACALL DELAY_T
JB START_STOP_SW,EXIT
; Check Flag (S1 still pressed?)
JB TIMER_ON,TIMER_STOP
SETB TIMER_ON
; Set Flag TIMER_ON
SETB TR0 ; START TIMER0
EXIT: AJMP BEGIN
; Jump to BEGIN
;****************************************
TIMER_STOP: CLR TIMER_ON
; Clear Flag TIMER_ON
CLR TR0 ; STOP TIMER0
AJMP BEGIN
;****************************************
DELAY_T: MOV TH1,#037H
; FFH-200D=37H
MOV R7,#10D ;Delay 10 ms
LOOP1: SETB TR1
LOOP2: JNB TF1,LOOP2
CLR TF1
JNB TF0,CONT
INC R6 ; COUNT TF0
OVERFLOW
CLR TF0
CONT: DJNZ R7,LOOP1
RET
;****************************************
SEGCODE:
DB 03FH,06H,05BH,04FH,066H,06DH,07DH,07H
DB 07FH,06FH,077H,07CH,039H,05EH,079H,071H
DB 040H,040H,040H,040H
END
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 10
การทดลองที ่5.4
;FILENAME: LAB5_4.ASM
;DESCRIPTION: Counter
;DATE: 26/12/2552
;NOTE: 7-segment display TF . Use T0 (P3.4)
;------------MAIN------------------------------
ORG 0000H
PORT_LED7 EQU P1
PORT_DIG EQU P0
DSP1_BUFFER EQU 03CH ; For DSP1 Data
DSP2_BUFFER EQU 03DH ; For DSP2 Data
START_STOP_SW BIT P3.2
TIMER_ON BIT PSW.5 ; Show timer status
MOV A,#00H
MOV PORT_LED7,A ; Clear
DISPLAY
;****************************************
MAIN: MOV R6,#00H ;R6=TF0
;overflow counter
CLR TIMER_ON
;****************************************
TIMER: MOV TMOD,#025H
;Timer0 mode 1, Timer1 mode2
MOV TH0,#00H
MOV TL0,#00H
;****************************************
BEGIN: MOV A,TL0
MOV B,#16
; Move Divider to Register B
DIV AB
MOV DSP2_BUFFER,A
; Store NUM
MOV DSP1_BUFFER,B
; Store DEN
MOV R4,#50
; Set loop 100 times
SCAN_DSP_LOOP: MOV A,DSP1_BUFFER
MOV DPTR,#SEGCODE
; Move DIGIT Start Pointer
MOVC A,@A+DPTR
; Get ROM Data from Pointer+ACC.
MOV PORT_LED7,A
; Out ACC. to DISPLAY
MOV A,#00H
MOV PORT_DIG,A ; Enable DSP1
ACALL DELAY_T ; Delay
ปฏบิตักิาร วชิา ไมโครโปรเซสเซอร ์รายวชิา 303361
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 11
MOV A,DSP2_BUFFER
MOV DPTR,#SEGCODE
MOVC A,@A+DPTR
MOV PORT_LED7,A
MOV A,#01H
MOV PORT_DIG,A
ACALL DELAY_T ; Delay
DJNZ R4,SCAN_DSP_LOOP
; Do until 5 times
TIMER_START: JB START_STOP_SW,EXIT
; Check S1 pressed?
ACALL DELAY_T
JB START_STOP_SW,EXIT
; Check Flag (S1 still pressed?)
JB TIMER_ON,TIMER_STOP
SETB TIMER_ON
; Set Flag TIMER_ON
SETB TR0 ; START TIMER0
EXIT: AJMP BEGIN
; Jump to BEGIN
;****************************************
TIMER_STOP: CLR TIMER_ON
; Clear Flag TIMER_ON
CLR TR0 ; STOP TIMER0
AJMP BEGIN
;****************************************
DELAY_T: MOV TH1,#037H
; FFH-200D=37H
MOV R7,#10D ;Delay 10 ms
LOOP1: SETB TR1
LOOP2: JNB TF1,LOOP2
CLR TF1
JNB TF0,CONT
INC R6 ; COUNT TF0
OVERFLOW
CLR TF0
CONT: DJNZ R7,LOOP1
RET
;****************************************
SEGCODE:
DB 03FH,06H,05BH,04FH,066H,06DH,07DH,07H
DB 07FH,06FH,077H,07CH,039H,05EH,079H,071H
DB 040H,040H,040H,040H
END
ปฏบิตักิาร วชิา การเชือ่มตอ่ไมโครคอมพวิเตอรแ์ละไมโครคอนโทรลเลอร ์รายวชิา 305381
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร์ มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 12
แบบฝึกหดั
1. ใช ้Counter นับจ านวนครัง้ทีก่ด switch ทีต่อ่อยูก่บัขา P3.4 บนบอรด์ทดลองเป็นเลขฐาน 16
2. เขยีนโปรแกรมเพือ่ให ้LED ตดิและเลือ่นไปเรือ่ยๆโดยกลับทศิทางทกุ 10 วนิาทโีดยใช ้Timer จับเวลา
การสง่งาน
- แบบฝีกหดั: อธบิาย และ แสดงการท างาน Program ในหอ้งเรยีนครัง้ตอ่ไป
หมายเหต ุ
ปฏบิตักิาร วชิา การเชือ่มตอ่ไมโครคอมพวิเตอรแ์ละไมโครคอนโทรลเลอร ์รายวชิา 305381
ภาควชิาไฟฟ้าและคอมพวิเตอร ์คณะวศิวกรรมศาสตร ์มหาวทิยาลยันเรศวร
ดร. พรพศิทุธิ ์วรจรัินตน์ 13