functions - naresuan university
TRANSCRIPT
1
2
NAME1 EQU 1234NAME2 EQU 5678………………………………………… ORG 0000HAJMP MAIN; Comment
ORG 0003HAJMP ISR0……………
ORG 000BHAJMP ISR1……………
ORG 0013HAJMP ISR2……………
ORG 001BHAJMP ISR3……………
ORG 0023HAJMP ISR4……………
ORG 002BHAJMP ISR5……………
ORG 0030HMAIN:………………………
ACALL FUNCTION1………………………ACALL FUNCTION2………………………………………………SJMP $
or SJMP MAIN
FUNCTION1:…………...…………….……………RET
END
ISR0: ………….....…………….…………….RETI
External Interrupt 0 ISR
Timer 0 Interrupt ISR
External Interrupt 1 ISR
Timer 1 Interrupt ISR
Serial Port Interrupt ISR
Timer 2 Interrupt ISR
Main Program
Functions
FUNCTION2:…………...…………….…………….RET
ISR Extensions
ISR1: ………….....…………….…………….RETI
ค ำสัง่ Jump อำจเป็น SJMP, AJMP หรือLJMP แล้วแต่ควำมยำวของกำร Jump
CPU
Timer/Counter 1Timer/Counter 0
T0 T1
Clock
/12
Serial Port(UART)
INT0External Interrupt 0
INT1External Interrupt 1
RXDTXD
3
Internal Port (P0 – P3)ส่ง MOV P1, #4BHรับ MOV P1, #0FFH
JNB P1.0, ….. . . JB P1.0,……
ตวัอยา่ง การ On/Off relay ท่ีขา P1.0MOV P1, #01H; TURNONMOV P1, #00H; TURNOFF
ORL P1 , #01H; TURNONANL P1, #0FEH; TURNOFF
External Port
PORTEX EQU 9001H
MOV DPTR,#PORTEX
MOV A, #08H
MOVX @DPTR, A ; ส่งออกMOVX A, @DPTR; รับเขา้
ตวัอยา่ง การ On/Off relay ท่ีขา PORTEX ขาท่ี 0
MOV A, #01H
MOVX @DPTR, A ; TURN ON
MOV A,#0FEH
MOVX @DPTR, A; TURNOFF
4
x
x
x
x
x
x
x
1Relay
ON/OFF
Data Bus
Port
Interrupt DMA Polling
POLL_0: JNB P1.0, POLL_1 ; Polling for Device 0CALL Service_0 ; if Bit 0 = ‘1’ Call Service _0
POLL_1: JNB P1.1, POLL_2 ; Polling for Device 1CALL Service_1
POLL_2: JNB P1.2, POLL_3 ; Polling for Device 2CALL Service_2
POLL_3: JNB P1.3, POLL_0 ; Polling for Device 3CALL Service_3JMP POLL_0 ; Check all device again
Service_0: … ; Service Program for Device 0
; Program/Device must clear status flagRET ; if it need to be served once
Service_1: … ; Service Program for Device 1
; Program/Device must clear status flagRET ; if it need to be served once….
5
B Requesting
Service ?
Service Routine for
Service B
YES
YES
NO
NO
A Requesting
Service ?
Service Routine for
Service A
NO
C Requesting
Service ?
Service Routine for
Service C
YES
6
ระบบการ Interrupt ของ 8052 และ 83154
6
7
IP (Interrupt Priority Register)
7
8
IE (Interrupt Enable Register)
8
TCON (Timer Control Register)IE1 : TCON.3 แสดงการเกิด interrupt มีค่าเป็น 1 เม่ือมีสญัญาณ
interrupt เขา้มา มีค่าเป็น 0 เม่ือมีการตอบสนองการ interrupt แลว้IT1 :TCON.2 ถา้มีค่าเป็น 1 จะเกิดการ interrupt เม่ือสญัญาณ
เปล่ียนจาก 1 เป็น 0 ถา้มีค่าเป็น 0 จะเกิดการ interrupt เม่ือสญัญาณ เป็น 0IE0 :TCON.1 เหมือนท่ีอธิบายไปแลว้ ส าหรับIT0 :TCON.0 เหมือนท่ีอธิบายไปแลว้ ส าหรับ
9
INT1
INT1
INT0
INT0
9
INT1
EA --- ET2 ES ET1 EX1 ET0 EX0
01234567
External interrupts
Timer 0 และ Timer 1 Interrupts
Serial port Interrupt
SM0 SM1 SM2 REN TB8 RB8 TI RI
01234567
EA --- ET2 ES ET1 EX1 ET0 EX0
01234567EA = 1;EX0 = 1;EX1 = 1;IT0/IT1 = 1 External interrupt caused by a falling edge signal on P3.2/P3.3IT0/IT1 = 0 External interrupt caused by a low level signal on P3.2/P3.3
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
01234567
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
01234567EA --- ET2 ES ET1 EX1 ET0 EX0
01234567EA = 1;ET0 = 1;ET1 = 1;TF0/TF1 = 1 แสดงวา่เกิดการ interrupt
EA = 1;ES = 1;เม่ือ TI/RI = 1 จะเกิดการ interrupt
IE
IE
IE
TCON
TCON
SCON
10
Source Vector address
RST 0000H
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H
TF2 + EXF2 002BH
Interrupt Service Routine
โปรแกรมท่ีจะท ำงำนเม่ือเกิด Interrupt
ตวัอย่ำงรปูแบบ ISR ของ IE0
ORG 0003H
.
.
.
.
.
.
.
RETI
หมำยเหตุ มีไม่เกิน 8 ค ำสัง่
11
12
เมือ่มกีารใช้ Interrupt รปูแบบในการเขยีนโปรแกรมควรจะเป็นORG 000H ;Reset entry point
AJMP MAIN
……………. ;ISR entry point
…………….
ORG 0030H ;Main program entry point
MAIN: ……………. ;Main program begin
ตวัอยา่งการเขยีนโปรแกรมเมือ่ใช้ Interrupt จาก Timer0
ORG 0000H ;Reset
AJMP MAIN
ORG 000BH ;Timer0 interrupt entry point
T0ISR : ………………… ;Timer0 ISR begin
…………………
RETI ;Return to Main program
ORG 0030H
MAIN : ………………… ;Main program
Polling InterruptMultiple Devices Connected to a Single Interrupt Line
MPUINT 1
I/O Interface 1
I/O Interface 2
I/O Interface 3
P1.0 P1.1 P1.2
ตวัอยา่ง ISR ซึง่ท าหน้าทีใ่นการ Polling Device status ทีเ่ป็น ‘0’ แลว้เลอืก ISR ทีเ่หมาะสมต่อไป
POLL_INT: PUSH PSW ; Save old status …
JNB P1.0, ISR_0 ; Polling for Device 0
JNB P1.1, ISR_1 ; Polling for Device 1
JNB P1.2, ISR_2 ; Polling for Device 2
RETI ; If no device responses
ISR_0: … ; Service Program for Device 0
… ;
POP PSW ; Restore old status
RETI ;
ISR_1: … ; Service Program for Device 0
… ;
POP PSW ; Restore old status
RETI ;
ISR_2: … ; Service Program for Device 0
… ;
POP PSW ; Restore old status
RETI ;
13
Sensing Input
ถา้เป็น ‘1’ เมือ่มสีญัญาณเขา้มา
POLL: JNB P1.0,POLL
ถา้เป็น ‘0’ เมือ่มสีญัญาณเขา้มา
POLL: JB P1.0, POLL
14
Monitoring duration
MOV R7, #0 ; Clear counterStart: JNB P1.0, Start; Read Input and
;Testing Bit 0 for ‘1’Count: INC R7 ; Increment counter
NOPNOPJB P1.0, Count ; Reading Input
;and Testing Bit 0 for ‘0’
15
Software DelayBasic DelayDELAY: MOV R7, #5 ; 1 M.CycleNEXT: DEC R7 ; 1 M.Cycle
CJNE R7, #0, NEXT ; 2 M.Cycles
Delay = (1 + (1+2) * 5) = 16 M.Cycles
Longer DelayDELAY: MOV R7, #5 ; 1 M.CycleLOOP1: MOV R6, #10 ; 1 M.CycleLOOP2: DEC R6 ; 1 M.Cycle
CJNE R6, #0, LOOP2 ; 2 M.CyclesDEC R7 ; 1 M.CycleCJNE R7, #0, LOOP1 ; 2 M.Cycles
Delay = 1+(1+(1+2)*10+1+2)*5 = 171 M.Cycles
Hardware Delay
ใน 8051 จะมี Timer/Counter อยู ่2 ชุด คือ Timer 0 และTimer 1 ซ่ึงนอกจากจะเป็นTimers แลว้สามารถใชเ้ป็น Counters ไดอี้กดว้ย โดยการโปรแกรมในรีจิสเตอร์ TMOD
TCON (Timer Control Register)
16
บิต ช่ือ ต ำแหน่งบิต ควำมหมำย
TCON.7 TF1 8FHบิตแฟลกแสดงกำรโอเวอร์โฟลว์ของ Timer 1 จะ Set โดย Hardware และ Clear โดย Software
TCON.6 TR1 8EH บิตควบคุมกำรปิด-เปิด Timer 1 Set และ Clear โดย SoftwareTCON.5 TF0 8DH แฟลกแสดงกำรโอเวอร์โฟลว์ของ Timer 0TCON.4 TR0 8CH บิตควบคุมกำรปิด-เปิด Timer 0
TCON.3 IE1 8BHบิตแฟลกแสดงกำรอนิเทอร์รัพท์จำก INT1 จะ Set โดย Hardware และสำมำรถ Clear ได้ด้วย Software
TCON.2 IT1 8AHบิตเลือกชนิดของสัญญำณอนิเทอร์รัพท์จำกอนิเทอร์รัพท์ภำยนอก INT1 สำมำรถ Set และ Clear ได้ด้วย Software
TCON.1 IE0 89H บิตแฟลกแสดงกำรอนิเทอร์รัพท์จำก INT0
TCON.0 IT0 88Hบิตเลือกชนิดของสัญญำณอนิเทอร์รัพท์จำกอนิเทอร์รัพท์ภำยนอก INT0
TMOD (Timer Mode Control)
17
บิต ช่ือ Timer ความหมาย
7 GATE 1 บิต Gate ของ Timer 1
6 C/T 1 บิตเลือก Counter/Timer ของ Timer 1
5 M1 1 Timer 1 Mode bit 1
4 M0 1 Timer 1 Mode bit 0
3 GATE 0 บิต Gate ของ Timer 0
2 C/T 0 บิตเลือก Counter/Timer ของ Timer 0
1 M1 0 Timer 0 Mode bit 1
0 M0 0 Timer 0 Mode bit 0
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 และ TH0 จะท างานเป็น Timer ซ่ึงควบคุมการท างานไดจ้าก Control bit ของTimer 1Timer 1 หยดุท างาน
18
Timer Mode and Overflow Flag Mode 0 (13-bit Timer Mode)
Mode 1 (16-bit Timer Mode) เหมือนMode 0 แต่เป็น 16 bits
19
Mode 2 (8-bit Auto–Reload Mode) เม่ือ TLx เกิด Overflow หรือเกิดเปล่ียนแปลงจาก FFHเป็น 00H จะมีการโหลดค่าท่ีเกบ็ไวใ้นTHx ไปเกบ็ไวใ้นTLx ซ่ึงจะเป็นค่าเร่ิมตน้ของการนบัคร้ังต่อไป
20
Mode 3 (Split Timer Mode)Timer 0 จะแยกเป็น 2 ตวัตวัละ 8 บิต คือ TL0 และ TH0 เม่ือ Timer เกิด Overflowจะมีการเซตบิต TF0 และ TF1 ในโหมดน้ี Timer 1 จะไม่ถูกใชง้านแต่เราสามารถสวติชใ์ห ้Timer 1 ไปท างานในโหมดอ่ืนได ้แต่การท างานของ Timer 1 จะไม่มีการอินเทอร์รัพท์เกิดข้ึน
กำรใช้เป็นตวันับ (Counter)ถา้บิต C/T เป็น “1” ตวั Timer จะน า Clock มาจากภายนอกโดยใชข้า P3.4 หรือ T0
เป็นขา Input Clock ใหก้บั Timer 0 และใชข้า P3.5 หรือ T1 เป็น Input Clock ใหก้บั Timer 1 การนบั 1 คร้ังจะตอ้งใชเ้วลา 2 Machine Cycles ดงันั้นความถ่ีสูงสุดท่ีจะให ้Timer ท างานเป็น Counter นบัได ้จะมีค่ามากท่ีสุด 500kHz ถา้ MCS-51 ท างานท่ีความถ่ีสญัญาณนาฬิกา 12 MHz
21
Example 1 กำรเร่ิม, หยุดและกำรควบคุม Timers
MOV TMOD,#00010000B ; Choose Timer 1, Mode 1(16 bits timer)MOV TL1,#9CH ; Initialize the timer with FF9CH (FFFFH-100D)MOV TH1,#0FFH ; so the timer will overflow after 100 clock cyclesSETB TR1 ; Start Timer 1
WAIT: JNB TF1, WAIT ; Wait until Timer 1 overflowsCLR TR1 ; Stop Timer 1CLR TF1 ; Clear Timer overflow flag 1
22
Example 2.2 สร้าง pulse โดยใช้ Hardware Delay
ORG 0000HJMP Start ; Space for ISRORG 001BH ; ISR for Timer 1 interruptCLR P1.0 ; Turn OFF outputCLR TR1 ; Stop Timer 1RETI
Start:MOV TMOD, #0001 0000BMOV IE, #1000 1000B; Enable interrupt for Timer 1MOV TH1, #0FDH; Set the delay time for 600 M.CyclesMOV TL1, #0A8HSETB P1.0 ; Turn ON outputSETB TR1 ; Start Timer 1
… ; Other Operations…
23
Example 2.1 สร้าง pulse โดยใช้ Software Delay
SETB P1.0 ; Turn ON outputCALL DELAY ; Wait M.CyclesCLR P1.0 ; Turn OFF output
… ; Other operations…
DELAY: MOV R7, #200 ; 1 M.CycleLOOP: DEC R7 ; 1 M.Cycle
CJNE R7, #0, LOOP ; 2 M.CyclesRET ; 2 M.Cycles
Example 3 สร้ำงสัญญำณ square wave 10kHz โดยให้ High 50us และ Low 50 us, Clock 12 MHz
ใช ้Timer mode 2 โดยให ้overflow ทุก 50 us
MOV TMOD,#02HMOV TH0,#0CDH ; FFH-50D=CDHSET TR0
LOOP: JNB TF0, LOOPCLR TF0CPL P1.0SJMP LOOP
24
Example 4 สร้ำงสัญญำณ square wave 1kHz โดยให้ High 500us และ Low 500 us, Clock 12 MHz
ช่วงเวลามากกวา่ 256 (FFH) ใช ้Timer mode 1 (16 bits) โดยให ้overflow ทุก 500 us
MOV TMOD,#01HLOOP: MOV TH0,#0FEH
MOV TL0,#0CH ; FFFFH-500D=FE0CHSET TR0
WAIT: JNB TF0, WAITCLR TR0CLR TF0CPL P1.0SJMP LOOP
25
Example 5 Delay 50 ms, Clock 12 MHz
ใช ้Timer mode 1 โดยให ้overflow ทุก 50 ms
DELAY: MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0AFH ; FFFFH-50000D=FE0CH SET TR0
LOOP: JNB TF0, LOOPCLR TF0CPL P1.0RET
26
ตวัอย่ำง Intrusion warning systemออกแบบระบบกนัผูบุ้กรุกซ่ึงจะส่งเสียงความถ่ี 4000 Hz เตือนเป็นเวลา 1 วนิาที (ใชล้ าโพงต่อกบั P1.7) เม่ือมีสญัญาณจาก sensor ท่ีประตูท าให ้INT0 เป็น
High-to-low transition ในตวัอยา่งน้ีจ าเป็นตอ้งใช ้3 interrupts ไดแ้ก่ external 0 (door sensor), Timer 0 (400 Hz tone), และTimer 1 (1 second timeout)
Address Machine code Line Assembly code0000 5 ORG 0000H0000 020030 6 LJMP MAIN ;3-byte
;instruction0003 02003A 7 LJMP EX0ISR ;EXT 0
;vector address000B 8 ORG 000BH ;Timer 0
;vector000B 020045 9 LJMP T0ISR001B 10 ORG 001BH ;Timer 1
;vector001B 020059 11 LJMP T1ISR0030 12 ORG 0030H0030 D288 13 MAIN: SETB IT0 ;negative edge
;activated
Address Machine code Line Assembly code0032 758911 14 MOV TMOD, #11H ;16-bit
;timer mode0035 75A881 15 MOV IE, #81H ;enable EXT 00038 80FE 16 SJMP $
17003A 7F14 18 EXOISR: MOV R7, #20
;20 x 5000 us = 1 s.003C 0280 19 SETB TF0 ;force timer 0 INT003E 028F 20 SETB TF1 ;force timer 1 INT0040 02A9 21 SETB ET0 ;begin tone for 1 s.0042 02AB 22 SETB ET1 ;enable timer INT
27
28
ตัวอย่ำง Intrusion warning system (ต่อ)
Address Machine code Line Assembly code0044 32 23 RETI
240045 C28C 25 TOISR: CLR TR0 ;stop timer0047 OF07 26 DJNZ R7, SKIP ;if not
;20th time, exit0049 C2A9 27 CLR ET0 ; if 20th,
;disable tone004E C2AB 28 CLR ET1 ;disable itself0040 020058 29 LJMP EXIT0050 758C3C 30 SKIP: MOV TH0, #HIGH(-
50000) ;0.05 sec. delay
Address Machine code Line Assembly code0053 758ABO 31 MOV TL0, #LOW(-50000)0056 028C 32 SETB TR00058 32 33 EXIT: RETI
340059 C28E 35 T1ISR: CLR TR1005E 7580FB 36 MOV TH1, #HIGH(-1250)
;count for 400 Hz005E 758BIE 37 MOV TL1, #LOW(-1250)0061 B297 38 CPL P1. 7 ;play sound0063 028E 39 SETB TR10065 32 40 RETI
41 END
ตวัอย่ำง ระบบและโปรแกรมเพ่ือควบคุมมอเตอร์ใหห้ยดุท างานเม่ือมีตวัมอเตอร์ความร้อนสูงเกินไปหรือหมุนเร็วเกินกวา่ 10,000 r.p.m. เช็นเชอร์วดัอุณหภูมิซ่ึงต่ออยู่กบั P3.2 (External interrupt 0) จะให ้logic 0 เม่ืออุณหภูมิสูงเกินไป และ optical encoder ซ่ึงต่ออยูก่บั P3.5 (Timer/Counter 1) จะส่งสญัญาณทุกคร้ังท่ีมอเตอร์หมุน 1 รอบ วธีิหยดุการท างานของระบบท าไดโ้ดยใหส้ญัญาณท่ี P1.0 เป็น 1 โดยท่ีระบบน้ีใช ้24 MHz crystal oscillator ในตวัอยา่งน้ีจ าเป็นตอ้งใช ้2 interrupts ไดแ้ก่ external 0 (temperature sensor), Timer/Counter 0 ( Motor speed) 1 M.cycle = 12/(24*10^6) = 0.5 us หรือ 1 s = 2*10^6 M.cycles10,000 r.p.m.= 10 r/120,000 M.cyclesใส่ค่าเร่ิมตน้ให ้Timer 0 นบั 120 หรือ 256-120 = 136 = 88H1000 คร้ัง
29
Counter EQU 00FFHORG 0000HLJMP MAIN ORG 000BH ; EXT 0 vector LJMP EX0ISR ORG 000BH ;Timer 0 vectorLJMP T0ISR
MAIN: SETB IT0 ;negative edge activatedMOV TMOD, #52H ; timer 0 mode 2, counter 1 mode 1MOV IE, #83H ;enable EXT 0, ET0MOV TH0, #88HSETB TR0SETB TR1CLR P1.0 ; Start motorSJMP $
EXOISR: SETB P1.0; Stop MotorRETI
T0ISR: MOV A, CounterINC A ;Increase counterCJNE A,#1000, EXIT
; overflow 10 times=120,000 M.cyclesMOV Counter, A MOV R0,TL1CJNE R0, #10, EXITCLR P1.0 ; Stop motorCLR TL1
EXIT: RETIEND
หมายเหตุ โปรแกรมนีม้ีที่ผิดอยู ่2 แหง่ และอีกหนึง่จดุที่อาจท าให้ท างานไมไ่ด้