29
Lecture 3 1 Introduction to MCS-51 Peripherals รูปที1 แสดงแผนผังของ MCS-51 peripherals และการใช้งานเพื่อเป็นช่องทางติดต่อระหว่าง CPU กับอุปกรณ์ภายนอก ส่วน peripherals นี้ประกอบด้วย 2 Timers/Counters (อาจมี 3 ในบางเบอร์ ), Serial port ซึ่งใช้ UART (Universal Asynchronous Receive Transmit) protocol สามารถทาให้ติดต่อสื่อสารกับ computer หรือ microcontroller ตัวอื่นได้ นอกจากนั้นยังมี 2 External Interrupt sources (INT0 and INT1) ซึ่งเอาไว้รับสัญญาณ interrupt จากภายนอก CPU Timer/Counter 1 Timer/Counter 0 T0 T1 Clock /12 Serial Port (UART) External Interrupt 0 External Interrupt 1 INT0 INT1 RXD TXD รูปที่ 1 MCS-51 Peripherals Timers/Counters เนื่องจากใน MSC-51 มี Timers/Counters ให้ สาหรับ 80C51 จะมี 16 bit Timer/Counter register ให้ 2 ชุด (คือ Timer 0 และ Timer 1) และสาหรับ 80C52, 83C154 และ 83C154D จะมีเพิ่มขึ้นอีก 1 ตัว (คือ Timer 2) ซึ่งทั้งหมดนี้สามารถใช้งานเป็น Timer หรือ Even counter ก็ได้

Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

1

Introduction to MCS-51 Peripherals รปท 1 แสดงแผนผงของ MCS-51 peripherals และการใชงานเพอเปนชองทางตดตอระหวาง CPU กบอปกรณภายนอก สวนperipherals นประกอบดวย 2 Timers/Counters (อาจม 3 ในบางเบอร), Serial port ซงใช UART (Universal Asynchronous Receive Transmit) protocol สามารถท าใหตดตอสอสารกบ computer หรอ microcontroller ตวอนได

นอกจากนนยงม 2 External Interrupt sources (INT0 and INT1) ซงเอาไวรบสญญาณ interrupt จากภายนอก

CPU

Timer/Counter 1Timer/Counter 0

T0 T1

Clock

/12

Serial Port(UART)

External Interrupt 0 External Interrupt 1

INT0 INT1

RXDTXD

รปท 1 MCS-51 Peripherals

Timers/Counters

เนองจากใน MSC-51 ม Timers/Counters ให ส าหรบ 80C51 จะม 16 bit Timer/Counter register ให 2 ชด (คอ Timer 0 และ Timer 1) และส าหรบ 80C52, 83C154 และ 83C154D จะมเพมขนอก 1 ตว (คอ Timer 2) ซงทงหมดนสามารถใชงานเปน Timer หรอ Even counter กได

Page 2: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

2

การใชงานเปน Timer

เมอใชงานเปน Timer คาใน Register จะนบสญญาณภายในเองทกๆ Machine cycle จากท 1 Machine cycle ใชสญญาณ Clock 12 ลก ดงนน คาของ Timer จะนบขนดวยความเรว 1/12 ของความถ Clock ทใช การใชงานเปน Timer สามารถก าหนดรปแบบการใชงานไดจาก Register TMOD ไดจาก Bit M0, M1 ซงเลอกไดทงหมด 4 Mode ดวยกน

การใชงานเปน Counter

ถาบต C/T ใน Register TMOD เปน ‚1‛ ตว Counter จะนบสญญาณจากภายนอกโดยใชขา P3.4 หรอ T0 เปน

ขา Input ใหกบ Timer 0 และใชขา P3.5 หรอ T1 เปน Input ใหกบ Timer 1

เมอใชงานเปน Counter คาใน Register จะมคาเพมขนทกครงทมการเปลยนแปลงสถานะ ‘1’ to ‘0’ ของสญญาณจากภายนอกทขา Input ทสมพนธกน (T0, T1 และ T2) ในการท างานของ Counter น สญญาณจากภายนอก จะถกตรวจสอบในชวงเวลาของ S5P2 ของทกๆ Machine cycle เมอมนตรวจพบสถานะทเปน ‘1’ ใน Cycle ใดๆ แลวตรวจพบสถานะทเปน ‘0’ ใน Cycle ถดมา คาของ Counter กจะเพมขน โดยคาของ Register จะมการเปลยนแปลงในชวงเวลาของ S3P1 ของ Cycle ตอไป หรอพดงายๆวามการนบ 1 ครง จะตองใชเวลา 2 Machine Cycles

จากทการท างานของ Counter ทตรวจสอบสญญาณ ใน 2 Cycle กจะท าใหได ความถสงสดทจะนบไดคอ 1/24 ของสญญาณ Clock ทใช เชน ถา MCS-51 ท างานทความถสญญาณนาฬกา 12 MHz ความถสงสดทจะให Timer ท างานเปน Counter นบได จะมคามากทสด 500 kHz เมอ Timer/Counter นบจนเตมแลวจะเกดการ overflow ซงจะเปนสญญาณ interrupt ไดเชนกน

นอกจากการใชงานทเลอกไดวาใชเปน Timer หรอ Counter แลว Timer 0 และ Timer 1 จะสามารถก าหนดรปแบบการท างานได 4 Mode ดวยกน และส าหรบ Timer 2 จะสามารถก าหนดรปแบบการท างานได 3 แบบคอ Capture, Auto-reload, Baud rate generator

การท างานของ Timer/Counter สามารถควบคมไดโดยการก าหนดคาใน Register IE (Interrupt Enable Register), TMOD (Timer Mode Register) และ TCON (Timer Control Register) ดงตอไปน

IE Register

EA Enable All interrupts

ET1 Enable Timer 1 interrupts

ET0 Enable Timer 0 interrupts

บตเหลานใน IE จะตองถก set เพอใหเกดการ interrupt จาก Timer โดยเขยนในโปรแกรมดงน EA=1;

Page 3: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

3

ET0=1;

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

C/~T Bit

ส าหรบเลอกการท างานของ วาจะใชเปน Timer หรอ Counter ถา Bit นเปน

1 (Counter) เลอกการท างานเปน Counter ซงกจะท าการนบสญญาณทเขามาท ขา Tx

0 (Timer) เลอกการท างานเปน Timer ซงกจะท าการนบสญญาณ Clock/12

M1/M0 Bits

00 Mode 0 01 Mode 1 10 Mode 2 11 Mode 3

Page 4: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

4

การท างานของ 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

Mode 1 การท างานใน Mode 1 น เหมอนกบการท างานใน Mode 0 แตเปนการใชงานของ Timer register ทง 16 Bit คาจากการนบ 8 Bit บนอยใน THx และคาจากการนบ 8 Bit ลางอยใน TLx

Mode 2 การท างานใน Mode น จะเปนการใชงานของ Timer register แบบ 8 Bit ของ TLx เมอ TLx เกด Overflow หรอเกดเปลยนแปลงจาก FFH เปน 00H Timer interrupt flag TFx จะมคาเปน ‘1’ และจะมการท า Automatic reload โหลดคาทเกบไวใน THx ไปเกบไวใน TLx ซงจะเปนคาเรมตนของการนบครงตอไป

Page 5: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

5

Mode 3 ในโหมดน Timer 1 จะไมถกใชงานแตเราสามารถสวตชให Timer 1 ไปท างานในโหมดอนได แตการท างานของ Timer 1 จะไมมการอนเทอรรพทเกดขน

Timer 0 แยกเปน 2 ตวตวละ 8 บต คอ TL0 และ TH0 เมอ Timer เกด Overflow จะมการเซตบต TF0 และ TF1 ตามล าดบ

Page 6: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

6

สวน 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 ทเพมขน

Register TMOD ไมไดเปน bit-addressable register เหมอน IE และ TCON เพราะฉะนนการใสคาเรมตนเขาไปตองท าทเดยวททงหมด 8 บต

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 ใหนบ หรอหยด

Page 7: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

7

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 เรมท างานสามารถเขยนในโปรแกรมไดดงน

TR0=1;

ตวอยาง 1 การเรม, หยดและการควบคม Timers void main (void) { TMOD = (TMOD & 0xF0) | 0x01; /* Choose Timer 0, Mode 1(16 bits timer)*/ ……………… ……………… while (1)

Page 8: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

8

{ TH0 = 0xFF; /*Initialize the timer with FF9CH (FFFFH-100D) */ TL0 = 0x9C; /* so the timer will overflow after 100 clock cycles*/ TR0 = 1; /* Start Timer 0*/ L1: if(TF0==0) { goto L1; /* Wait until Timer 0 overflows*/ }

TR0=0;/* Stop Timer 0*/ TF0 = 0;/* Clear Timer overflow flag 1*/

…………… ……………

} } ตวอยาง 2 สรางสญญาณ Pulse ใหมคาบเวลา 30000 us ท าไดโดย การท าให Output Bit ทตองการ มสถานะ ON แลวกท าให สถานะของ Output Bit เดยวกนน เปลยนเปน OFF กจะไดสญญาณ Pulse ตามตองการ แตในการสรางสญญาณ Pulse ใหมคาบเวลาไดตามทก าหนดนน สงทตองท าคอ หลงจากทท าให Bit นนๆ ON แลวจะตองหนวงเวลา (Delay ) เปนระยะเวลาตามทก าหนด จงคอยเปลยนสถานะของ Bit นนๆ กลบเปน OFF

การเขยนโปรแกรมสามารถท าได 2 แบบ คอ ใช software Delay หรอ Hardware delay

Pulse Output by Software Delay

การสราง Delay สามารถท าไดโดยการวธการของ Software หรอ Hardware กได

ในการหนวงเวลาโดยใช Software นน สามารถท าไดโดย การให CPU ท างาน ในลกษณะ ของการวน Loop ตามจ านวนครงทก าหนด ซงเวลาท CPU ใชใน การท างานคอเวลาทเราตองการจะหนวงนนเอง void dmsec (unsigned int count) { // mSec Delay unsigned int i; // Keil CA51 (x2)

0?

DECREMENT COUNTER

COUNTER = VALUE

NO

YES

OUT

x

x

x

x

x

x

x

1

Port1

30 msec

Page 9: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

9

while (count) { i = 230; while (i>0) i--; count--; } } ** คาเวลาของการท างานในฟงกชนมาจากการประมาณ **

การสราง Software Delay ทนานขนนน สามารถท าไดโดยการใช Counter ทนบ รอบของการวน Loop ทมขนาดมากขน แตเนองจากจาก Counter ถกก าหนดเปน unsigned int จงมคาไดสงสด 65535 ถาตองการใหเกด Delay นานขนอกอาจตองมการซอน loop หรอใชเทคนคการเขยนโปรแกรมแบบอนๆเขามาชวย

ตวอยางท 2. เปนการสราง Software Delay โดยสามารถเปลยนชวงเลา Delay โดยการใช Counter ทนบรอบของการวน Loop ทมขนาดมากขน แตการใช Software Delay ทม Delay Time มากๆ น จะมขอเสยคอ ขณะ CPU ท าการ Delay ตว CPU จะไมท าอยางอนเลยเปนระยะเวลานาน เพราะฉะนน จงควรใช Hardware Delay แทน เชนในระบบทตองการการตอบสนองทรวดเรวและแนนอน หรอในกรณทระบบ Microcomputer นนมการใชงานของ Interrupt แลว จะท าใหเวลาทไดจากการท า Software Delay นนไมถกตอง ถาการวน Loop ถก Interrupt

Pulse Output by Hardware Delay

การสราง Hardware Delay จะท าโดยใช Programmable Timer หรอ Timer ซงคา Register ภายในของ Timer จะถก Load ดวยคาเรมตน หรอคาเวลาทตองการ สงทแตกตางออกไปกคอ คาของตวนบน จะเพมขนเองโดยอตโนมต ดวยคาบเวลาทแนนอน (บางกรณ เราสามารถทจะก าหนด คาบเวลานได) และเมอคาของตวนบนมคาเพมขนจน Overflow Timer จะสงสญญาณมา Interrupt การท างานของ CPU หรออาจกลาวไดวา มนสงสญญาณมาบอก CPU วา ครบเวลาตามตองการแลว

การเขยนโปรแกรม เพอใหไดการท างานเชนเดยวกน สามารถท าไดโดยหลกการของ Hardware delay โดยใช Timer ซงมอยใน MCS-51 แลว จะไดเปนโปรแกรมดงน

#include<reg51.h> #include <absacc.h> void timer0_ISR (void) interrupt 1 { TR0 = 0; /* Stop Timer 0 */ P1^7 = !P1^7; TH0 = 0x8A; /* Load TH0 */ TL0 = 0xCF; /* Load TL0 */ TF0 = 0;

Page 10: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

10

TR0 = 1; /* Start Timer 0 */ } void main (void) { TMOD = (TMOD & ~0x0F) | 0x01; /* Set T/C0 Mode 1*/ EA = 1; /* Global Interrupt Enable */ ET0 = 1; /* Enable Timer 0 Interrupts */ TH0 = 0x8A; /* Load TH0 */ TL0 = 0xCF; /* Load TL0 */ TR0 = 1; /* Start Timer 0 */ P1^7 = 1; while (1) { ……………/*Other operation*/ …………… } } การท างานของ main โปรแกรมสามารถอธบายไดดงน

TMOD = (TMOD & ~0x0F) | 0x01; เปนการก าหนดการท างานของ Timer/Counter 1 นบหรอหยดนบไดดวยการควบคมจากโปรแกรม (Gate bit=0) และใหท างานในแบบของ Timer (C/~T=0) และการใชงานของ Timer Register ในแบบ 16 Bit (Mode Bit= 0 1)

EA = 1; /* Global Interrupt Enable */ ET0 = 1; /* Enable Timer 0 Interrupts */ เปดการใชงานของ Interrupt เฉพาะทเกดจาก TF1 (EA=1 และ ET1=1)

TH0 = 0x8A; /* Load TH0 */ TL0 = 0xCF; /* Load TL0 */ จากทเปนการใชงานของ Timer register ในแบบ 16 Bit และการ Interrupt จะเกดเมอ Timer register นบจนครบ 65535 ดงนนแลวถาตองการนบ 30000 M.Cycles จะตองตงคาเรมตนของ Timer register = 65535-30000 = 35535 (08ACFH)

TR0 = 1; /* Start Timer 0*/ P1^7 = 1; ก าหนดให Timer เรมการนบและ Turn ON Output

Page 11: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

11

ในสวนของ timer0_ISR (void) interrupt 1 เปน Interrupt Service Routine เมอเกด Interrupt จาก Timer 1 (Timer 1 นบครบเวลาทตงไว) TR0 = 0; /* Stop Timer 0 */ หยดการท างานของ TImer P1^7 = !P1^7; ท าการปลยนคาท P1.7 เปน ตรงกนขาม

TH0 = 0x8A; /* Load TH0 */ TL0 = 0xCF; /* Load TL0 */ ตงคาเรมตนของ Timer register TF0 = 0; TR0 = 1; /* Start Timer 0 */ เรองของการใชงาน interrupt ทงหมดจะกลาวถงในภายหลง

ตวอยาง 3 สรางสญญาณ square wave 10kHz โดยให High 50us และ Low 50 us, Clock 12 MHz

ใช Timer mode 2 โดยให overflow ทก 50 us

#include<reg51.h> #include <absacc.h> void main (void) { TMOD = (TMOD & ~0x0F) | 0x02; /* Set T/C0 Mode 2*/ TH0 = 0xCD; /* Load TH0 by FFH-50D=CDH */ TR0 = 1; /* Start Timer 0 */ while (1) { If (TF0==1)

{ P1^7 = !P1^7; TF0=0; } } }

Page 12: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

12

ตวอยาง 4 สรางสญญาณ square wave 1kHz โดยให High 500us และ Low 500 us, Clock 12 MHz

ชวงเวลามากกวา 256 (FFH) ตองใช Timer mode 1 (16 bits) โดยให overflow ทก 500 us

#include<reg51.h> #include <absacc.h> void main (void) { TMOD = (TMOD & 0xF0) | 0x01; /* Set T/C0 Mode 1*/ TH0 = 0xFE; /* Load TH0 and TL0 by FFFFH-500D=FE0BH */ TL0 = 0x0B; TR0 = 1; /* Start Timer 0 */ while (1) { If (TF0==1)

{ P1^7 = !P1^7; TF0=0; TR0 = 0; /* Stop Timer 0 */

TH0 = 0xFE; /* Load TH0 and TL0 by FFFFH-500D=FE0BH */ TL0 = 0x0B; TR0 = 1; /* Start Timer 0 */

} } }

ตวอยาง 5 Function delay 50 ms, Clock 12 MHz

ใช Timer mode 1 โดยให overflow ทก 50 ms

void delay (void) { TMOD = (TMOD & ~0x0F) | 0x01; /* Set T/C0 Mode 1*/ TH0 = 0x3C; /* Load TH0 and TL0 by FFFFH-50000D=3CAFH */ TL0 = 0xAF;

Page 13: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

13

TR0 = 1; /* Start Timer 0 */ If (TF0==1)

{ P1^7 = !P1^7; TF0=0; TR0 = 0; /* Stop Timer 0 */

TH0 = 0x3C; /* Load TH0 and TL0 by FFFFH-50000D=3CAFH */ TL0 = 0xAF; TR0 = 1; /* Start Timer 0 */

} }

Input / Output Techniques

Input หมายถงการรบคาขอมล จากอปกรณภายนอกเขามา (Input devices: Keyboard, Disk, Sensor, etc.)

Output หมายถงการสงคาขอมลจาก Microprocessor หรอ Memory ออกไปยงอปกรณภายนอก (Output devices: Printer, Monitor, CD Writer, etc.)

การใชงานของ Micro computer ในการรบ Input หรอสง Output นนจะตองมสวนประกอบทส าคญตางๆ คอ

MicrocontrollerSystem

INPUT

PORT

OUTPUTPORT

OutputDevice

OutputDevice

OutputDevice

IntputDevice

IntputDevice

IntputDevice

Input Device ท าหนาทเปลยน ปรมาณ หรอคณสมบตทางกายภาพ (แสง, อณหภม, เสยง, แรง, ระยะทาง . . .) ใหเปนสญญาณ Digital Input Port เปนทางเขาของสญญาณ จาก Input Device เพอทจะสามารถน ามาใชไดใน Microcomputer

Page 14: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

14

Output Port เปนทางออกของขอมลจากระบบ Microcomputer คณสมบตทส าคญของ Output Port คอ มนจะสามารถคงคา ของขอมล ทสงมาจาก CPU ได นนกคอ ตว Output Port จะท าตวเหมอนกบ Register Output Device ท าหนาทแปลงสญญาณ ทเปน Digital น ใหเปนปรมาณทางกายภาพ (แสง, เสยง, ความรอน, การเคลอนท . . .) เพอน าไปใชงานตอไป

Sensing Input

ปญหาของการตรวจจบสญญาณ Input นน จะตรงขามกบการสรางสญญาณ คอในการสรางสญญาณออกมานน ขนอยกบการท างานของ Program แตส าหรบสญญาณ Input ทเขามาจะเกดขนโดยไมมความสมพนธ กบการท างานของโปรแกรมเลย (Asynchronously) การตรวจจบการเกดขนของสญญาณน สามารถท าไดสองวธคอ Polling และ Interrupt

Input /Output Scheduling ในกรณทระบบ Microcomputer ม Input /Output Devices หลายอนทตองไดรบการบรการจาก CPU หรอในกรณทตองมการท างานของโปรแกรมหลายอยางพรอมกน จะเกดปญหาทวา การท างานหลายอยางพรอมกนนนจะท าไดอยางไร หรอตองเขยนเปนโปรแกรมแบบใด

ลกษณะของโปรแกรมเหลานน ตองเปนโปรแกรมทไมยาวมากนก เนองจากจะท าใหระบบมการตอบสนองตองานอนๆ ชา และเปนโปรแกรมทไมตด Loop (เงอนไขของการวน Loop ทขนกบการท างานจากภายนอก หรอเกดการวน Loop ไมสนสด) เพราะจะสงผลใหโปรแกรมอนๆ หยดท างานเปนเวลาทไมแนนอน โปรแกรมเหลานน จะไมท างานพรอมกนอยางแทจรงแตจะตองมการจดล าดบการท างานของ โปรแกรม Input /Output วธการทใชกนหลกๆ นนจะแบงเปน Polling, Interrupt และ DMA

Page 15: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

15

Polling

เปนวธการทงายทสดในการจดล าดบการท างาน ของอปกรณ หรอโปรแกรมหลายๆ อยาง หลกการกคอ CPU (Main program) จะไปตรวจสอบสถานะของอปกรณทตออยในระบบ หรอสถานะของโปรแกรมการท างาน ทละตว/โปรแกรมวามนตองการ การบรการ (Service) หรอไม ถาตองการ CPU กจะกระโดดไปท างานตามโปรแกรมส าหรบอปกรณนนๆ แตถาไมตองการแลว CPU (Main program) กจะไปตรวจสอบอปกรณ/โปรแกรม ทเหลอตอไป

ในหลกการของการท า Polling น อปกรณ/โปรแกรมการท างานทกอน จะตองม Status flag ทจะบอกวา มนตองการ รบการบรการ (ท างาน) หรอไม และเมออปกรณ/โปรแกรมนนๆ ไดรบการบรการแลว จะตอง Clear status flag ซงกคอ การเขยนโปรแกรมให CPU ท าการอานคาสถานะของ Input Port เขามาตลอดเวลา จนกวาจะพบเงอนไขทตองการโดยการวน Loop ตวอยางเชน ถาเราตอ Switch เขาท Input Port P1 ในต าแหนง Bit ท 0 ถาใหสถานะของมนเปน ‘0’ เมอไมมการกด Switch (หรอไมมสญญาณเขามา) และเปน ‘1’ เมอมสญญาณ ดงนนจะไดโปรแกรมส าหรบการตรวจจบสญญาณคอ while(1) { if(sw0 == 1) {

Page 16: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

16

……….. else

} }//end of while(1) ตวอยางของ Main program ซงท าหนาทจดการ Polling เปนดงน

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

Ready ?

Load Printer Buffer

Transmit Data

NO

YES

ถาก าหนดใหให Bit ตางๆ ใน Port/STATUS Register ทเปนมคาเปน ‘1’ เมอ Device/Program ล าดบนนๆ ตองการ

Service จาก CPU จะเขยนโปรแกรมไดคอ

while(1) { if(P1^0 == 1) /* Polling for device 0*/ { service_0(); /* if bit 0 = ‘1’ call service_0*/

} if(P1^1 == 1) /* Polling for device 1*/ { service_1(); /* if bit 0 = ‘1’ call service_1*/ }

Page 17: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

17

if(P1^2 == 1) /* Polling for device 2*/ { service_2(); /* if bit 0 = ‘1’ call service_2*/ } }//end of while(1)

ขอดของการใชวธ Polling คองาย และไมตองการ Hardware (วงจร) เพมเตม ท าให Input /Output ทงหมดสมพนธกบการท างานของโปรแกรม ส าหรบขอเสยคอ CPU จะใชเวลาเกอบทงหมด ในการตรวจสอบวา Device ใด ตองการการ Service เปนผลให CPU ตอบสนองความตองการชา และไมมเวลาส าหรบการท างานอน

Interrupts

หลกการของการ Interrupt กคอ ใช สายสญญาณ Interrupt (Hardware) เชอมตอระหวาง Devices ตางๆ เขากบ ขาสญญาณพเศษของ Microprocessor ในบางครงสามารถตอสญญาณจาก Devices ตางๆ เขากบ สายสญญาณ Interrupt เสนเดยวกนได เมอ Device หนงในนน ตองการการ Service กจะสงสญญาณลงไปในสายน ซงกเหมอนกบเปนสญญาณ ของ Service Request ทบอกไปยง CPU นนเอง

การท างานทเกดขน เมอ Microprocessor ไดรบสญญาณ Interrupt กคอ CPU จะคอยใหค าสงทก าลงท าอย เสรจสนลง แลว CPU จะกระโดด (Branch) ไปท างานยงโปรแกรมในสวนของ Interrupt Service Routine การทจะกระโดดไปท างานยง Subroutine นน CPU จะตองเกบคาของ Program Counter (PC) ลงใน Stack รวมไปถงคาสถานะของ Flag และ Register อนๆ ทอาจมการเปลยนแปลงไป เนองจากการท างานของโปรแกรมใน Interrupt Service Routine (ISR) กจะตองถกเกบไวดวยเชนกน

เมอเกบคาของ Register ตางๆ ไวแลว กท างานตาม ISR ทตองการ ซงใน ISR น เราอาจท าการ polling เพอตรวจสอบวา เปน Device ตวใดทตองการ การ Service กได หลงจากท ท างานเสรจสนตาม ISR แลว คาของ Register เดมจะถกน ากลบมา และโดยใชค าสง Interrupt Return เพอกลบสการท างานตามปกตตอไป

DMA (Direct Memory Access)

เปนวธการทมใชในระบบ Microcomputer ทตองการเคลอนยายขอมลจ านวนมากกบ Device ซงถาท าการเคลอนยายขอมลโดยผานการท างานของ CPU แลวจะท าไดชา

วธการของ DMA น ตองมวงจรควบคมการท างานภายนอก (DMA Controller) ท าหนาทในการเคลอนยายขอมลกบหนวยความจ าในระบบ ในการนวงจรสวน DMA Controller จะตองสรางสญญาณเพอบอก CPU ใหตดการท างานของ CPU กบหนวย ความจ า

Page 18: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

18

เพอให DMA Controller ควบคมการท างานไดเอง หรออาจกลาวไดวา การท า DMA นนเปน Interrupt แบบหนง ซงใน MCS-51 ไมสามารถกระท าไดโดยตรง MCS-51 Interrupts จากหลกการท างานของ Interrupt ทไดกลาวในบททแลว จะเหนไดวาวธการของ Interrupt นน จะใหประสทธภาพในการท างานทมากกวาการ Polling เนองจากไมจ าเปนตองให Program คอยตรวจสอบสญญาณทเขามา การกระโดดไปท างานยง Interrupt Service Routine (ISR) จะเกดขนโดยอตโนมต ดวยวงจรภายใน CPU เอง

Interrupt Service Routine

การเขยนโปรแกรมเพอใชงานเปน Interrupt service routine นนเหมอนกบการเขยน Sub routine แตมขอแตกตางทส าคญ คอ Sub routine จะถกเรยกใชงานโดยการเรยกใชฟงกชนในโปรแกรม แต ISR จะถกเรยกใชเมอมสญญาณ interrupt ซงเกดขนเมอโปรแกรมท างานอะไรอยกได

ดงนนแลว การเขยนโปรแกรมทเปน ISR จะตองมความรอบคอบถงผลกระทบในการเปลยนแปลงของ Data memory, Register, Acc. และ Flag ตางๆ ซงควรเกบคาเดมเอาไวกอนทจะเรมการท างานของ ISR แลว คนคาเดม เมอจบการท างานของ ISR แลว

ใน MCS-51ไดออกแบบใหมการ Interrupt ไดจาก 5 แหลงคอ 2 External interrupts, 2 Timer interrupts และ Interrupt จาก Serial port และส าหรบ 80C52, 83C154 และ 83C154D จะม Interrupt ทงหมด 6 แหลงดวยกน โดยทเพมขนมา จะเปน Interrupt จาก Timer 2

Page 19: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

19

Interrupt Enables สญญาณ Interrupt ทมาจากแหลงตางๆ สามารถตอบสนอง หรอไมตอบสนองกไดจากการ Set หรอ Clear Bit ทอยใน Register IE และ ใน IE ยงม Bit ทเปนการปดรบ Interrupt ทงหมดอกดวย

เชน เมอตองการมการตอบสนอง Interrupt จาก Timer1 ตองมการ set EA และ ET1 โดย

ET1=1; /*Enable Timer1 interrupt*/

EA =1; /*Set global interrupt bit*/

หรอ

IE=0x88;

Priorities Level Structure

นอกจากการเปดรบ Interrupt แลวสญญาณ Interrupt ทมาจากแหลงตางๆ ยงสามารถทตงระดบความส าคญ (Priority) ไดในสองระดบ โดยการ Set หรอ Clear Bit ใน Register IP (Interrupt Priority) ซงอยใน SFR

เมอ CPU ไดรบ Interrupt ทถกก าหนดใหเปน Low-priority level CPUจะไปท างานตาม ISR นนๆ แตในระหวางน CPU สามารถถก Interrupt ไดอกครงจาก Interrupt ทก าหนด

Page 20: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

20

เปน High-priority level แตจะไมรบ Interrupt ทเปน Low-priority อก

ในระหวางท CPU ก าลงท างานตาม ISR ของ Interrupt ทเปน priority สงสดมนจะไมรบการ Interrupt ใดๆ

ถาเกดสญญาณ Interrupt ขนพรอมกน การ Interrupt ของสญญาณ ทก าหนดใหมความส าคญมากกวาจะไดรบการตอบสนอง สวนถาเปนสญญาณ Interrupt ทก าหนดใหมความส าคญเทากนนน ล าดบการท างานจะขนกบ ขบวนการ Polling ภายในของ MCS-51

การท างานของ CPU เมอเกด Interrupt สถานะของสญญาณ Interrupt ซงอยใน Flag ตางๆ จะถกเกบคาในจงหวะ S5P2 ของทกๆ Machine cycle และถก Polling โดย CPU ใน Machine cycle ตอมา ถาสถานนะของ Flag bit ใดๆ มคาเปน 1 ใน S5P2 ของ Machine cycle กอนหนา ขบวนการ Polling จะตรวจสอบมนพบ และขบวนการ Interrupt กจะสรางค าสง LCALL เพอเรยกใช ISR ส าหรบการ Interrupt นนๆ ISR จะไมถกเรยกใชในกรณตางๆ ตอไปน

1. CPU ก าลงท างานใน ISR ของ Interrupt ทมความส าคญเทากน หรอมากกวา

2. ขบวนการ Polling ของ Interrupt เกดขน ใน Machine cycle ทไมไดเปน Machine cycle สดทายของค าสง ซงก าลงท างานอย

3. CPU ก าลงท าการจบ ISR และกลบสโปรแกรมหลก หรอค าสงทเปนการท างานกบ Register IE หรอ IP

Page 21: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

21

ส าหรบเงอนไขในขอท 2 กเพอใหการท างานของค าสงนนๆ เสรจสมบรณ กอนทจะกระโดดไปท างานยง ISR และส าหรบเงอนไขในขอท 3 เพอเปนการใหแนใจวา CPU จะกลบสโปรแกรมหลกหลงจากจบ ISR หรอค าสงทท างานกบ Register IE หรอ IP กอนทจะเรยกใช ISR

การตอบสนองตอสญญาณ Interrupt ของ CPU นน ในบางกรณ จะท าการ Clear Bit ทท าใหเกด Interrupt ดวย (Bit ของ External interrupt IE0 หรอ IE1 เฉพาะเมอมนถกก าหนดใหท างานแบบ Transition-activated เทานน) และจะไม Clear Bit ของ Serial port หรอ Timer2 ซงสวนน จะตองจดการเองใน Software

การตอบสนองการ interrupt จะท าการเกบคาของ PC ลงใน Stack แลวท าการ Load คาของ PC ใหม คานคอ Interrupt vector ซงจะเปน address ของ ISR ตามแหลงของ Interrupt ทเกด จากตารางจะเหนไดวา เนอทของ ISR แตละตวจะมขนาดเพยง 8 bytes

เมอท างานตาม ISR ไดเสรจสนแลว และจะน าคาของ PC คนมาจาก Stack ซงจะท าให CPU กลบไปท างานยงค าสงทอยตอจาก ค าสงสดทายกอนทเกดการ Interrupt ขน

ในโปรแกรมภาษา C ISR จะเหมอนฟงกชนทวไป แตจะใชค าวา interrupt และหมายเลขของ interrupt ตอทายฟงกชนนน

Source Interrupt Number IE0 0 TF0 1 IE1 2 TF1 3 RI + TI 4 TF2 + EXF2 5

Source Vector address RST 0000H IE0 0003H TF0 000BH IE1 0013H TF1 001BH RI + TI 0023H TF2 + EXF2 002BH

Page 22: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

22

External interrupts ( ~INT0 และ ~INT1)

สามารถจะก าหนดไดวาจะเปนการท างานทขอบขาลงของสญญาณ (Transition-activated) หรอท างานดวยระดบของสญญาณ (Level-activated) โดยก าหนดจาก Bit IT0, IT1 ใน Register TCON

เมอมสญญาณของ External interrupt เขามา กจะท าให Bit IE0 และ IE1 ถก Set สญญาณ Interrupt ทเขามาจะตองเปน ‘0’ อยางนอย 12 Clock เนองจากสญญาณน จะถกเกบคาทกๆ Machine cycle และจากท มนจะไม Clear interrupt request flag (IEx ใน TCON) อปกรณทสรางสญญาณ Interrupt จะตองหยดการ Interrupt (ท าใหเปน ‘1’) กอนทการท างานของ ISR จะสนสด ไมเชนนน แลวการ Interrupt จะเกดขนซ าอกรอบ

ในการใชงานแบบ Transition-activated สญญาณ Interrupt ทเขามาจะตองเปน ‘1’ อยางนอย 12 Clock แลวมการเปลยนเปน ‘0’ อกอยางนอย 12 Clock Interrupt request flag (IEx ใน TCON) จงจะถก Set และเมอมการเรยกใช ISR นน IEx จะถก Clear โดยอตโนมต การ Interrupt ซ าจะไมเกดขน

เมอ CPU ตอบรบการ Interrupt นแลว (กระโดดไปท างานยง ISR) Bit IE0 และ IE1 จะถก Clear โดยอตโนมต ถาเปนการเลอกรบสญญาณ Interrupt ทขอบขาลง แตถาเลอกการท างานของ Interrupt ดวยระดบของสญญาณแลว วงจรภายนอกทสรางสญญาณนจะตองหยดการ Interrupt เอง

กอนการใชงาน external interrupts ตองมการ set bit EA, EX0 หรอ EX1 ใน register IE ใหเปน ‘1’ กอน เพอเลอกใช External Interrupt 0 หรอ External Interrupt 1.

Register IE EA --- ET2 ES ET1 EX1 ET0 EX0

01234567

สามารถเขยนในภาษา C ไดดงน EA = 1; EX0 = 1; EX1 = 1;

Page 23: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

23

นอกจากนน ตองมการเลอกรปแบบของสญญาณ interrupt โดยการก าหนดคา บต IT0 และ IT1 ใน Register TCON

Register TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

01234567

โดยท

IT0/IT1 = 1 External interrupt caused by a falling edge signal on P3.2/P3.3

IT0/IT1 = 0 External interrupt caused by a low level signal on P3.2/P3.3

ตวอยางเชน

IT0 = 1; IT1 = 1;

เปนการเลอกใหเกดการ interrupt เมอสญญาณทขา P3.2/P3.3เปลยนจาก ‘1’ เปน ‘0’

ในสวนของ ISR สามารถเขยนไดดงน

ISR name() interrupt 0

{….}

Timer 0 และ Timer 1 Interrupts

เกดจาก Bit TF0 และ TF1 ใน Register TCON ซงเมอเกดการ Overflow ของ Timer/Counter เมอ Bit นถก Set แลวเมอมการกระโดดไปท างานยง ISR คาสถานะของ Bit กจะถก Clear ดวยวงจรภายใน

Register TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

01234567

Page 24: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

24

กอนการใชงาน Timer 0 และ Timer 1 interrupts ตองมการ set bit EA, ET0 หรอ ET1 ใหเปน ‘1’ กอน เพอเลอกใช Timer 0 Interrupt หรอ Timer 1 Interrupt.

Register IE EA --- ET2 ES ET1 EX1 ET0 EX0

01234567

สามารถเขยนในภาษา C ไดดงน EA = 1; ET0 = 1; ET1 = 1;

Serial port Interrupt

เกดขนเมอเมอ RI หรอ TI ถก set ซงสถานะของการ Interrupt นจะไมถก Clear เมอมการตอบสนองการ Interrupt โดยทวไป ISR ทท าหนาทในการตอบสนองตอ Interrupt ของ Serial port จะตองตรวจสอบเองวา มนเปนการ Interrupt มาจากสถานะของ Bit RI หรอ TI และตองท าหนาทในการ Clear Bit นนๆ เอง

กอนการใชงาน Serial port Interrupt ตองมการ set bit EA และ ES ใหเปน ‘1’ กอน.

Register IE EA --- ET2 ES ET1 EX1 ET0 EX0

01234567

สามารถเขยนในภาษา C ไดดงน EA = 1; ES = 1;

Page 25: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

25

ตวอยาง

โปรแกรมในตวอยางนจะรบสญญาณเขาทาง External Interrupt 0 ทเลอกใหเปน 'Falling Edge' mode และถอวาสญญาณทมความถมากเกนกวาทก าหนดไมใชสญญาณ input ทตองการ ตวอยางเชนการรบขอมลจาก switch และ เกดการ bounce ของหนาสมผส

ถาเกดสญญาณการเปลยนสถานะจาก high เปน low กอนถงเวลาทก าหนดจะสญญาณทมความถมากเกนไป ถาถงเวลาทก าหนดแลวยงไมเกดการเปลยนสถานะจะถอวาเปนสญญาณทใชได และ โปรแกรมจะสรางสญญาณทมลกษณะเดยวกนออกทาง P1.0

// Include standard headers #include <reg51.h> #include <math.h> unsigned int counter; //Variable used for our counter setup_interrupts () // Function to setup the External interrupt 0 in the required mode { EA = 1; EX0 = 1; IT0 = 1; } filter () interrupt 0 //The function the be executed when external interrupt occurs { counter = 0; //Reset the counter to 0 } main() { time_constant = 40000; //Define the response time of our filter setup_interrupts (); //setup the External interrupt while(1) { if (counter < time_constant) // Count until the pre-defined time_constant {

Page 26: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

26

counter++; } if (counter == time_constant) // if the counter was not interrupted by any noise, { P1^0 = P3^2; // output the valid signal on P1^0 } } }

Multiple Devices Connected to a Single Interrupt Line

ในกรณทระบบ ม Devices ทตองการ Interrupt เปนจ านวนมาก การตอขาสญญาณ Interrupt เขากบ CPU สามารถท าไดดงรป

MPUINT 1

I/O Interface 1

I/O Interface 2

I/O Interface 3

P1.0 P1.1 P1.2

เมอเกดการ Interrupt ขน CPU จะกระโดดไปท างานยง ISR ซงกอนทจะท างานตอไปได จะตองตรวจกอนวาเปน Device ตวใดทสรางสญญาณ Interrupt เพอทจะเลอกการท างาน (ISR) ไดเหมาะสม การทจะทราบวาเปน Device ตวใด สามารถท าได 2 วธ คอ Software หรอ Hardware

ส าหรบวธการทาง Hardware นน กคอการให Device นนๆ สงคาของ Address มาพรอมๆ กบการ Interrupt โดยตองมการตอวงจรเพมเตม วธการของ Software นน จะใชขบวนการ Polling ในการตรวจสอบ Device ตางๆ วามนเปนตวทสรางสญญาณหรอไม เรยกขบวนการนวา Polling Interrupt

ตวอยาง ISR ซงท าหนาทในการ Polling Device status ทเปน ‘0’ แลวเลอก ISR ทเหมาะสมตอไป (จากรป)

#include <intrins.h> ……

ISR_1(void) // Interrupt service routine for interface 1 {…..} ISR_2(void) // Interrupt service routine for interface 2 {…..} ISR_3(void) // Interrupt service routine for interface 3

Page 27: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

27

{…..} poll_int () interrupt 2 //The function the be executed when external interrupt 1 occurs { _push_(PSW); /*Save old status …*/ if (P1^0==0) { ISR_1()} if (P1^1==0) { ISR_2()} if (P1^2==0) { ISR_3()} _pop_(PSW); }

Simultaneous Interrupts

ในระหวางการท างานของ ISR นน สามารถทจะใหเกด Interrupt ซอนกนขนได ถาก าหนดให Interrupt ทเกดขนนน มความส าคญสงกวา โดยอาศยการท างานของ Stack เชนเดยวกบการท า Nested-Call จะสามารถแสดงไดดงตวอยางตอไปน

ตวอยาง Intrusion warning system ออกแบบระบบกนผบกรกซงจะสงเสยงความถ 4000 Hz เตอนเปนเวลา 1 วนาท (ใชล าโพงตอกบ P1.7) เมอมสญญาณจาก sensor ทประตท าให INT0 เปน High-to-low transition

Page 28: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

28

ในตวอยางนจ าเปนตองใช 3 interrupts ไดแก external 0 (door sensor), Timer 0 (400 Hz tone), และ Timer 1 (1 second timeout) #include<reg51.h> #include <intrins.h> #include <math.h> unsigned int count void ex0_isr (void) interrupt 0 { TF0=1; // force timer 0 interrupt TF1=1; // force timer 1 interrupt ET0=1; // begin tone for 1 second ET1=1; // enable timer interrupts count=20; } void timer0_ISR (count) interrupt 1 { TR0=0; //Stop timer0

count--; if (count<=0)

{ ET0=0; // Disable tone ET1=0; // Disable itself }

TH0=0x3c; //65535-50000=15535 (3CAF) TL0=0xAF; TR0=1;

} void timer1_ISR (void) interrupt 3 { TR1=1; //65535-1250=64285 (FB1D) TH1=0xFB; TL1=0x1D; P1^7=!P1^7; //Play sound TR1=1; } void main (void) { TMOD=0x11; //16-bit timer mode T0 = 1; // Configure interrupt 0 for falling edge EX0 = 1; // Enable EX0 Interrupt IT1 = 1; // Configure interrupt 1 for falling edge EA = 1; // Enable Global Interrupt Flag }

Page 29: Lecture 3 - Naresuan University 03 Peripherals.pdf · Lecture 3 1 Introduction to MCS-51 Peripherals รูปที่ 1 แสดงแผนผังของ MCS-51 peripherals

Lecture 3

29

ตวอยาง ระบบและโปรแกรมเพอควบคมมอเตอรใหหยดท างานเมอมตวมอเตอรความรอนสงเกนไปหรอหมนเรวเกนกวา 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 // Include standard headers #include <REG51.h> #include <math.h>

#define limit 12 #define stop_signal P1^0

unsigned char sub_counter;

setup_peripherals(){ //setup external interrupt EA = 1; EX0 = 1; IT0 = 1;

TMOD = 0x52; // timer 0 mode 2, counter 1 mode 1

//setup timer 0 TR0 = 1; TH0 = 5; //makes the timer to overflow every 125 uS (divide by 250). ET0 = 1;

//setup timer 1 TR1 = 1 ; }

timer_0 () interrupt 1{ sub_counter++ ; if (sub_counter == 10){ // divide the overflow frequency further more by 10 sub_counter = 0; // this part is executed every 1.25 mS if ((TL1 + (TH1 * 256)) > limit){ // 12/0.00125 = 9600 (~ 10000)s //Stop the motor stop_signal = 1; TL1 = 0; TH1 = 0; } } }

over_heat_alarm () interrupt 0{ stop_signal = 1; }

void main(){ stop_signal = 0; // the motor runs normally setup_peripherals(); while(1){ // Do nothing } }