|
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
A Mikroelektonika jó fejlesztőeszközöket készít, de a fordítói kis túlzással kb. vicc kategória, Avr-nél is. Másrészt aki - többek között- azt sem tudja mi a pointer, ne írjon C programot. Elnézést a szerzőtől! A C-t nem MCU fejlesztőkörnyezetben kell megtanulni, ott használni kell.
Eddig rendben is lenne, sok feladatnál majdnem mindegy, hogy mekkora a kód. De itt arról volt szó, hogy a LED -ek beállításának ideje és a delay_us(220) 200us ideje milyen viszonyban van egymással.
18F -en egy utasítás két byte (goto, call, lfsr, movff 4 byte, movffl 6 byte). A program memória címzése byte alapú. A hozzászólás módosítva: Máj 12, 2017
Ez itt a kezdők rovata. Amikor valaki kezdőként az első (néhányadik) C programját írja, nem sok fogalma van a pointerek használatáról...
Sziasztok,
Próbálgatom használni a megszakításokat, egyenlőre még az IOC megszakításoknál tartok.
Írtam egy egyszerű kódot a gyakorlásra (PIC16LF1825), MPLAB-ban működik, de Proteus-ban nem
Mit rontok el? Kérlek segítsetek!
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
#include <xc.h>
void interrupt RST() // Ha RA4 vagy RA5 bemenetre lefutóél érkezik, akkor az IOCAF regiszterbe tárolja az eseményt.
{
if (IOCAFbits.IOCAF4 & IOCAFbits.IOCAF5) // HA RA4 és RA5-re is érkezett lefutó él.
{
RESET(); // Meghív minket egy sörre.
}
IOCAF = 0; // IOCAF flag bitek törölve.
}
void main(void)
{
OSCCON = 0b00111010; // 4XPLL kikapcsolva, Belső oszcillátor 500kHz-en.
TRISA = 0b00110100; // PORTA RA2 - RA4 - RA5 bemenetre állítva.
ANSELA = 0b00000000; // Digitális I/O engedélyezve PORTA-n.
IOCAN = 0b00110000; // RA4 - RA5-ön lefutóél vezérelt IOC beállítva.
TRISC = 0b00000000; // PORTC kimenetre állítva.
ANSELC = 0b00000000; // Digitális I/O engedélyezve PORTC-n.
INTCONbits.IOCIE = 1; // IOC engedélyezve.
INTCONbits.GIE = 1; // Globális megszakítások engedélyezve.
LATC = 0b00000000; // PORTC minden kimenete 0.
if (PORTAbits.RA2 == 1) // Ha RA2 = 1 akkor LATC RC4 és RC5 kimenete 1.
{
while(1)
{
LATC = 0b00110000;
}
}
}
Sziasztok!
PIC24fj128ga010 mikrokontroller programozását kezdtem el most tanulgatni és szeretnék segítséget kérni egy egyszerű feladat megvalósításában. A célom az lenne, hogy a PIC két kimenetén egy-egy darab LED-et szeretnék felváltva villogtatni 1 másodpercenként. Mit ajánlanátok, hogy valósítsam meg a feladatot? A lényeg az lenne, hogy az alap villogtatás között más feladatokat is szeretnék végrehajtani a jövőben, pl. soros porti kezelés, egyéb LED-ek vezérlése, nyomógomb. Milyen megoldást alkalmazzak? PIC timer? megszakítás? Valakinek nincs véletlenül egy hasonló feladatra készített forráskódja C-re?
Előre is köszönöm a segítséget!
Hát szívesen kipróbálnám, de még úton van a Pickit3
Szia!
Ha most kezded,akkor másik Pic-et válassz...ennek eléggé karcsú az újraírhatósága.Igen majd timer kell,megszakítással.
Jó lenne tudni,hogy pl.külső oszcit szeretnél használni,vagy belsőt? , a ledeket hová szeretnéd kötni?,... Csak ezek után tudunk valamit mutatni....Kellene valami rajz,hogy mit hová kötnél.
Kényelmes fejleszteni, gyötrelmes kivárni amíg lefut... Lassan már a levélíráshoz is 64Gbyte RAM kell A hozzászólás módosítva: Máj 12, 2017
Ez a sor
if (IOCAFbits.IOCAF4 & IOCAFbits.IOCAF5)
nem ez akart lenni?
if (IOCAFbits.IOCAF4 && IOCAFbits.IOCAF5)
Nem tudom, hogy az XC8 bitek AND-elésén mit értene, de (én a) másodikat ismerem helyesként erre az esetre.
Logikai AND-et akarsz csinálni, hogy mind a két érték = '1' nem össze AND-elni a két értéket.
Ez így csak akkor működne, ha egy IT-n belül, kb. egyszerre megy le a két lábon a jel. Ha kis késés van köztük, akkor az első lefutó él lekezelése után törlöd az IOCAF regisztert, így soha nem lesz benne két egyes. Különben is, ha jól értelmezem, neked nem a lefutó él a feltétel, hanem a két nulla szint. Én az IOC-t csak a változás detektálására használnám, a reset feltételénél a port állapotát tenném be.
Idézet: „Elkezdtem nézegetni:
- Ahogy írták már mások is kitörlődött / megszökött egy sor. A pa deklarációja után kimaradt az értékadás.[quote] pa = & l[i][0];”
- Milyen típusa is van a pa mutatónak? Olyannak kellene lennie, mint az l[][] tömb elemeinek. Azonban a int *pa; a deklarációja, az tömb pedig char l[6][26]; A char *pa; a jó megoldás.
/// Az int ebben a fordítóban 16 bites (2 byte - os), a char pedig 8 bites (1 byte - os). Az int típusra mutatóként deklarált változó a ++ műveletre 2 byte -tal megy arrébb a memóriában.
A Watch ablakba vedd fel a ps és a l változót és figyeld az értéküket.
A ledkockanagy_2 képen az is látszik, hogy a pa változó szépen ellépkedett az l[1][25] címére. Így nem használható az oszlopok() hívásában paraméternek. Az is látszik a ledkockanagy_3 képen, hogy az indexelés milyen műveleteket hajt végre ... CALL _Mul_16x16_U, 0 Nini egy szorzó rutin...[/quote]
Most volt időm felnézni ...
Idézet: „pa = & l[i][0];” Nem is értem hogy nem került bele a kódba...
int *pa állítsam át char *pa..
Idézet: „Így nem használható az oszlopok() hívásában paraméternek” Ezért hagytam a sima indexelést ha az nem probléma? lesz egy pici időm megnézem és írom mire jutottam.
Sziasztok,
Még mindig problémázok Bemásolom ide a teljes kódomat. Sajnos már minden ötletből kifogytam, ezért kérném a segítségeteket!
A program jól működik, a baj akkor kezdődik ha INTCONbits.GIE = 1; -re beállítom, mert szeretnék megszakításokat használni.
Mert akkor ugyanis csak annyit csinál ha elindítom (a proteus szimulációt), hogy PORTC = 0b00110110 értékre állítja (?), és hiába csinálok akármit, semmire nem reagál.
Most vagy a kódban van a hiba, vagy kihagytam valamit?
#include <xc.h>
#include "config.h"
#define _XTAL_FREQ 500000
void interrupt IOC()
{
if (IOCAFbits.IOCAF4 || IOCAFbits.IOCAF5)
{
IOCAF = 0;
if (PORTAbits.RA4 == 0 && PORTAbits.RA5 == 0)
{
RESET();
}
}
if (IOCAFbits.IOCAF2)
{
IOCAF = 0;
}
}
void main(void)
{
OSCCON = 0b00111010; // 4XPLL kikapcsolva, 500Khz belső oszcillátor kiválasztva.
TRISA = 0b00110100; // PORTA bemenetei beállítva.
LATA = 0; // PORTA kimenetei 0-ra állítva.
INLVLA = 0b00110100; // RA2-RA4-RA5-re Shmitt trigger inputok beállítva.
ANSELA = 0b00000000; // Digitális I/O engedélyezve PORTA-n.
TRISC = 0b00000000; // PORTC kimenetre állítva.
ANSELC = 0b00000000; // Digitális I/O engedélyezve PORTC-n.
IOCAP = 0b00110000; // RA4 és RA5-ön felfutó él IOC
IOCAN = 0;
INTCONbits.IOCIE = 1; // IOC engedélyezve
INTCONbits.GIE = 1; // Globális megszakítások engedélyezve.
unsigned char BP = 0;
unsigned char RES;
unsigned int WAIT;
unsigned char PUSH = 0;
while (1)
{
if (PORTAbits.RA4 && PORTAbits.RA5) // Ha RA4 ÉS RA5 = 1
{
IOCAN = 0b00110100; // RA2-RA4-RA5-ön lefutóél IOC engedélyezve.
IOCAP = 0b00000100; // RA2-n felfutó él IOC engedélyezve.
LATCbits.LATC3 = 1;
LATCbits.LATC5 = 0;
LATCbits.LATC1 = 1;
while (PORTAbits.RA4 || PORTAbits.RA5) // Ha RA4 VAGY RA5 = 1.
{
if (PORTAbits.RA2 == 1 && PUSH == 0) // Ha megvan nyomva a gomb.
{
if (BP == 0)
{
BP = 1;
PUSH = 1; // Gomb nyomás érzékelése és tárolása.
LATCbits.LATC5 = 1;
LATCbits.LATC2 = 1;
LATCbits.LATC1 = 0;
__delay_ms(5);
for (RES = 0; RES <= 200; RES++)
{
if (PORTAbits.RA5 == 1)
{
break;
}
__delay_us(200);
}
LATCbits.LATC4 = 0;
for (WAIT = 0; WAIT <= 2500; WAIT++ ) // Gomb hosszan nyomásának érzékelése.
{
if (PORTAbits.RA2 != 1) // Ha nincs megnyomva a gomb, akkor a for ciklus megszakítva.
{
break;
}
__delay_us(200);
}
if (WAIT >= 2500) // Ha minimum 2mp-ig nyomták a gombot.
{
LATCbits.LATC5 = 1;
LATCbits.LATC4 = 1;
LATCbits.LATC2 = 1;
LATCbits.LATC1 = 1;
}
}
else
{
BP = 0;
PUSH = 1; // Gomb nyomás érzékelése és tárolása.
LATCbits.LATC4 = 1;
LATCbits.LATC1 = 1;
LATCbits.LATC2 = 0;
__delay_ms(5);
for (RES = 0; RES <= 200; RES++)
{
if (PORTAbits.RA4 == 1)
{
break;
}
__delay_us(200);
}
LATCbits.LATC5 = 0;
for (WAIT = 0; WAIT <= 2500; WAIT++ ) // Gomb hosszan nyomásának érzékelése.
{
if (PORTAbits.RA2 != 1) // Ha nincs megnyomva a gomb, akkor a for ciklus megszakítva.
{
break;
}
__delay_us(200);
}
if (WAIT >= 2500) // Ha minimum 2mp-ig nyomták a gombot.
{
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
LATCbits.LATC1 = 1;
LATCbits.LATC2 = 1;
BP = 1;
}
}
}
if (PORTAbits.RA2 == 0 && PUSH == 1) // nyomógomb elengedésének érzékelése.
{
PUSH = 0;
}
SLEEP (); // Ha alszik, RA2-RA4-RA5 lefutó és RA2 felfutóél IOC ébreszti.
}
}
else // Ha RA4 ÉS RA5 != 1. akkor PORTC beállítása és mars aludni, RA4 és RA5 felfutóél IOC ébreszti.
{
LATC = 0b00110000;
SLEEP ();
}
}
}
Én azokat a == && == megoldásokat átírnám mondjuk ilyenekre:
if ( !PORTAbits.RA4 && !PORTAbits.RA5)
(#) |
Bell hozzászólása |
Máj 13, 2017 |
|
/ |
|
|
Sziasztok!
Most ismerkedem az MPLABX-el.
Egy LED-et szeretnék TMR0-al, megszakítással villogtatni.
A mellékelt programmal kettőt villan, majd sötét marad.
Két gondom van:
- a TMR0L és a TMR0H nem számol, így nem generál megszakítást sem
- a szimulátorban nem áll meg a LED=~LED; töréspontnál (117.sor)
IDE: MPLABX 3.50, XC8: V1.42, kontroller PIC18F25K40.
Mit rontok el?
A program:
// CONFIG1L
#pragma config FEXTOSC = OFF // External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINTOSC_64MHZ// Power-up default value for COSC bits (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1)
// CONFIG1H
#pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled)
#pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
// CONFIG2L
#pragma config MCLRE = INTMCLR // Master Clear Enable bit (If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (Power up timer disabled)
#pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)
// CONFIG2H
#pragma config BORV = VBOR_2P45 // Brown Out Reset Voltage ion bits (Brown-out Reset Voltage (VBOR) set to 2.45V)
#pragma config ZCD = OFF // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
#pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config DEBUG = OFF // Debugger Enable bit (Background debugger disabled)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
// CONFIG3L
#pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
#pragma config WDTE = OFF // WDT operating mode (WDT Disabled)
// CONFIG3H
#pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
#pragma config WDTCCS = SC // WDT input clock or (Software Control)
// CONFIG4L
#pragma config WRT0 = OFF // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
#pragma config WRT1 = OFF // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
#pragma config WRT2 = OFF // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
#pragma config WRT3 = OFF // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)
// CONFIG4H
#pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
#pragma config SCANE = ON // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
#pragma config LVP = OFF // Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming)
// CONFIG5L
#pragma config CP = OFF // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
#pragma config CPD = OFF // DataNVM Memory Code Protection bit (DataNVM code protection disabled)
// CONFIG5H
// CONFIG6L
#pragma config EBTR0 = OFF // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected table reads executed in other blocks)
#pragma config EBTR1 = OFF // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected table reads executed in other blocks)
#pragma config EBTR2 = OFF // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected table reads executed in other blocks)
#pragma config EBTR3 = OFF // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected table reads executed in other blocks)
// CONFIG6H
#pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected table reads executed in other blocks)
#define LOWBYTE(v) ((unsigned char) (v))
#define HIGHBYTE(v) ((unsigned char) (((unsigned int) (v)) >> 8))
#define _XTAL_FREQ 8000000
#define time0 0xFF00
#define LED LATAbits.LATA0
#include <xc.h>
void Init_TMR0 (void);
void Init_Interrupt (void);
void main(void)
{
unsigned char i;
OSCFRQbits.HFFRQ=0x0011; // 8MHz
TRISA =0xFE;
LATA=0x00;
Init_TMR0();
Init_Interrupt();
for(i=0; i<4; i++)
{
PIR0bits.TMR0IF=1;
__delay_ms(300);
}
while(1)
{
}
}
void Init_TMR0 (void)
{
TMR0H = HIGHBYTE(time0);
TMR0L = LOWBYTE(time0);
PIE0bits.TMR0IE=1;
PIR0bits.TMR0IF=0;
IPR0bits.TMR0IP=1;
T0CON0bits.T016BIT=1; //16 bit
T0CON0bits.T0OUTPS=0b1111; //post 16
T0CON1bits.T0CS=0b010; //Fosc/4;
T0CON1bits.T0CKPS=0b1111; //pre 32768
T0CON1bits.T0ASYNC=1;
T0CON0bits.T0EN=1;
}
void Init_Interrupt (void)
{
INTCONbits.GIEH=1;
INTCONbits.GIE=1;
INTCONbits.GIEL=1;
INTCONbits.IPEN=1;
}
void interrupt high_priority TMR0h(void)
{
if (PIR0bits.TMR0IF && PIE0bits.TMR0IE)
{
TMR0H = HIGHBYTE(time0);
TMR0L = LOWBYTE(time0);
LED=~LED;
PIR0bits.TMR0IF=0;
}
}
A hozzászólás módosítva: Máj 13, 2017
Átírtam, így sokkal esztétikusabb, de sajnos a hiba megmaradt.
PIC16LF1825-re írtam a progit, ezt elfelejtettem írni.
Idézet: „Ha most kezded,akkor másik Pic-et válassz...ennek eléggé karcsú az újraírhatósága.”
Bakker, ezt hogy lehet észrevenni? Ott egy 200-250 oldalas dokumentum, és van benn egy nyomorult sor ami miatt ez a PIC pont nem jó egy kezdőnek. A hozzászólás módosítva: Máj 13, 2017
A típus kiválasztása előtt érdemes az errata -ját is elolvasni.
Mindenhol átírtam hasonlóra, így az MPLAB szimulátorban működött.
Minden adatlap elején a felsorolásoknál,hogy mit is tud ott van a Special Microcontroller Features--> xxx erase/write cycles. Érdemes átnézni,hogy mit tud,és utána ,mint a Hp41C is írta,hogy mi megy belőle .A GA010-et még anno az Explorerhez adták,így én is azzal kezdtem. Én jó ideje a PIC24FJ128GB204 -et nyüstölöm,és még sokakat . Érdemes olyat választani amiben majdnem minden van,pl: sok uart,SPI,I2C,és usb.Bár az elején nem fogsz 1-2-vel foglalkozni,de amikor már belejössz,akkor jó ha tudja.
Itt kicsit összemosódott szerintem a bináris - hexa rész
OSCFRQbits.HFFRQ=0x0011; // 8MHz
Helyesen így fest:
OSCFRQbits.HFFRQ=0x07; // 8MHz
Bár ettől még mennie kéne szerintem, valahol máshol lesz a gubanc. De nálam se megy a Timer0 az MPLABX szimulátorban, mondjuk attól a valóságban lehet megy.
Élesben nem tudod kipróbálni?
Nem mindig akarja az igazságot a Proteus. (tapasztalat)
Sajnos még nem.
PIC-et már vettem, de a Pickit3 még nem érkezett meg.
Elvileg a kódom szerint működnie kellene? Nem tudom miért műveli ezt a Proteus. MPLAB X-ben működik.
Nem tökéletes a szimulálás, de nem túl sűrűn fordul elő..
Egyszerűen csak számítani kell rá, hogy a szimulátor hibázhat.
Kód szerint jónak tűnik a dolog.
Élesben teszteld, addig ne agyalj rajta...
Köszönöm az észrevételt! Ezt a hibát nem rég követtem el, de javítva sem számol a TIMER0.
Sem a szimulátorban, sem a kontrollerben.
Talán nem is a TIMER0 konfigban van a hiba.
Azt a néhány bitet nehéz ennyire elrontani.
Szia!
Előbb állítsd be a TMR0 módját, aztán az értéket, aztán engedélyezd:
void Init_TMR0 (void)
{
T0CON0bits.T016BIT=1; //16 bit
T0CON0bits.T0OUTPS=0b1111; //post 16
T0CON1bits.T0CS=0b010; //Fosc/4;
T0CON1bits.T0CKPS=0b1111; //pre 32768
T0CON1bits.T0ASYNC=1;
TMR0H = HIGHBYTE(time0);
TMR0L = LOWBYTE(time0);
IPR0bits.TMR0IP=1;
PIE0bits.TMR0IE=1;
PIR0bits.TMR0IF=0;
T0CON0bits.T0EN=1;
}
Az INTCON GIE és GIEH ugyan az a bit.
void Init_Interrupt (void)
{
INTCONbits.IPEN=1;
INTCONbits.GIEH=1;
INTCONbits.GIEL=1;
}
Érdemes lenne egy alacsony szintű megszakítás kiszolgálót is.
A 80. sorban miért szerepel a programból való megszakítás kérése?
Abban az átkozott MpLab 8 szimulátorában volt egy lehetőség a timer-ek belső regiszterének megjelenítésére. TMR0_internal A hozzászólás módosítva: Máj 14, 2017
Illetve ennek a résznek mi lenne a célja?
for(i=0; i<4; i++)
{
PIR0bits.TMR0IF=1;
__delay_ms(300);
}
Szerintem ki kéne venni, bár valószínűleg nem ez okozza a hibát.
Egyébként maga a PIC működik? Próbáld meg azt, hogy a végtelen ciklusba raksz egy párszáz ms-os delayt, meg egy LED = ~LED utasítást (a megszakításban kommentezd ki, nehogy ott is menjen végül..). Ha igy villog a LED, akkor a program legalább megy.
Szerk.: Hp41C
Idézet: „Abban az átkozott MpLab 8 szimulátorában volt egy lehetőség a timer-ek belső regiszterének megjelenítésére.”
MPLABX-ben is van. A hozzászólás módosítva: Máj 14, 2017
Közben ahogy próbálgattam ezt az MPLABX-et, hát eléggé megutáltam. Egy rakás trágya az egész, hogy finoman fogalmazzak. A build time 1 percet vesz igénybe Bell kódjánál.
Maga az IDE is bugos, és a régi MPLAB-hoz képest egy fapados gagyiság. De legalább erőforrás zabáló is.
Ameddig csak lehet, én jó messziről elkerülöm.
|
|