Mechatronika és mikroszámítógépek 2018/2019 I. félév Órajelek, időzítők, megszakítások (4. lab)
Órajel Internal Oscillator Control Register (OSCICN 0xB2) Bit Symbol Leírás 7 MSCLKE Missing Clock enable bit 0/1: Detektor tiltva, engedélyezve 6-5 fenntartva Read = 00b, Write = don t care External Oscillator C ontrol Register (OSCXCN 0xB1) Bit Symbol Leírás 7 XTLVLD Crystal Oscillator Valid Flag 0/1: Használton kívül, vagy nem stabil/fut és stabil 4 IFRDY 3 CLKSL Internal Oscillator Frequency Ready Flag 0/1: Belső oszcillátor nem fut/fut az IFCN1- IFCN0 flagek szerint beállított frekvencián System Clock Source Select Bit 0/1: Belső/Külső oszcillátor használata rendszer órajelként 6-4 XOSCMD2-0 External Oscillator Mode Bits 00x: Kikapcsolva 010: Rendszer órajel külső CMOS-ból 011: Rendszer órajel külső CMOS-ból /2 10x: RC/C /2 110: Kristály oszcillátor (22.1184 MHz) 111: Kristály oszcillátor/2 2 IOSCEN 1-0 IFCN1-IFCN0 Internal Oscillator Enable Bit 0/1: Belső oszcillátor tiltva/engedélyezve Internal Oscillator Frequency Control Bit Tipikus órajelek: 00: 2MHz 01: 4MHz 10: 8MHz 11: 16MHz 3 fenntartva 2-0 XFCN2-0 Read = undefined, Write = don t care External Oscillator Frequency Control Bit Ha nagyobb 6.7 Mhz->111 2018.09.26. Órajelek, időzítők, megszakítások 2
Külső kristály használata Oscillator_Init: mov OSCXCN, #0x67 ; Wait min. 1ms for init mov R0, #03 Osc_Wait1: clr A Osc_Wait0: djnz ACC, Osc_Wait0 djnz R0, Osc_Wait1 ; Várakozás XTLVLD-re Osc_Wait2: mov A, OSCXCN jnb ACC.7, Osc_Wait2 mov OSCICN, #0x0B ret OSCXCN XTLVLD 0 XOSCMD2-0 110 kristály oszc. használata ---- 0 XFCN2-0 111 >6.7 MHz OSCICN MSCLKE 0 nincs detector 0 IFRDY 0 nem használ IFCN Flag-et CLKSL 1 Külső oszcillátor használata rendszerórajelként IOSCEN 0 kristály oszcillátor IFCN1-IFCN0 11 tip. 16MHz 2018.09.26. Órajelek, időzítők, megszakítások 3
Órajel Órajel regiszterek, összefoglalás: Pl: OSCICN: belső órajel frekvenciájának beállítása OSCXCN: külső kristály oszcillátor beállítása 4 MHz belső: mov OSCICN,#0x15 vagy #0x00010101 22,1184 MHz külső: mov OSCXCN,#0x67 de várni kell, ciklus!!!!!!!! #0b01100111 11,0592 MHz külső: mov OSCXCN,#0x77 de várni kell, ciklus!!!!!!!! #0b01110111 2018.09.26. Órajelek, időzítők, megszakítások 4
Timer 0-1 - counter 16 bites Timer THx: felső 8 bit (x: 0 vagy 1) TLx: alsó 8 bit (x: 0 vagy 1) Timer: Timer x overflow flag-et állítja TCON 5./7. bitje (TF0/TF1) JK tárolós megvalósítás, pl. 2018.09.26. Órajelek, időzítők, megszakítások 5
Timer 0-1 - counter Beállítás: Timer Mode Register (TMOD 0x89) Bit Symbol 7 GATE1 6 C/T1 5-4 T1M1- T1M0 3 GATE0 2 C/T0 1-0 T0M1- T0M0 Leírás Timer 1 Gate Control 0: Timer 1 engedélyezve, ha TR1 (TCON.6)=1, INT1 állapotától függetlenül 1: Timer 1 csak akkor engedélyezett, ha TR1=1 ÉS INT1 = 1 Counter/Timer 1 Select 0: Timer funkció: Timer 1 léptetése órajel (és T1M, CKCON.4 ) függvényében 1: Számláló funkció: a külső megszakítás 1-0 váltása esetén lép Timer 1 Mode Select Timer 0 Gate Control 0: Timer 0 engedélyezve, ha TR0 (TCON.4)=1, INT0 állapotától függetlenül 1: Timer 0 csak akkor engedélyezett, ha TR0=1 ÉS INT0 = 1 Counter/Timer 0 Select 0: Timer funkció :Timer 0 léptetése órajel (és T0M, CKCON.3 ) függvényében 1: Számláló funkció: a külső megszakítás 1-0 váltása esetén lép Timer 0 Mode Select THx és TLx Registers, 16 bit Timer 0-1 Mode Select M1 M0 Mode Leírás 0 0 0 13 bit Counter/Timer (TL-alsó 5bit,TH-8bit) 0 1 1 16 bit Counter/Timer 1 0 2 1 1 3 8 bit Counter/Timer with Auto reload (TL számlálása, TH-ból újratöltés) Timer 1: Inactive Timer 0: Two 8 bit Counter/Timers Clock Control Register (CKCON 0x8E) BIT Symbol Leírás 4 T1M 3 T0M 0: Rendszer órajel /12 használata 1: Rendszer órajel használata 2018.09.26. Órajelek, időzítők, megszakítások 6
Timer 0-1 Működés: Timer Control Register (TCON 0x88) bit addressable pdf 184. oldal Bit Symbol Leírás 7 TF1 6 TR1 5 TF0 4 TR0 3 IE1 2 IT1 1 IE0 0 IT0 Timer 1 Overflow Flag 0/1: Nincs/Van túlcsordulás Hardver által állított FLAG a Timer 1 túlcsordulása esetén. (szoftveresen is törölhető, és interrupt-tal is) Timer 1 Run Control 0/1: Timer 1 tiltva/engedélyezve Timer 0 Overflow Flag 0/1: Nincs/Van túlcsordulás Hardver által állított FLAG a Timer 0 túlcsordulása esetén. (szoftveresen is törölhető, és interrupt-tal is) Timer 0 Run Control 0/1: Timer 0 tiltva/engedélyezve External Interrupt 1 Hardver által állított FLAG a amikor a megfelelő típusú esemény bekövetkezik/fennáll az /INT1-en (szoftveresen is törölhető, és interrupt-tal is) Interrupt 1 Type Select 0/1: /INT1 szintvezérelt/élvezérelt External Interrupt 0 Hardver által állított FLAG a amikor a megfelelő típusú esemény bekövetkezik/fennáll az /INT0-en (szoftveresen is törölhető, és interrupt-tal is) Interrupt 0 Type Select 0/1: /INT0 szintvezérelt/élvezérelt 2018.09.26. Órajelek, időzítők, megszakítások 7
Timer beállítás, példa 1 másodperc (100 x 10 ms) beállítása, külső kristály oszcillátor, Timer 0 használata 22,1184 MHz TMOD, pdf: 183. oldal mov TMOD,#0b00000001 #0x01 TCON, pdf: 184. oldal, minden bitnek van neve, ismertek setb TR0 engedélyezi Timer 0 futását, amíg nem állítjuk be, nem fog futni a Timer CKCON, pdf 182. oldal, /12 beállítás: anl CKCON,#0xF7 3. bit 0!, többi 1, órajel a vezérléshez: 1843200 1sec alatt 2018.09.26. Órajelek, időzítők, megszakítások 8
Timer beállítás, példa THx, TLx: probléma: 16 bit: max. 65535 (#0xFFFF) ha 100 x 10 ms: 18432 t kell számolni 10 ms alatt, 65535-18432 =47103 = B7FF, ekkor fog túlcsordulni, 47103=#0xB7FF mov TH0,#0xB7 mov TL0,#0xFF A timer-t célszerű megszakításként használni! Ahhoz, hogy a timer0 megszakítás legyen, további beállítások szükségesek, lásd később. 2018.09.26. Órajelek, időzítők, megszakítások 9
Megszakítás, Interrupt A megszakítás egy olyan esemény, vagy feltétel teljesülése, amely felfüggeszti a program futását, a vezérlést átadja egy speciális szubrutinnak (ISR-Interrupt Service Routine) Az egy időben teljesülő megszakítások hierarchiáját az interrupt service priority dönti el. 2018.09.26. Órajelek, időzítők, megszakítások 10
Az Interrupt folyamata 1. A CPU befejezi az aktuális utasítást 2. A CPU elmenti a Program Counter-t (PC) a stack-be pusholással 3. A PC-be a megfelelő ISR vektor kerül 4. Az ISR végrehajtásra kerül 5. Az Interrupt a RETI utasításig tart 2018.09.26. Órajelek, időzítők, megszakítások 11
Megszakítások a C8051F020 eszközön, prioritás Interrupt Source Interrupt Vector Priority Order Enable Flag Reset 0000 Top Always Enabled External Interrupt 0 (/INT0) 0003 0 EX0 (IE.0) Timer 0 Overflow 000B 1 ET0 (IE.1) External Interrupt 1 (/INT1) 0013 2 EX1 (IE.2) Timer 1 Overflow 001B 3 ET1 (IE.3) UART0 0023 4 ES0 (IE.4) Timer 2 Overflow 002B 5 ET2 (IE.5) Serial Peripheral Interface 0033 6 ESPI0 (EIE1.0) SMBus Interface 003B 7 ESMB0 (EIE1.1) ADC0 Window Comparator 0043 8 EWADC0 (EIE1.2) Programmable Counter Array 004B 9 EPCA0 (EIE1.3) Comparator 0 Falling Edge 0053 10 ECP0F (EIE1.4) Comparator 0 Rising Edge 005B 11 ECP0R (EIE1.5) Comparator 1 Falling Edge 0063 12 ECP1F (EIE1.6) Comparator 1 Rising Edge 006B 13 ECP1R (EIE1.7) Timer 3 Overflow 0073 14 ET3 (EIE2.0) ADC0 End of Conversion 007B 15 EADC0 (EIE2.1) Timer 4 Overflow 0083 16 ET4 (EIE2.2) ADC1 End of Conversion 008B 17 EADC1 (EIE2.3) External Interrupt 6 0093 18 EX6 (EIE2.4) External Interrupt 7 009B 19 EX7 (EIE2.5) UART1 00A3 20 ES1 (EIE2.6) External Crystal OSC Ready 00AB 21 EXVLD (EIE2.7) 2018.09.26. Órajelek, időzítők, megszakítások 12
Megszakítások beállítása Timer Control Register (TCON 0x88) bit addressable Bit Symbol Leírás 7 TF1 6 TR1 5 TF0 4 TR0 3 IE1 2 IT1 1 IE0 0 IT0 Timer 1 Overflow Flag 0/1: Nincs/Van túlcsordulás Hardver által állított FLAG a Timer 1 túlcsordulása esetén. (szoftveresen is törölhető, és interrupt-tal is) Timer 1 Run Control 0/1: Timer 1 tiltva/engedélyezve Timer 0 Overflow Flag 0/1: Nincs/Van túlcsordulás Hardver által állított FLAG a Timer 0 túlcsordulása esetén. (szoftveresen is törölhető, és interrupt-tal is) Timer 0 Run Control 0/1: Timer 0 tiltva/engedélyezve External Interrupt 1 Hardver által állított FLAG a amikor a megfelelő típusú esemény bekövetkezik/fennáll az /INT1-en (szoftveresen is törölhető, és interrupt-tal is) Interrupt 1 Type Select 0/1: /INT1 szintvezérelt/élvezérelt External Interrupt 0 Hardver által állított FLAG a amikor a megfelelő típusú esemény bekövetkezik/fennáll az /INT0-en (szoftveresen is törölhető, és interrupt-tal is) Interrupt 0 Type Select 0/1: /INT0 szintvezérelt/élvezérelt 2018.09.26. Órajelek, időzítők, megszakítások 13
Megszakítások programozása.org direktíva: hová fordítsa az ez utáni utasításokat a kódszegmensbe IT vektorok: olyan memóriaterület, ahová a felhasználó nem fér hozzá acall interrupt, reti External Interrupt 0 (/INT0).org 0x3 ;ROM 3-as byte-tól Timer 0 Overflow (T0).org 0xB ;ROM 11-es byte-tól External Interrupt 1 (/INT1).org 0x13 ;ROM 13-as byte-tól Timer 1 Overflow (T1).org 0x1B ;ROM 27-es byte-tól 2018.09.26. Órajelek, időzítők, megszakítások 14
Megszakítások beállítása Interrupt Enable Register (IE 0xA8) bit addressable Bit Symbol Leírás 7 EA Enable All Interrupts 0/1: Minden interrupt tiltása (kivéve reset)/engedélyezése a megfelelő beállításoknak megfelelően 6 IEGF0 General Purpose Flag 0 Általános célú flag 5 ET2 4 ES0 3 ET1 2 EX1 1 ET0 0 EX0 Enable Timer 2 Interrupt 0/1: Timer 2 Interrupt tiltása/engedélyezése TF2 (T2CON.7) Enable UART0 Interrupt 0/1: UART0 Interrupt tiltása/engedélyezése Enable Timer 1 Interrupt 0/1: Timer 1 Interrupt tiltása/engedélyezése TF1 (TCON.7) Enable External Interrupt 1 0/1: External interrupt 1 tiltása/engedélyezése (/INT1) Enable Timer 0 Interrupt 0/1: Timer 0 Interrupt tiltása/engedélyezése TF0 (TCON.5). Enable External Interrupt 0 0/1: External interrupt 0 tiltása/engedélyezése (/INT0) 2018.09.26. Órajelek, időzítők, megszakítások 15
Megszakítások beállítása Timer0 A Timer0-nál ismertetett beállításokon túl: setb EA engedélyezi a megszakításokat, EA ismert setb ET0 engedélyezi, hogy Timer0 megszakítás legyen 2018.09.26. Órajelek, időzítők, megszakítások 16
Folyamatábra órai program A TF0 bitet a program automatikusan, az időzítő lejártakor állítja be 1-be! A TF==1 hatására fellép a timer0 megszakítás, aminek hatására lefut a jobb oldali algoritmus! A program elmenti azt, ahonnan a megszakítás kilép, és ahová a lefutás után visszalép! 2018.09.26. Órajelek, időzítők, megszakítások 17
A következő órára Házi feladat: Oldjunk meg egy tetszőleges programot az alábbi példák közül! 2014. november 3. PZH/A csak az első két alpont!, 2015. október 19. 1/B, 2015. október 22. 2/B, A HF programok megtalálhatók a Gyakorló példák/asm ZH példák között! Gyakorló példák a honlapon! Oldjuk meg valamennyi eddigi példát delay helyett Timer vezérléssel! (Eddigi HF-eket is!) Végtelen ciklus kell, ahonnan a program kilép, és ahová visszalép! Segítség: Tankönyv 5. és 11. fejezetek 2018.09.26. Órajelek, időzítők, megszakítások 18
Órajelek, időzítők, megszakítások Vége a negyedik labornak. 19