Stap 6: programmeren
Op dit punt, werken we uitsluitend met de X MPLAB IDE. Om te beginnen merken het paneel met een adellijke titel projecten aan de linkerzijde van het venster van MPLAB IDE. Van dit paneel een code te maken:
Klik met de rechtermuisknop op de map 'Source Files' hieronder uw project > New > C-Main-bestand
Voel je vrij om het te noemen als u wens ('Main' is prima) u zult nu zien dat MPLAB X heeft gemaakt een hoofdbestand, zichtbaar in het midden paneel.
Code: Voor de toepassing van deze tutorial ik zal het verstrekken van de benodigde code, die u kunt kopiëren en plakken in dat venster center (na het verwijderen van alle andere tekst in het bestand) om u een idee van wat de code doet, ik heb ook een kort overzicht hieronder evenals opmerkingen binnen de eigenlijke code zelf (geplakt hieronder)
Overzicht: Er zijn een paar van verschillende gedeelten van de code voor het programmeren van een PIC-microcontroller, die worden hieronder nader belicht.
Instructies definieert: Define instructies kunt programmeurs kunnen gebruiken van woorden die iets anders met de computer kunnen betekenen. We kunnen bijvoorbeeld het woord OFF definiëren een binaire '0' betekent. Dus terwijl we het woord zien af, waardoor de code gemakkelijker te begrijpen, de computer leest een binaire '0'.
Omvatten verklaringen: Omvatten verklaringen vertellen de compiler verschillende headerbestanden opnemen. Deze externe bestanden kunnen bestaan uit bestanden die input/output functies (stdlib.h), of een groot aantal standaard C-functies (stdio.h), enz bepalen.
Pragmas: Pragmas worden gebruikt om de configuratiebits ingesteld op de microcontroller die opmaakaspecten zoals oscillator selectie, code bescherming, enz. Voel je vrij om te controleren de configuratiebits selectie van Venster > PIC geheugen Views > configuratiebits
Functies: Functies zijn delen van het programma die specifieke taken uitvoeren. De belangrijkste functie is waar het programma wordt uitgevoerd.
Programma:
/********************************************************************
Hoe program een PIC & Lees een encoder programma
Laatst gewijzigd: 1/3/14
Auteurs: Carson Miller
Geschreven voor: PIC18F4525 (huidige versie)
*********************************************************************/
#define ingang 1
#define OUTPUT 0
#define _XTAL_FREQ 4000000 //Used door de XC8 delay_ms(x)-macro
PIC18F25K22 configuratie-bits instellingen
#include < xc.h > //Includes PIC hardware toewijzing
#include "GenericTypeDefs.h" //Includes standaard variabele types
#pragma config verklaringen moeten voorafgaan aan projectbestand bevat.
#define project enums gebruiken voor ON en OFF.
CONFIG1H
#pragma config OSC = INTIO7 / / Oscillator selectie bits (interne oscillator blok, CLKOUT functie op RA6, poort functie op RA7)
#pragma config FCMEN = OFF / / Fail-Safe klok Monitor inschakelen bit (Fail-Safe klok Monitor uitgeschakeld)
#pragma config IESO = OFF / / interne/externe Oscillator omschakeling bit (Oscillator omschakeling modus uitgeschakeld)
CONFIG2L
#pragma config PWRT = OFF / / Power-up Timer Enable-bit (PWRT gehandicapten)
#pragma config BOREN = SBORDIS / / Brown-out Reset inschakelen bits (Brown-out Reset alleen hardwarematig is ingeschakeld (de SBOREN is uitgeschakeld))
#pragma config BORV = 3 / / Brown Out Reset Voltage bits (de instelling van de Minimum)
CONFIG2H
#pragma config WDT = OFF / / Watchdog Timer inschakelen bit (WDT ingeschakeld)
#pragma config WDTPS = 32768 / / Watchdog Timer Postscale Selecteer bits (1:32768)
CONFIG3H
#pragma config CCP2MX = PORTC / / CCP2 MUX bit (CCP2 input/output is multiplexed met RC1)
#pragma config PBADEN = ON / / bit PORTB a/d inschakelen (PORTB < 4:0 > pinnen zijn geconfigureerd als analoge ingangskanalen op Reset)
#pragma config LPT1OSC = OFF / / Low-Power Timer1 Oscillator inschakelen bit (Timer1 geconfigureerd voor hogere macht operatie)
#pragma config MCLRE = ON / / Picssoftware Pin inschakelen bit (Picssoftware pin ingeschakeld; RE3 invoer pin uitgeschakeld)
CONFIG4L
#pragma config STVREN = ON / / Stack Full/Underflow opnieuw inschakelen bit (Stack volledig/underflow zal veroorzaken Reset)
#pragma config LVP = OFF / / Single-Supply ICSP inschakelen bit (Single-Supply ICWB ingeschakeld)
#pragma config XINST = OFF / / Extended instructie Set inschakelen bit (instructieset uitbreiding en geïndexeerd adressering modus uitgeschakeld (Legacy))
CONFIG5L
#pragma config CP0 = OFF / / bit Code bescherming (blok 0 (000800-003FFFh) niet code-beschermd)
#pragma config CP1 = OFF / / Code bescherming (blok 1 (004000-007FFFh) niet code-beschermd) bit
#pragma config CP2 = OFF / / Code bescherming (blok 2 (008000-00BFFFh) niet code-beschermd) bit
CONFIG5H
#pragma config CPB = OFF / / Boot blok Code bescherming bit (opstartblok (000000-0007FFh) niet code-beschermd)
#pragma config CPD = OFF / / gegevensbescherming EEPROM Code bit (Data EEPROM niet code-beschermd)
CONFIG6L
#pragma config WRT0 = OFF / / schrijf bescherming bits (blok 0 (000800-003FFFh) niet beveiligd tegen schrijven)
#pragma config WRT1 = OFF / / schrijf bescherming bits (blok 1 (004000-007FFFh) niet beveiligd tegen schrijven)
#pragma config WRT2 = OFF / / schrijf bescherming bits (blok 2 (008000-00BFFFh) niet beveiligd tegen schrijven)
CONFIG6H
#pragma config WRTC = OFF / / configuratie Register schrijven bescherming bits (configuratie registers (300000-3000FFh) niet beveiligd tegen schrijven)
#pragma config WRTB = OFF / / Boot Block schrijven bescherming bits (Boot Block (000000-0007FFh) niet beveiligd tegen schrijven)
#pragma config WRTD = OFF / / EEPROM schrijven gegevensbescherming bit (Data EEPROM niet schrijven-beschermd)
CONFIG7L
#pragma config EBTR0 = OFF / / tabel Lees bescherming bits (blok 0 (000800-003FFFh) niet beschermd tegen tabel leest uitgevoerd in andere blokken)
#pragma config EBTR1 = OFF / / tabel Lees bescherming bits (blok 1 (004000-007FFFh) niet beschermd tegen tabel leest uitgevoerd in andere blokken)
#pragma config EBTR2 = OFF / / tabel Lees bescherming bits (blok 2 (008000-00BFFFh) niet beschermd tegen tabel leest uitgevoerd in andere blokken)
CONFIG7H
#pragma config EBTRB = OFF / / Boot Block tabel Lees bescherming bits (Boot Block (000000-0007FFh) niet beschermd tegen tabel leest uitgevoerd in andere blokken)
Dummy variabele instellen
UINT afstand = 0;
CHAR richting = 0;
CHAR fout = 0;
VOID configure(void)
{
ADC Setup
ADCON1bits.PCFG = 1111; Uitgeschakeld alle analoge ingangen (Zie gegevensblad p. 224)
Oscillator Setup
OSCCONbits.IRCF = 110; Sets tot 4MHz oscillator
Onderbreken van Setup
INTCONbits.GIE = 1; Maakt het mogelijk alle niet-gemaskerde of hoge prioriteit onderbreekt (afhankelijk van de IPEN)
INTCONbits.PEIE = 1; Voor alle niet-gemaskerde perifere interrupts of lage prioriteit interrupts (afhankelijk van de IPEN) mogelijk
INTCONbits.INT0IF = 0; Hiermee wist u de interrupt 0 vlag bits (moeten plaatsvinden voordat de interrupt inschakelen)
INTCONbits.INT0IE = 1; Laat de INT0 externe interrupt
INTCON2bits.INTEDG0 = 1; Sets externe interrupt 0 te onderbreken op de stijgende rand
RCONbits.IPEN = 0; Hiermee schakelt u de prioriteitsniveaus op interrupts
TRISBbits.TRISB0 = INPUT; INT0 ingesteld als input
TRISBbits.TRISB1 = INPUT; Sets INT1 als input
}
void main()
{
configure();
while(1)
{
Programma lus
}
}
Belangrijkste interrupt service routine (ISR)
VOID interrupt ISR()
{
Controleer om te zien of het is interrupt 0
Als (INTCONbits.INT0IF == 1)
{
afstand ++;
INTCONbits.INT0IF = 0; Hiermee wordt gewist onderbreken vlag
}
anders
fout = 1;
}