- Hårdvaruinstallation och krav
- Kretsschema för LED-gränssnitt med Nuvoton N76E003
- Timer Pins på Nuvoton N76E003
- Timerregister i Nuvoton N76E003
- Typer av tider i Nuvoton N76E003
- Programmering av Nuvoton N76E003 mikrokontroller för timer
- Blinkande kod och verifiera utdata för timerfunktionalitet
I våra tidigare handledning av Nuvoton Microcontroller använde vi ett grundläggande LED-blinkande program som en startguide och kopplade också GPIO som en ingång för att ansluta en taktil switch. Med den handledningen är vi fullt medvetna om hur vi konfigurerar Keil-projektet och ställer in miljön för programmering av N76E003 Nuvoton mikrokontroller. Det är dags att använda en intern kringutrustning i mikrokontrollenheten och gå lite längre genom att använda den inbyggda timern på N76E003.
I vår tidigare handledning använde vi endast en programvarufördröjning för att blinka en lysdiod, så i den här handledningen lär vi oss hur man använder timerfördröjningsfunktionen samt Timer ISR (Interrupt Service Routine) och blinkar två individuella lysdioder. Du kan också kolla in Arduino Timer Tutorial och PIC Timer tutorial för att kontrollera hur du använder timers med andra mikrokontroller. Utan att slösa mycket tid, låt oss utvärdera vilken typ av hårdvaruinstallation vi behöver.
Hårdvaruinstallation och krav
Eftersom kravet i detta projekt är att lära sig Timer ISR och timerfördröjningsfunktionen, kommer vi att använda två lysdioder, varav en kommer att blinka med timerfördröjning i stundslingan och en annan kommer att blinka inuti ISR-funktionen.
Eftersom en LED finns i N76E003-utvecklingskortet, kräver detta projekt en ytterligare LED och det strömbegränsande motståndet för att begränsa LED-strömmen. Komponenterna vi behöver -
- Vilken färg som helst på lysdioden
- 100R motstånd
För att inte tala om, förutom ovanstående komponenter, behöver vi N76E003 mikrokontrollerbaserat utvecklingskort samt Nu-Link-programmeraren. Dessutom krävs paneler och anslutningskablar för att ansluta alla komponenter.
Kretsschema för LED-gränssnitt med Nuvoton N76E003
Som vi kan se i schemat nedan är Test-LED-lampan tillgänglig inuti utvecklingskortet och den är ansluten på port 1.4. En extra LED är ansluten till port 1.5. Motståndet R3 används för att begränsa LED-strömmen. Längst till vänster visas programmeringsgränssnittsanslutningen.
Timer Pins på Nuvoton N76E003
Den stiftschema av N76E003 kan ses i nedan bild-
Som vi kan se har varje stift olika specifikationer och varje stift kan användas för flera ändamål. Stift 1.5, som används som en LED-utgångsstift, förlorar dock PWM och andra funktioner. Men det är inte ett problem eftersom det inte krävs någon annan funktionalitet för detta projekt.
Anledningen till att välja stift 1.5 som utgång och stift 1.6 som ingång beror på närmaste tillgänglighet av GND- och VDD-stift för enkel anslutning. I denna mikrokontroller av 20 stift kan 18 stift användas som en GPIO-stift och alla andra GPIO-stift kan användas för utdata och ingångsrelaterade ändamål, förutom stift 2.0 som dedikerat används för Återställ ingång och det kan inte användas som produktion. Alla GPIO-stift kan konfigureras i läget nedan.
Enligt databladet är PxM1.n och PxM2.n två register som används för att bestämma styrningen av I / O-porten. Eftersom vi använder LED och vi behöver stiftet som allmänna utgångsstift, kommer vi därför att använda kvasi dubbelriktat läge för stiften.
Timerregister i Nuvoton N76E003
Timern är en viktig sak för alla mikrokontroller. Microcontroller kommer med en inbyggd kringutrustning. Nuvoton N76E003 levereras också med 16-bitars kringutrustning. Varje timer används dock för olika ändamål, och innan du använder något timergränssnitt är det viktigt att veta om timern.
Typer av tider i Nuvoton N76E003
Timer 0 och 1:
Dessa två timers timer0 och timer1 är identiska med 8051 timers. Dessa två timers kan användas som en allmän timer eller som räknare. Dessa två timers fungerar i fyra lägen. I läge 0 fungerar dessa timers i 13-bitars timer / räknarläge. I läge 1 blir upplösningsbiten för dessa två timers 16-bitars. I läge 2 är timers konfigurerade som ett automatiskt omladdningsläge med en 8-bitars upplösning. I läge 3 stoppas timern 1 och timern 0 kan användas som räknare och timer samtidigt.
Av dessa fyra lägen används Mode 1 i de flesta fall. Dessa två timers kan använda Fsys (systemfrekvens) i fast eller förskalat läge (Fys / 12). Det kan också klockas från en extern klockkälla.
Timer 2:
Timer 2 är också en 16-bitars timer som huvudsakligen används för vågformer. Den använder också systemklockan och kan användas i olika applikationer genom att dela klockfrekvensen med 8 olika skalor. Den kan också användas i jämförelseläge eller för att generera PWM.
Samma som som Timer 0 och Timer 1, Timer 2 kan användas i autoladdningsläge.
Timer 3:
Timer 3 används också som en 16-bitars timer och den används som överföringshastighetsklocka för UART. Den har också en automatisk laddningsfunktion. Det är viktigt att endast använda denna timer för seriell kommunikation (UART) om applikationen kräver UART-kommunikation. Det är tillrådligt att inte använda denna timer för andra ändamål i ett sådant fall på grund av den motstridiga processen i timerinställningen.
Watchdog Timer:
Watchdog Timer kan användas som en standard 6-bitars timer men den används inte för detta ändamål. Användningen av Watchdog-timer som timer för allmänt ändamål är tillämplig för applikationer med låg energiförbrukning där mikrokontrollen förblir mest i viloläge.
Watchdog Timer, som namnet antyder, kontrollerar alltid om mikrokontrollern fungerar korrekt eller inte. När det gäller en hängd eller stoppad mikrokontroller återställer WDT (Watchdog Timer) mikrokontrollern automatiskt vilket säkerställer att mikrokontrollern körs i ett kontinuerligt kodflöde utan att fastna, hängas eller i stoppade situationer.
Självväckningstimer:
Detta är en annan timerutrustning som tjänar en dedikerad timingprocess på samma sätt som en vakthundstimer. Denna timer, väcker systemet regelbundet när mikrokontrollen körs i lågeffektläge.
Denna timerutrustning kan användas internt eller använda externa kringutrustning för att väcka mikrokontrollern från viloläge. För detta projekt kommer vi att använda Timer 1 och Timer 2.
Programmering av Nuvoton N76E003 mikrokontroller för timer
Ställa in stiften som utgång:
Låt oss börja med utgångssektionen först. Vi använder två lysdioder, den ena är den inbyggda lysdioden, som heter Test, och ansluten till porten P1.4 och en extern lysdiod ansluten till stiftet P1.5.
Därför är dessa två stift konfigurerade som en utgångsstift för att ansluta dessa två lysdioder med hjälp av nedanstående kodavsnitt.
#define Test_LED P14 #define LED1 P15
Dessa två stift är inställda som kvasi-dubbelriktad stift i installationsfunktionen.
ogiltig installation (ogiltig) {P14_Quasi_Mode; P15_Quasi_Mode; }
Ställa in timerfunktionen:
I installationsfunktionen behövs Timer 2 för att konfigureras för att få önskad utgång. För detta kommer vi att ställa in T2MOD-registret med en 1/128 klockavdelningsfaktor och använda det i ett automatiskt laddningsfördröjningsläge. Här är översikten över T2MOD-register-
4,5 och 6: e biten i T2MOD-registret ställde in timer 2-klockavdelaren och 7: e biten ställde in automatiskt omladdningsläge. Detta görs med hjälp av nedanstående rad -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Dessa två rader definieras i filen Function_define.h som
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Nu ställer dessa rader in det tidsvärde som krävs för Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Vilket definieras ytterligare i filen Function_define.h som-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Så, 16000000 är kristallfrekvensen på 16 Mhz vilket ställer in 100 ms tidsfördröjning.
Nedanför två rader töms Timer 2 låg och hög byte.
TL2 = 0; TH2 = 0;
Slutligen möjliggör nedanstående kod att timern 2 avbryts och startar timern 2.
set_ET2; // Aktivera Timer2-avbrott set_EA; set_TR2; // Timer2-körning
Hela installationsfunktionen kan ses i nedanstående koder-
ogiltig installation (ogiltig) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Aktivera Timer2-avbrott set_EA; set_TR2; // Timer2-körning }
Timer 2 ISR-funktion:
Timer 2 ISR-funktionen kan ses i nedanstående kod.
ogiltig Timer2_ISR (ogiltig) avbryta 5 { clr_TF2; // Rensa Timer2 Interrupt Flag LED1 = ~ LED1; // LED1-växling, ansluten i P1.5; }
Blinkande kod och verifiera utdata för timerfunktionalitet
Koden (anges nedan) när den kompilerades returnerade 0 varning och 0 fel och jag blinkade med standardblinkningsmetoden i Keil. Efter blinkning blinkade lysdioderna i en definierad timerfördröjning som programmerad.
Kolla in videon nedan för en fullständig demonstration av hur styrelsen fungerar för den här koden. Hoppas att du gillade handboken och lärde dig något användbart om du har några frågor lämna dem i kommentarfältet nedan. Du kan också använda våra forum för att skicka andra tekniska frågor.