Interrupt & Timer.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
LAB # 4.
Advertisements

เฉลย (เฉพาะข้อแสดงวิธีทำ)
Chapter 2 Process Pisit Nakjai.
หน่วยที่ 3 ภาษาคำสั่งพื้นฐานที่ใช้เขียนโปรแกรม PLC
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
FIX COMMON PC PROBLEMS By Missis Jatuporn Surinseng Missis Chamaiporn Sommit.
บทที่ 4 วงจร ADC เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์
คำสั่ง : TIMER และ TIMH (FUN15)
บริโภคอย่างมีความสุข งานนำเสนอแฟ้มสะสมผลงาน
การเขียนโปรแกรมภาษาปาสคาล โดยใช้โครงสร้างหลักทั้ง 3 โครงสร้าง
Superior COmmunications Research and Prototyping for commercialization น. ส. ศันสนีย์ เนติโรจนกุล กลุ่มที่ 3 ส่วนประมวลผลสัญญาณ ดิจิตอลเบสแบนด์ด้วยชิป.
หน่วยที่ 2 Introduction to Algorithm Analysis
Adobe Photoshop ลักษณะ Software ที่ฉันชอบ ลักษณะ Software ที่ฉันชอบ วิธีการใช้งานโปรแกรม Adobe Photoshop วิธีการใช้งานโปรแกรม Adobe Photoshop เหตุผลที่ชอบ.
ครั้งที่ 7 รีจิสเตอร์ (REGISTER). รีจิสเตอร์ (Register) รีจิสเตอร์เป็นวงจรความจำที่ใช้ในการเก็บค่า ทางไบนารี่ ใช้ในการเก็บค่าในระหว่างการ ประมวลผลโดยใช้ฟลิป.
เตชิษฐ์ เรือง ไพศาล.  คอมพิวเตอร์เป็นอุปกรณ์ไฟฟ้าที่ใช้ไฟฟ้า กระแสตรงทำงาน  ข้อมูลภายในเป็นข้อมูลดิจิตอล  …..  แทนข้อมูลเหล่านี้ด้วยแรงดันไฟฟ้า.
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
ตอนที่ 2 โครงสร้างภาษา C Arduino เบื้องต้น
คำสั่งควบคุมการทำงาน
กระบวนการ สังเคราะห์ด้วยแสง
แนะนำไมโครคอนโทรเลอร์ ATMEGA 16
Microcontroller (PIC + Example)
สถิติเบื้องต้นสำหรับการวิเคราะห์ข้อมูล
การทำงานของไมโครโปรเซสเซอร์
บทที่ 5 การใช้คำสั่ง Select Case , For Next และ Do While
ELECTRONICS Power อาจารย์ผู้สอน การประเมินผล Lab ปฏิบัติ
SR Latch SR Latch ต้องรอ negative edge เพื่อให้ Q = D Y = D Q = Y.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
แนวข้อสอบ Final (จดด่วน)
IP-Addressing and Subneting
IP-Addressing and Subneting
SPI.
การประยุกต์ Logic Gates ภาค 2
บทที่ 3 การพัฒนาโปรแกรมโดยเขียนคำสั่ง VBA
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
Flip-Flop บทที่ 8.
แล้วทำการเรียงลำดับข้อมูลใหม่โดยเรียงจากน้อยไปหามาก
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
Yale Intrusion Alarm intrusion Introduction
ตัวอย่างการต่ออุปกรณ์ต่อพ่วงเข้ากับ PIC16F877A
ดิจิตอล + เลขฐาน บทที่ 2.
คุณลักษณะของสัญญาณไฟฟ้าแบบต่าง ๆ
อาจารย์อภิพงศ์ ปิงยศ บทที่ 5 : การตรวจจับข้อผิดพลาด การควบคุมการไหลของข้อมูล และการควบคุมข้อผิดพลาด Part1 สธ313 การสื่อสารข้อมูลและเครือข่ายคอมพิวเตอร์ทางธุรกิจ.
ไมโครคอนโทรลเลอร์ บทที่ 11.
โครงสร้างภาษา C Arduino
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
บทที่ 1 โครงสร้างคอมพิวเตอร์พื้นฐาน
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
ประเภทแผ่นโปร่งใส (แผ่นใส) รายวิชา ออปแอมป์และลิเนียร์ไอซี
Memory & I/O Mapping (Z80)
Control Statement เงื่อนไขคำสั่งในโปรแกรม ภาษา C
Android Programming Getting Start Prawit Pimpisan Computer Science
One Point Lesson (OPL).....บทเรียนประเด็นเดียว
Flip-Flop บทที่ 8.
Flip-Flop บทที่ 8.
ปัญหาของข้อมูลในระบบHDC
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Object-Oriented Programming Paradigm
บทที่ 9 การทำซ้ำ (Loop).
คณิตศาสตร์ 1 รหัสวิชา
บทที่ 9 การเรียงลำดับข้อมูล (Sorting)
บทที่ 8 การแก้ไขข้อผิดพลาดโปรแกรม(Debugging)
2 โครงสร้างข้อมูลแบบสแตก (STACK).
กิจกรรมที่ 7 นายปรีชา ขอวางกลาง
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
การเติบโตของฟังก์ชัน (Growth of Functions)
การจัดการความรู้ด้านงานสนับสนุน
บทที่ 7 การบัญชีภาษีมูลค่าเพิ่ม
ปรากฏการณ์ดอปเพลอร์ของเสียง Doppler Effect of Sound
ใบสำเนางานนำเสนอ:

Interrupt & Timer

สัญญาณ Interrupt Interrupt หมายถึงสัญญาณที่ส่งมาบอกไมโครโปรเซสเซอร์ให้หยุดการ ทำงานของโปรแกรมที่กำลังทำอยู่ และข้ามไปทำงานโปรแกรมที่ถูกเขียนขึ้นมา สำหรับสัญญาณ Interrupt นั้น เราเรียกโปรแกรมนี้ว่า Interrupt Service Routine (ISR) Internal Interrupt เป็นสัญญาณที่ถูกสร้างจาก Software หรือ Hardware ภายในไมโครโปรเซสเซอร์ External Interrupt เป็นสัญญาณที่ถูกสร้างโดยอุปกรณ์ต่อพ่วงและส่งมา ให้ไมโครโปรเซสเซอร์

Flow of Interrupt

Polling

Interrupt

ลำดับความสำคัญ (Priority) ของสัญญาณ Interrupt สัญญาณ Interrupt ที่มีความสำคัญสูงสามารถ Interrupt สัญญาณ Interrupt ที่มีความสำคัญต่ำ

ลำดับความสำคัญ (Priority) ของสัญญาณ Interrupt สัญญาณ Interrupt ที่มีความสำคัญต่ำไม่สามารถ Interrupt สัญญาณ Interrupt ที่มีความสำคัญสูงได้

บิทที่ใช้ควบคุมการทำงานของ Interrupt Flag bit : ถูกเซ็ทเป็น 1 เมื่อมีสัญญาณ Interrupt เกิดขึ้น Enable bit : เซ็ทเป็น 1 โดย Software เพื่อให้ ไมโครโปรเซสเซอร์สามารถตอบรับสัญญาณ Interrupt และเซ็ทเป็น 0 เพื่อไม่ให้ไมโครโปรเซสเซอร์ตอบรับสัญญาณ Interrupt Priority bit : เซ็ทเป็น 1 โดย Software เพื่อให้สัญญาณ Interrupt มีลำดับความสำคัญสูง และเซ็ทเป็น 0 เพื่อให้สัญญาณ Interrupt มีลำดับความสำคัญต่ำ

แหล่งกำเนิดสัญญาณ 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)

Interrupt Vector Interrupt Vector คือ Address เริ่มต้นของ Program Memory ที่ใช้เก็บ ISR Interrupt Vector สำหรับ High Priority Interrupt เริ่มที่ Address 0008H Interrupt Vector สำหรับ Low Priority Interrupt เริ่มที่ Address 0018H

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)

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

Register ที่เกี่ยวกับ Interrupt

โมดูล 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)

โมดูล Timer 0

โมดูล 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

โมดูล Timer 0 ในโหมด 16 bit โมดูล Timer 0 จะนับตั้งแต่ 0 จนถึง 65535 แล้ว เกิด Overflow กลับไปเป็น 0 ใหม่ ทำให้ TMR0IF = 1 เกิด Timer 0 Overflow Interrupt

โมดูล Timer 0 ในโหมดจับเวลา เราสามารถเขียนโปรแกรมให้เกิด Timer 0 Overflow Interrupt ทุกๆ x วินาทีได้ดังนี้ กำหนดให้สัญญาณนาฬิกาของ PIC18F8722 มีความถี่เท่ากับ 4 MHz เพราะฉะนั้น 1 รอบคำสั่งจะใช้เวลาเท่ากับ 4/4,000,000 = 1 ไมโครวินาที ถ้าต้องการจับเวลา x วินาที จะต้องใช้รอบคำสั่งทั้งหมดเท่ากับ x/(1 ไมโครวินาที) = 1,000,000 x รอบคำสั่ง

โมดูล Timer 0 ตัวอย่างเช่นถ้าต้องการจับเวลา 2 วินาที จะต้องใช้รอบคำสั่งทั้งหมด 2,000,000 รอบคำสั่ง 2,000,000 = 256*7812.5 (ใช้ไม่ได้) = 128*15625 (PSA=110, TMR0=65536-15625=49911=0xc2f7) = 64*31250 (ใช้ได้) (PSA=101, TMR0=65536-31250=34286=0x85ee) = 32*62500 (ใช้ได้) (PSA=100, TMR0=65536-62500=3036=0xbdc) = 16*125000 (ใช้ไม่ได้)

โมดูล Timer 0

โปรแกรมสร้าง 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 = 0b10000110; //Prescale Value = 1:128 PORTBbits.RB0 = 1; while(1) PORTBbits.RB0 = ~PORTBbits.RB0; delay(); // wait }

โปรแกรมสร้าง 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 = 0b10000110; //Prescale Value = 1:128 TMR0H = 0xc2; TMR0L = 0xf7; INTCONbits.TMR0IF = 0; // clear timer 0 flag T0CONbits.TMR0ON = 1; // start Timer 0 again }

โปรแกรมสร้าง Square Wave 0.25Hz แบบ Interrupt void main (void) { TRISB = 0x00; // configure portB as output T0CON = 0b10000110; //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 = 0b10000110; //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 }