Author
dante-valencia
View
188
Download
9
Embed Size (px)
DESCRIPTION
8051 인터럽트. 8051 인터럽트. [email protected] http://blog.naver.com/dolicom. 인터럽트란 ?. CPU 가 정해진 프로그램의 처리 중에 하드웨어적인 요청에 의해 다른 프로그램을 실행하는 것 제어용 장치는 실시간 처리가 요구되는데 하드웨어적인 요청에 바로 응답하여 처리 동시에 여러 개의 프로그램을 처리할 수 없으므로 실행 중인 프로그램은 중지하고 , 인터럽트 처리 후 계속한다 . CPU 는 하드웨어가 언제 요청할 지 모름. 인터럽트를 이해하기 위한 비유. - PowerPoint PPT Presentation
8051 8051 [email protected]://blog.naver.com/dolicom
?CPU , . CPU
. . . . . . .
PC PC
Interrupts vs. Polling : CPU (polling) : CPU CPU .
: Maskable Interrupt 8051 (IE ) : CPU ) 8051
ISR Interrupt Service Routine 8051, Z80, 8080 . . (Interrupt Vector Table) 80x86, 68000
PC . MOV SP,#60H 8051 RAM 0x61 C startup.obj . (ISR) .
CPU . ISR . ISR .
A, B, PSW R0~R7 PC SP .
. PC ISR PC A, B, PSW, Rn .Rn,PSW,B,A RETI PC
I . CPU PC . 16 PC .ISR . ISR . PSW . .
IIISR . . POP (POP PSW) PUSH POP .PUSH RETI ISR PC . (RETI )
C void SerialEcho(void) interrupt 0{ char ch; if (RI == 1) { RI = 0; ch = SBUF; SBUF = ch; } else { TI = 0; } } ; FUNCTION SerialEcho (BEGIN)PUSH PSWMOV PSW,#00HPUSH AR7
JNB RI,?C0002CLR RI; Variable 'ch' assigned to Register 'R7' MOV R7,SBUFMOV SBUF,R7SJMP ?C0004?C0002:CLR TI?C0004:
POP AR7POP PSWRETI
CPURAMROM4 I/O Timer 0Serial PortOSCInterrupt Control Timer 1Timer/CounterBus ControlTxD RxDP0 P1 P2 P3
5 0 0x03/ 0 0x0B 1 0x13/ 1 0x1B 0x23
IE(Interrupt Enable) mask IP(Interrupt Priority) TCON SCON CPU
(IE) . (IP) . , (IE0, IE1, TF0, TF1) . RI,TI .
Interrput
I TCON SCON .1 TF1TR1TF0TR0IE1IT1IE0IT0Timer 1 Timer0Interrupt7 6 5 4 3 2 1 0IE0 : External Interrupt 0 edge flagTF0 : 0 overflow Timer 0 Overflow flagIE1 : External Interrupt 1 edge flagTF0 : 1 overflow Timer 1 Overflow flag
IISCON SM0SM1SM2RENTB8RB8TIRI7 6 5 4 3 2 1 0TI : Transmit Interrupt flagRI : Receive Interrupt flag
IE(Interrupt Enable) Mask Mask Bit : . 1 EA CPU . 0 CPU EA=1 (ES,ET1,EX1,ET0,EX0) .EA--ESET1EX1ET0EX07 6 5 4 3 2 1 0EA (Enable All Interrupt) : 1 = ES (Enable Serial Interrupt) : 1 = RI & TI ET1 (Enable Timer1 Interrupt) : 1 = 1 EX1 (Enable eXternal1 Interrupt) : 1 = 1 ET0 (Enable Timer0 Interrupt) : 1 = 0 EX0 (Enable eXternal0 Interrupt) : 1 = 0
IP(Interrupt Priority) ISR .---PSPT1PX1PT0PX07 6 5 4 3 2 1 0PS (Serial port priority control) : 1 = PT1 (Timer1 priority control) : 1 = 1 PX1 (external interrupt1 priority control) : 1 = 1 PT0 (Timer0 priority control) : 1 = 0 PX0 (external interrupt0 priority control) : 1 = 0
/INT0, /INT1 2 (0 ) TF1TR1TF0TR0IE1IT1IE0IT07 6 5 4 3 2 1 0IT0 (Interrupt 0 Type control) IT0=1 : /INT0(P3.2) () IT0=0 : /INT0(P3.2) L IT1 (Interrupt 1 Type control) IT1=1 : /INT1(P3.3) () IT1=0 : /INT1(P3.3) L
C (ISR) . . ISR C51 . ISR . .
ISR 0 0 0x03/ 0 1 0x0B 1 2 0x13/ 1 3 0x1B 4 0x23
void ISR_Name(void) interrupt 3 using 2 ISR_Name : interrupt 3 : ( ) 0 ~4 (4-2) using 2 : ( ) - 0~7
ISR 0 #include
void Ex_KeyUp(void) interrupt 0 using 1{ . . . // } 0 #include
void Tm0_Clock(void) interrupt 1{ . . . // }
ISR II
#include
void SerialEcho(void) interrupt 0 using 1{ char ch; if (RI == 1) { RI = 0; ch = SBUF; // SBUF = ch; // } else { TI = 0; } }