ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Interrupt & Timer
2
สัญญาณ Interrupt Interrupt หมายถึงสัญญาณที่ส่งมาบอกไมโครโปรเซสเซอร์ให้หยุดการ ทำงานของโปรแกรมที่กำลังทำอยู่ และข้ามไปทำงานโปรแกรมที่ถูกเขียนขึ้นมา สำหรับสัญญาณ Interrupt นั้น เราเรียกโปรแกรมนี้ว่า Interrupt Service Routine (ISR) Internal Interrupt เป็นสัญญาณที่ถูกสร้างจาก Software หรือ Hardware ภายในไมโครโปรเซสเซอร์ External Interrupt เป็นสัญญาณที่ถูกสร้างโดยอุปกรณ์ต่อพ่วงและส่งมา ให้ไมโครโปรเซสเซอร์
3
Flow of Interrupt
4
Polling
5
Interrupt
6
ลำดับความสำคัญ (Priority) ของสัญญาณ Interrupt
สัญญาณ Interrupt ที่มีความสำคัญสูงสามารถ Interrupt สัญญาณ Interrupt ที่มีความสำคัญต่ำ
7
ลำดับความสำคัญ (Priority) ของสัญญาณ Interrupt
สัญญาณ Interrupt ที่มีความสำคัญต่ำไม่สามารถ Interrupt สัญญาณ Interrupt ที่มีความสำคัญสูงได้
8
บิทที่ใช้ควบคุมการทำงานของ Interrupt
Flag bit : ถูกเซ็ทเป็น 1 เมื่อมีสัญญาณ Interrupt เกิดขึ้น Enable bit : เซ็ทเป็น 1 โดย Software เพื่อให้ ไมโครโปรเซสเซอร์สามารถตอบรับสัญญาณ Interrupt และเซ็ทเป็น 0 เพื่อไม่ให้ไมโครโปรเซสเซอร์ตอบรับสัญญาณ Interrupt Priority bit : เซ็ทเป็น 1 โดย Software เพื่อให้สัญญาณ Interrupt มีลำดับความสำคัญสูง และเซ็ทเป็น 0 เพื่อให้สัญญาณ Interrupt มีลำดับความสำคัญต่ำ
9
แหล่งกำเนิดสัญญาณ Interrupt
Sources Flag Bit Enable Bit Priority Bit A/D Conversion Complete ADIF ADIE ADIP Capture Complete (CCP) CCPxIF CCPxIE CCPxIP Compare Complete (CCP) Interrupt-on-Change (RB7:RB4) RBIF RBIE RBIP INTn Pin INTnIF INTnIE INTnIP TMR0 Overflow TMR0IF TMR0IE TMR0IP TMR1 Overflow TMR1IF TMR1IE TMR1IP TMR2 to PR2 Match (PWM) TMR2IF TMR2IE TMR2IP TMR3 Overflow TMR3IF TMR3IE TMR3IP TMR4 to PR4 Match (PWM) TMR4IF TMR4IE TMR4IP A/D Conversion Complete Capture Complete (CCP) Compare Complete (CCP) Interrupt-on-Change (RB7:RB4) INTn Pin PORTB, Interrupt-on-Change TMR0 TMR0 Overflow TMR1 Overflow TMR2 to PR2 Match (PWM) TMR3 Overflow TMR4 to PR4 Match TMR4 to PR4 Match (PWM)
11
Interrupt Vector Interrupt Vector คือ Address เริ่มต้นของ Program Memory ที่ใช้เก็บ ISR Interrupt Vector สำหรับ High Priority Interrupt เริ่มที่ Address 0008H Interrupt Vector สำหรับ Low Priority Interrupt เริ่มที่ Address 0018H
13
Register ที่เกี่ยวกับ Interrupt
RCON (Reset Control Register) INTCON (Interrupt Control Register) INTCON2 (Interrupt Control Register 2) INTCON3 (Interrupt Control Register 3) PIR1, PIR2, PIR3 (Peripheral Interrupt Request Flag Register) PIE1, PIE2, PIE3 (Peripheral Interrupt Enable Register) IPR1, IPR2, IPR3 (Peripheral Interrupt Priority Register)
14
Register ที่เกี่ยวกับ Interrupt
15
Register ที่เกี่ยวกับ Interrupt
16
Register ที่เกี่ยวกับ Interrupt
17
Register ที่เกี่ยวกับ Interrupt
18
Register ที่เกี่ยวกับ Interrupt
19
Register ที่เกี่ยวกับ Interrupt
20
Register ที่เกี่ยวกับ Interrupt
21
Register ที่เกี่ยวกับ Interrupt
22
Register ที่เกี่ยวกับ Interrupt
23
Register ที่เกี่ยวกับ Interrupt
24
Register ที่เกี่ยวกับ Interrupt
25
Register ที่เกี่ยวกับ Interrupt
26
Register ที่เกี่ยวกับ Interrupt
27
โมดูล Timer 0 โมดูล Timer 0 สามารถทำงานในโหมดจับเวลา (Timer) หรือโหมดนับ สัญญาณ (Counter) ได้ ในโหมดจับเวลา (T0CS=0) ค่าของ Timer 0 Register จะเพิ่มขึ้นทุกๆ 1 รอบคำสั่ง (Instruction Cycle) ถ้า PSA = 1 หรือทุกๆ 2, 4, 8, 16, 32, 64, 128, 256 รอบคำสั่งถ้า PSA = 0 และเราสามารถเขียน โปรแกรมเพื่อกำหนดค่าเริ่มต้นให้กับ Timer 0 Register ได้ ในโหมดนับสัญญาณ (T0CS=1) ค่าของ Timer 0 Register จะเพิ่มขึ้น เมื่อสัญญาณของขา RA4/T0CKI เป็นขอบขาขึ้น (T0SE=0) หรือขอบขาลง (T0SE=1)
28
โมดูล Timer 0
29
โมดูล Timer 0 เราสามารถกำหนดให้โมดูล Timer 0 ทำงานได้ทั้งในโหมด 8 bit (T08BIT = 1) หรือ 16 bit (T08BIT=0) ในโหมด 8 bit โมดูล Timer 0 จะนับตั้งแต่ 0 จนถึง 255 แล้วเกิด Overflow กลับไปเป็น 0 ใหม่ ทำให้ TMR0IF = 1 เกิด Timer 0 Overflow Interrupt
30
โมดูล Timer 0 ในโหมด 16 bit โมดูล Timer 0 จะนับตั้งแต่ 0 จนถึง แล้ว เกิด Overflow กลับไปเป็น 0 ใหม่ ทำให้ TMR0IF = 1 เกิด Timer 0 Overflow Interrupt
31
โมดูล Timer 0 ในโหมดจับเวลา เราสามารถเขียนโปรแกรมให้เกิด Timer 0 Overflow Interrupt ทุกๆ x วินาทีได้ดังนี้ กำหนดให้สัญญาณนาฬิกาของ PIC18F8722 มีความถี่เท่ากับ 4 MHz เพราะฉะนั้น 1 รอบคำสั่งจะใช้เวลาเท่ากับ 4/4,000,000 = 1 ไมโครวินาที ถ้าต้องการจับเวลา x วินาที จะต้องใช้รอบคำสั่งทั้งหมดเท่ากับ x/(1 ไมโครวินาที) = 1,000,000 x รอบคำสั่ง
32
โมดูล Timer 0 ตัวอย่างเช่นถ้าต้องการจับเวลา 2 วินาที จะต้องใช้รอบคำสั่งทั้งหมด 2,000,000 รอบคำสั่ง 2,000,000 = 256* (ใช้ไม่ได้) = 128*15625 (PSA=110, TMR0= =49911=0xc2f7) = 64*31250 (ใช้ได้) (PSA=101, TMR0= =34286=0x85ee) = 32*62500 (ใช้ได้) (PSA=100, TMR0= =3036=0xbdc) = 16* (ใช้ไม่ได้)
33
โมดูล Timer 0
34
โปรแกรมสร้าง Square Wave 0.25Hz แบบ Polling
#include <xc.h> void delay(void) { TMR0H = 0xc2; TMR0L = 0xf7; INTCONbits.TMR0IF = 0; // clear timer 0 flag T0CONbits.TMR0ON = 1; // start the Timer 0 while(!INTCONbits.TMR0IF); // wait for timer flag T0CONbits.TMR0ON = 0; // stop the Timer 0 } void main (void) { TRISB = 0x00; // configure portB as output T0CON = 0b ; //Prescale Value = 1:128 PORTBbits.RB0 = 1; while(1) PORTBbits.RB0 = ~PORTBbits.RB0; delay(); // wait }
35
โปรแกรมสร้าง Square Wave 0.25Hz แบบ Interrupt
#include <xc.h> // Timer 0 Interrupt Service Routine void interrupt timer2_isr(void) { T0CONbits.TMR0ON = 0; // stop the Timer 0 PORTBbits.RB0 = ~PORTBbits.RB0; T0CON = 0b ; //Prescale Value = 1:128 TMR0H = 0xc2; TMR0L = 0xf7; INTCONbits.TMR0IF = 0; // clear timer 0 flag T0CONbits.TMR0ON = 1; // start Timer 0 again }
36
โปรแกรมสร้าง Square Wave 0.25Hz แบบ Interrupt
void main (void) { TRISB = 0x00; // configure portB as output T0CON = 0b ; //Prescale Value = 1:128 PORTBbits.RB0 = 1; RCONbits.IPEN = 1; // enable interrupt priority INTCON2bits.TMR0IP = 1; // configure TMR0 interrupt to high priority INTCONbits.TMR0IF = 0; // clear timer 0 flag INTCONbits.GIEH = 1; // enable high-priority interrupts INTCONbits.TMR0IE = 1; // enable TMR2 overflow interrupt T0CON = 0b ; //Prescale Value = 1:128 TMR0H = 0xc2; TMR0L = 0xf7; T0CONbits.TMR0ON = 1; // start Timer 0 while(1) // wait for interrupts in infinite loop { // do something usefully }
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.