Scrivere un bit alla volta..

Salve Ho un problema che mi si presenta sia su un PIC16F628 che su un PIC12F675, eseguendo il programma seguente il cambiamento di ogni singolo bit della porta fa azzerare gli altri. Praticamente con questo programma io vedo lampeggiare solo il led su RA4. Uso il compilatore PICC della Hi-Tech.

#include #include #define XTAL_FREQ 4MHZ #include "delay.c" __CONFIG(WDTDIS & XT & UNPROTECT);

main(){ TRISA=0b00000000;

while(1){ RA1=0; RA2=0; RA3=0; RA4=0; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); RA1=1; RA2=1; RA3=1; RA4=1; DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254); DelayMs(254);

} }

Reply to
NeMeSi
Loading thread data ...

Non ho mai usato un pic in vita mia ma sempra un programma scritto in c Non hai dichiarato le variabili ra1 ra2 ra3 ra4 nei file che includi non esistono, non so come faccia a compilarlo. Dal manuale della hi-tech cito testualmente "To set or clear individual bits within integral type, the following macros could be used: #define bitset(var,bitno) ((var) |= 1 < < (bitno))

#define bitclr(var,bitno) ((var) &= ~(1 < < (bitno)))

To perform the same operation as above, the bitset macro could be employed as follows:

bitset(foo,6);"

Spero di esserti stato utile

Ciao ciao

Gnafu

Reply to
Gnafu

Esatto

Queste non sono variabili ma macro e vengono definite all'interno della libreria che distingue ogni singolo o famiglia di pic. La libreria PIC.h contiene l'elenco di queste librerie e in base al pic che setto nel compilatore lui carica la libreria del singolo pic corretta.

Questo non lo capisco molto anche perchè non ho un buon inglese purtroppo..

Reply to
NeMeSi

La vedo dura per te... Ti consiglio di impararlo l'inglese :-)

Io di solito uso l'assembler per i PIC, comunque la risposta è nel manuale, che ha citato Gnafu: Tu pensi di settare i bit dei registri come RA1=1,ecc., in realtà metti il valore 1 quindi in binario (00000001) sul registro, è per questo che lampeggia solo il primo bit.... Per settare un singolo bit di un registro devi utilizzare la "macro" riportata nel manuale, ovviamente dichiarandola prima.

Nella parte delle dichiarazioni metti:

#define bitset(var,bitno) ((var) |= 1 < < (bitno)) #define bitclr(var,bitno) ((var) &= ~(1 < < (bitno)))

e nel main bitset("variabile", numero del bit da settare); oppure bitclear("variabile", numero del bit da cancellare);

oppure molto più semplicemente se vuoi usare la tua notazione, prova a settare il registro a 255 e non a 1, se vuoi accenderli tutti.

Spero di non aver detto stronz. visto che il C per i PIC non lo ho mai usato...

Ciao

Reply to
tx_

ok, quindi vabbè, scusa ma non ho voglia di scaricare picc-lite per andare a cercare il pic.h giusto da leggere ^_^ se hai voglia postalo (oppure un link) altrimenti non importa

Dal manuale della hi-tech traduco testualmente

foo è il nome della variabile all'interno della quale cambiare il bit.

Pero' adesso mi rendo conto che forse non gestisce gli RA come bit di un intero

Reply to
Gnafu

E lo so..

Non è cosi infatti come scritto nel primo mess lampeggia RA4... e se commento le linee di programma che controllano RA4 lampeggia RA3. Il cambiamento di stato di un solo bit mette a 0 tutti gli altri.

Usando PIC16f877 o simili non ha problemi a cambiare solo uno dei bit della porta e gli altri rimangono invariati...

Mi serve scrivere un bit alla volta senza "sapere ne controllare" gli altri..

Reply to
NeMeSi

Questo è PIC.C

#ifndef _PIC_H #define _PIC_H

#if defined(_12C508) || defined(_12C509) ||\ defined(_12C508A) || defined(_12C509A) ||\ defined(_12CE518) || defined(_12CE519) ||\ defined(_12C509AG) || defined(_12C509AF) ||\ defined(_12CR509A) #include #endif #if defined(_16C432) || defined(_16C433) #include #endif #if defined(_16C52) || defined(_16C54) || defined(_16C54A) ||\ defined(_16C54B) || defined(_16C54C) || defined(_16CR54A) ||\ defined(_16CR54B) || defined(_16CR54C) || defined(_16C55) ||\ defined(_16C55A) || defined(_16C56) || defined(_16C56A) ||\ defined(_16CR56A) || defined(_16C57) || defined(_16C57C) ||\ defined(_16CR57B) || defined(_16CR57C) || defined(_16C58A) ||\ defined(_16C58B) || defined(_16CR58A) || defined(_16CR58B) ||\ defined(_16C58) || defined(_16HV540) #include #endif #if defined(_12C671) || defined(_12C672) ||\ defined(_12CE673) || defined(_12CE674) #include #endif #if defined(_12F629) || defined(_12F675) #include #endif #ifdef _16C505 #include #endif #ifdef _14000 #include #endif #if defined(_16C554) || defined(_16C556) || defined(_16C558) ||\ defined(_16C554A) || defined(_16C556A) || defined(_16C558A) #include #endif #ifdef _16C61 #include #endif #if defined(_16C62) || defined(_16C62A) || defined(_16CR62) ||\ defined(_16C62B) #include #endif #if defined(_16C620) || defined(_16C621) || defined(_16C622) ||\ defined(_16C620A) || defined(_16C621A) || defined(_16C622A) ||\ defined(_16CE623) || defined(_16CE624) || defined(_16CE625) #include #endif #if defined(_16C64) || defined(_16C64A) || defined(_16CR64) #include #endif #if defined(_16C641) || defined(_16C642) ||\ defined(_16C661) || defined(_16C662) #include #endif #if defined(_16C65) || defined(_16C65A) || defined(_16CR65) #include #endif #if defined(_16C66) || defined(_16C67) #include #endif #if defined(_16C71) || defined(_16C710) || defined(_16C711) #include #endif #if defined(_16C712) || defined(_16C715) || defined(_16C716) #include #endif #if defined(_16C72) || defined(_16C72A) || defined(_16CR72) #include #endif #if defined(_16C73) || defined(_16C73A) ||\ defined(_16C74) || defined(_16C74A) ||\ defined(_16C63) || defined(_16CR63) || defined(_16C63A) ||\ defined(_16C65B) || defined(_16C73B) || defined(_16C74B) ||\ defined(_16LC74B) #include #endif #if defined(_16C76) || defined(_16C77) #include #endif #if defined(_16C773) || defined(_16C774) || defined(_16C770) ||\ defined(_16C771) || defined(_16C717) || defined(_16C745) ||\ defined(_16C765) #include #endif #if defined(_16C781) || defined(_16C782) #include #endif #if defined(_16F627) || defined(_16F628) #include #endif #if defined(_16F83) || defined(_16CR83) || defined(_16C84) || \ defined(_16F84) || defined(_16F84A) || defined(_16CR84) #include #endif #if defined(_16F873) || defined(_16F874) ||\ defined(_16F876) || defined(_16F877) ||\ defined(_16F873A) || defined(_16F874A) ||\ defined(_16F876A) || defined(_16F877A) ||\ defined(_16F872) || defined(_16F871) ||\ defined(_16F870) #include #endif #if defined(_16F72) ||\ defined(_16F73) || defined(_16F74) ||\ defined(_16F76) || defined(_16F77) #include #endif #if defined(_16F818) || defined(_16F819) #include #endif #if defined(_16C923) || defined(_16C924) ||\ defined(_16C925) || defined(_16C926) #include #endif #if defined(_16C99) || defined (_16C99C) #include #endif

#if defined(_17C42) || defined(_17C42A) || defined(_17CR42) ||\ defined(_17C43) || defined(_17CR43) || defined(_17C44) #include #endif

#if defined(_17C752) || defined(_17C756) || defined(_17C756A) ||\ defined(_17C762) || defined(_17C766) #include

#endif

#define CLRWDT() asm(" clrwdt") #define SLEEP() asm(" sleep")

#define ___mkstr1(x) #x #define ___mkstr(x) ___mkstr1(x) #define __CONFIG(x) asm("\tpsect config,class=CONFIG,delta=2");\ asm("\tglobal\tconfig_word"); \ asm("config_word"); \ asm("\tdw "___mkstr(x))

#define __IDLOC(w) asm("\tpsect idloc,class=IDLOC,delta=2");\ asm("\tglobal\tidloc_word"); \ asm("idloc_word"); \ asm("\tirpc\t__arg," ___mkstr(w)); \ asm("\tdw 0&__arg&h"); \ asm("\tendm")

#if defined(EEPROM_SIZE) #define __EEPROM_DATA(a, b, c, d, e, f, g, h) \ asm("\tpsect eeprom_data,class=EEDATA,delta=2"); \ asm("\tdb\t" ___mkstr(a) "," ___mkstr(b) "," ___mkstr(c) "," ___mkstr(d) "," \ ___mkstr(e) "," ___mkstr(f) "," ___mkstr(g) "," ___mkstr(h)) #endif // global interrupt enable macros

#ifdef _PIC16

#ifndef ei #define ei() (GLINTD = 0) // interrupt disable bit #endif ei

#if defined(_17C42) #ifndef di #define di() { do { GLINTD = 1; } while ( GLINTD == 0 ); } // disable interrupt bit #endif di #else #ifndef di #define di() (GLINTD = 1) // interrupt disable bit #endif di #endif

#elif defined _PIC14

#ifndef ei #define ei() (GIE = 1) // interrupt enable bit #endif ei

#if defined(_14000) || defined(_16C61) || defined(_16C62) ||\ defined(_16C63) || defined(_16C63A) || defined(_16C64) ||\ defined(_16C65) || defined(_16C65B) || defined(_16C71) ||\ defined(_16C73) || defined(_16C73B) || defined(_16C74) ||\ defined(_16C74B) || defined(_16C84) || defined(_16C745) ||\ defined(_16C765) || defined(_16LC74B) #ifndef di #define di() { do { GIE = 0; } while ( GIE == 1 ); } // disable interrupt bit #endif di #else #ifndef di #define di() (GIE = 0) // interrupt enable bit #endif di #endif

#endif #endif /* _PIC_H */

Reply to
NeMeSi

E questa è la libreria che ad esempio usa settando il processore come 16f628

/* * Header file for the Microchip * PIC 16F627 chip * PIC 16F628 chip * Midrange Microcontroller */

static volatile unsigned char TMR0 @ 0x01; static volatile unsigned char PCL @ 0x02; static volatile unsigned char STATUS @ 0x03; static unsigned char FSR @ 0x04; static volatile unsigned char PORTA @ 0x05; static volatile unsigned char PORTB @ 0x06; static unsigned char PCLATH @ 0x0A; static volatile unsigned char INTCON @ 0x0B; static volatile unsigned char PIR1 @ 0x0C; static volatile unsigned char TMR1L @ 0x0E; static volatile unsigned char TMR1H @ 0x0F; static volatile unsigned char T1CON @ 0x10; static volatile unsigned char TMR2 @ 0x11; static volatile unsigned char T2CON @ 0x12; static volatile unsigned char CCPR1L @ 0x15; static volatile unsigned char CCPR1H @ 0x16; static volatile unsigned char CCP1CON @ 0x17; static volatile unsigned char RCSTA @ 0x18; static volatile unsigned char TXREG @ 0x19; static volatile unsigned char RCREG @ 0x1A; static volatile unsigned char CMCON @ 0x1F;

/* bank 1 registers */ static unsigned char bank1 OPTION @ 0x81; static volatile unsigned char bank1 TRISA @ 0x85; static volatile unsigned char bank1 TRISB @ 0x86; static volatile unsigned char bank1 PIE1 @ 0x8C; static volatile unsigned char bank1 PCON @ 0x8E; static volatile unsigned char bank1 PR2 @ 0x92; static volatile unsigned char bank1 TXSTA @ 0x98; static volatile unsigned char bank1 SPBRG @ 0x99; static volatile unsigned char bank1 EEDATA @ 0x9A; static volatile unsigned char bank1 EEADR @ 0x9B; static volatile unsigned char bank1 EECON1 @ 0x9C; static volatile unsigned char bank1 EECON2 @ 0x9D; static volatile unsigned char bank1 VRCON @ 0x9F;

/* STATUS bits */ static volatile bit IRP @ (unsigned)&STATUS*8+7; static volatile bit RP1 @ (unsigned)&STATUS*8+6; static volatile bit RP0 @ (unsigned)&STATUS*8+5; static volatile bit TO @ (unsigned)&STATUS*8+4; static volatile bit PD @ (unsigned)&STATUS*8+3; static volatile bit ZERO @ (unsigned)&STATUS*8+2; static volatile bit DC @ (unsigned)&STATUS*8+1; static volatile bit CARRY @ (unsigned)&STATUS*8+0;

/* PORTA bits */ static volatile bit RA7 @ (unsigned)&PORTA*8+7; static volatile bit RA6 @ (unsigned)&PORTA*8+6; static volatile bit RA5 @ (unsigned)&PORTA*8+5; static volatile bit RA4 @ (unsigned)&PORTA*8+4; static volatile bit RA3 @ (unsigned)&PORTA*8+3; static volatile bit RA2 @ (unsigned)&PORTA*8+2; static volatile bit RA1 @ (unsigned)&PORTA*8+1; static volatile bit RA0 @ (unsigned)&PORTA*8+0;

/* PORTB bits */ static volatile bit RB7 @ (unsigned)&PORTB*8+7; static volatile bit RB6 @ (unsigned)&PORTB*8+6; static volatile bit RB5 @ (unsigned)&PORTB*8+5; static volatile bit RB4 @ (unsigned)&PORTB*8+4; static volatile bit RB3 @ (unsigned)&PORTB*8+3; static volatile bit RB2 @ (unsigned)&PORTB*8+2; static volatile bit RB1 @ (unsigned)&PORTB*8+1; static volatile bit RB0 @ (unsigned)&PORTB*8+0;

/* INTCON bits */ static volatile bit GIE @ (unsigned)&INTCON*8+7; static volatile bit PEIE @ (unsigned)&INTCON*8+6; static volatile bit T0IE @ (unsigned)&INTCON*8+5; static volatile bit INTE @ (unsigned)&INTCON*8+4; static volatile bit RBIE @ (unsigned)&INTCON*8+3; static volatile bit T0IF @ (unsigned)&INTCON*8+2; static volatile bit INTF @ (unsigned)&INTCON*8+1; static volatile bit RBIF @ (unsigned)&INTCON*8+0;

/* PIR1 bits */ static volatile bit EEIF @ (unsigned)&PIR1*8+7; static volatile bit CMIF @ (unsigned)&PIR1*8+6; static volatile bit RCIF @ (unsigned)&PIR1*8+5; static volatile bit TXIF @ (unsigned)&PIR1*8+4; static volatile bit CCP1IF @ (unsigned)&PIR1*8+2; static volatile bit TMR2IF @ (unsigned)&PIR1*8+1; static volatile bit TMR1IF @ (unsigned)&PIR1*8+0;

/* T1CON bits */ static volatile bit T1CKPS1 @ (unsigned)&T1CON*8+5; static volatile bit T1CKPS0 @ (unsigned)&T1CON*8+4; static volatile bit T1OSCEN @ (unsigned)&T1CON*8+3; static volatile bit T1SYNC @ (unsigned)&T1CON*8+2; static volatile bit TMR1CS @ (unsigned)&T1CON*8+1; static volatile bit TMR1ON @ (unsigned)&T1CON*8+0;

/* T2CON bits */ static volatile bit TOUTPS3 @ (unsigned)&T2CON*8+6; static volatile bit TOUTPS2 @ (unsigned)&T2CON*8+5; static volatile bit TOUTPS1 @ (unsigned)&T2CON*8+4; static volatile bit TOUTPS0 @ (unsigned)&T2CON*8+3; static volatile bit TMR2ON @ (unsigned)&T2CON*8+2; static volatile bit T2CKPS1 @ (unsigned)&T2CON*8+1; static volatile bit T2CKPS0 @ (unsigned)&T2CON*8+0;

/* CCP1CON bits */ static volatile bit CCP1X @ (unsigned)&CCP1CON*8+5; static volatile bit CCP1Y @ (unsigned)&CCP1CON*8+4; static volatile bit CCP1M3 @ (unsigned)&CCP1CON*8+3; static volatile bit CCP1M2 @ (unsigned)&CCP1CON*8+2; static volatile bit CCP1M1 @ (unsigned)&CCP1CON*8+1; static volatile bit CCP1M0 @ (unsigned)&CCP1CON*8+0;

/* RCSTA bits */ static volatile bit SPEN @ (unsigned)&RCSTA*8+7; static volatile bit RX9 @ (unsigned)&RCSTA*8+6; static volatile bit SREN @ (unsigned)&RCSTA*8+5; static volatile bit CREN @ (unsigned)&RCSTA*8+4; static volatile bit ADEN @ (unsigned)&RCSTA*8+3; static volatile bit FERR @ (unsigned)&RCSTA*8+2; static volatile bit OERR @ (unsigned)&RCSTA*8+1; static volatile bit RX9D @ (unsigned)&RCSTA*8+0;

/* CMCON bits */ static volatile bit C2OUT @ (unsigned)&CMCON*8+7; static volatile bit C1OUT @ (unsigned)&CMCON*8+6; static volatile bit C2INV @ (unsigned)&CMCON*8+5; static volatile bit C1INV @ (unsigned)&CMCON*8+4; static volatile bit CIS @ (unsigned)&CMCON*8+3; static volatile bit CM2 @ (unsigned)&CMCON*8+2; static volatile bit CM1 @ (unsigned)&CMCON*8+1; static volatile bit CM0 @ (unsigned)&CMCON*8+0;

/* OPTION bits */ static bank1 bit RBPU @ (unsigned)&OPTION*8+7; static bank1 bit INTEDG @ (unsigned)&OPTION*8+6; static bank1 bit T0CS @ (unsigned)&OPTION*8+5; static bank1 bit T0SE @ (unsigned)&OPTION*8+4; static bank1 bit PSA @ (unsigned)&OPTION*8+3; static bank1 bit PS2 @ (unsigned)&OPTION*8+2; static bank1 bit PS1 @ (unsigned)&OPTION*8+1; static bank1 bit PS0 @ (unsigned)&OPTION*8+0;

/* TRISA bits */ static volatile bank1 bit TRISA7 @ (unsigned)&TRISA*8+7; static volatile bank1 bit TRISA6 @ (unsigned)&TRISA*8+6; static volatile bank1 bit TRISA4 @ (unsigned)&TRISA*8+4; static volatile bank1 bit TRISA3 @ (unsigned)&TRISA*8+3; static volatile bank1 bit TRISA2 @ (unsigned)&TRISA*8+2; static volatile bank1 bit TRISA1 @ (unsigned)&TRISA*8+1; static volatile bank1 bit TRISA0 @ (unsigned)&TRISA*8+0;

/* TRISB bits */ static volatile bank1 bit TRISB7 @ (unsigned)&TRISB*8+7; static volatile bank1 bit TRISB6 @ (unsigned)&TRISB*8+6; static volatile bank1 bit TRISB5 @ (unsigned)&TRISB*8+5; static volatile bank1 bit TRISB4 @ (unsigned)&TRISB*8+4; static volatile bank1 bit TRISB3 @ (unsigned)&TRISB*8+3; static volatile bank1 bit TRISB2 @ (unsigned)&TRISB*8+2; static volatile bank1 bit TRISB1 @ (unsigned)&TRISB*8+1; static volatile bank1 bit TRISB0 @ (unsigned)&TRISB*8+0;

/* PIE1 bits */ static volatile bank1 bit EEIE @ (unsigned)&PIE1*8+7; static volatile bank1 bit CMIE @ (unsigned)&PIE1*8+6; static volatile bank1 bit RCIE @ (unsigned)&PIE1*8+5; static volatile bank1 bit TXIE @ (unsigned)&PIE1*8+4; static volatile bank1 bit CCP1IE @ (unsigned)&PIE1*8+2; static volatile bank1 bit TMR2IE @ (unsigned)&PIE1*8+1; static volatile bank1 bit TMR1IE @ (unsigned)&PIE1*8+0;

/* PCON bits */ static volatile bank1 bit OSCF @ (unsigned)&PCON*8+3; static volatile bank1 bit POR @ (unsigned)&PCON*8+1; static volatile bank1 bit BOR @ (unsigned)&PCON*8+0;

/* TXSTA bits */ static volatile bank1 bit CSRC @ (unsigned)&TXSTA*8+7; static volatile bank1 bit TX9 @ (unsigned)&TXSTA*8+6; static volatile bank1 bit TXEN @ (unsigned)&TXSTA*8+5; static volatile bank1 bit SYNC @ (unsigned)&TXSTA*8+4; static volatile bank1 bit BRGH @ (unsigned)&TXSTA*8+2; static volatile bank1 bit TRMT @ (unsigned)&TXSTA*8+1; static volatile bank1 bit TX9D @ (unsigned)&TXSTA*8+0;

/* EECON1 bits */ static volatile bank1 bit WRERR @ (unsigned)&EECON1*8+3; static volatile bank1 bit WREN @ (unsigned)&EECON1*8+2; static volatile bank1 bit WR @ (unsigned)&EECON1*8+1; static volatile bank1 bit RD @ (unsigned)&EECON1*8+0;

/* VRCON bits */ static volatile bank1 bit VREN @ (unsigned)&VRCON*8+7; static volatile bank1 bit VROE @ (unsigned)&VRCON*8+6; static volatile bank1 bit VRR @ (unsigned)&VRCON*8+5; static volatile bank1 bit VR3 @ (unsigned)&VRCON*8+3; static volatile bank1 bit VR2 @ (unsigned)&VRCON*8+2; static volatile bank1 bit VR1 @ (unsigned)&VRCON*8+1; static volatile bank1 bit VR0 @ (unsigned)&VRCON*8+0;

#define EEPROM_SIZE 128

/* macro versions of EEPROM write and read */ #define EEPROM_WRITE(addr, value) while(WR)continue;EEADR=(addr);EEDATA=(value); \ CARRY=0;if(GIE)CARRY=1;GIE=0; \ WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \ if(CARRY)GIE=1

#define EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)

/* library function versions */

extern void eeprom_write(unsigned char addr, unsigned char value); extern unsigned char eeprom_read(unsigned char addr);

#define CONFIG_ADDR 0x2007

/*watchdog*/ #define WDTEN 0x3FFF // enable watchdog timer #define WDTDIS 0x3FFB // disable watchdog timer

/*power up timer*/ #define PWRTEN 0x3FF7 // enable power up timer #define PWRTDIS 0x3FFF // disable power up timer

/*MCLRE section*/ #define MCLREN 0x3FFF // memory clear enable #define MCLRDIS 0x3FDF // disable memory clear //alternately #define MCLRIO 0x3FDF // use MCLRDIS

/*brown out reset*/ #define BOREN 0x3FFF // enable brown out reset #define BORDIS 0x3FBF // disable brown out reset

/*low voltage programming*/ #define LVPEN 0x3FFF // low voltage programming enable #define LVPDIS 0x3F7F // low voltage programming disabled

/*data code protection*/ #define DP 0x3EFF // protect the data code // alternative definitions #define DATPROT 0x3EFF // use DP #define DATUNPROT 0x3FFF // use UNPROTECT

/*code protection*/ #define UNPROTECT 0x3FFF // do not protect the code #define PROTECT 0x03FF // protect the program code /* Code protection for 2K program memory */ #ifdef _16F628 #define PROTECT75 0x17FF /* Protects from 0200h-07ffh */ #define PROTECT50 0x2BFF /* Protects from 0400h-07ffh */ #else /* Code protection for 1K program memory */ #define PROTECT50 0x17FF /* Protects from 0200h-03ffh */ #endif

/*osc configurations*/ #define ER 0x3FFF /* external resistor, CLKOUT on CLKOUT pin, R on CLKIN */ #define ERIO 0x3FFE /* external resistor, IO fn on CLKOUT pin, R on CLKIN

*/ #define INT 0x3FFD /* internal resistor/capacitor, CLKOUT on CLKOUT pin, IO on CLKIN */ #define INTIO 0x3FFC /* internal resistor/capacitor, IO fn on CLKOUT pin, IO on CLKIN */ #define EC 0x3FEF /* external clock in, IO fn on CLKOUT pin, CLKIN on CLKIN */ #define HS 0x3FEE /* high speed crystal */ #define XT 0x3FED /* crystal/resonator */ #define LP 0x3FEC /* low power crystal */
Reply to
NeMeSi

"NeMeSi" ha scritto nel messaggio news:dlva11$l1n$ snipped-for-privacy@nnrp-beta.newsland.it...

Non sono praticissimo di PIC, ma secondo me questo micro non permette l'accesso bit a bit di una porta. Se tu tenti di scrivere un singolo bit in realtà scrivi l'intera porta con risultati inaspettati. Prova ad eseguire le operazioni su una variabile di appoggio che poi carichi sul registro della porta: Esempio per mettere a 0 da RA1 a RA4

CopyPORTA &= ~0x0F; PORTA = CopyPORTA;

j.

Reply to
Regae

Se non e' un problema di software, verifica di non caricare troppo le uscite. Quello che ti succede e' tipico quando, per esempio, metti una resistenza troppo bassa in serie al led. La spiegazione la trovi sui datasheet.

Reply to
Valeria Dal Monte

Questo potrebbe essere ma è il compilatore che dovrebbe fare questo lavoro, quando io scrivo RA1 lui lo compila come "static volatile bit RA1 @ (unsigned)&PORTA*8+1;" che se non erro dovrebbe essere una sorta di maschera che riscrive tutta la porta cambiando solo il bit 1.

Reply to
NeMeSi

"NeMeSi" ha scritto nel messaggio news:dm13sm$o9n$ snipped-for-privacy@nnrp-beta.newsland.it...

QUesta istruzione fa lo shift del bit direttamente sul registro della porta (la moltiplicazione per 8 in realtà è uno shift verso sinistra di 3)

J.

Reply to
Regae

"NeMeSi" ha scritto nel messaggio news:dm13sm$o9n$ snipped-for-privacy@nnrp-beta.newsland.it...

PS. hai visto la mia risposta al post del PIC12F675? Capito l'inghippo?

J.

Reply to
Regae

"Regae" ha scritto nel messaggio news:43845b52$0$16217$ snipped-for-privacy@reader3.news.tin.it...

Forse si ma devo fare una prova...

Reply to
NeMeSi

Appunto ma perchè allora cambia anche tutti gli altri bit??

Reply to
NeMeSi

"NeMeSi" ha scritto nel messaggio news:dlvf0i$p3a$ snipped-for-privacy@nnrp-beta.newsland.it...

[...]

Grazie mille, ora mi ambiento meglio. ^_^

a sostituire tutti quei RA1=0, etc.. con PORTA=0 (che è 00000) e tutti quei RA1=1 con PORTA=30 (che è 11110)

Se non te lo compila perchè PORTA è stata dichiarata char (e il compilatore dovrebbe fare la conversione automatica) Fai la conversione PORTA=((char)0); e Porta=((char)30); Ci ho messo un paio di parentesi per sicurezza;

Facci sapere gli sviluppi!!!

Ciao ciao Gnafu

PS: Oppure usa una variabile di appoggio (non so se si puo fare sui pic)

char appoggio1=(char)0; char appoggio2=(char)30; PORTA=appoggio1; //tutti i delay PORTA=appoggio2;

Reply to
Gnafu

"NeMeSi" ha scritto nel messaggio news:dm1t88$ap5$ snipped-for-privacy@nnrp-beta.newsland.it...

Perché la porta di uscita è fisicamente collegata al registro!

J.

Reply to
Regae

"Regae" ha scritto nel messaggio news:4384e71d$0$16200$ snipped-for-privacy@reader3.news.tin.it...

Continuo ad avere problemi a capire... La stassa prova l'ho fatta con un PIC16f877 e PIC16F876 e il problema non l'ho avuto.. Cambia solo il bit che voglio io e gli altri rimangono invariati.

Reply to
NeMeSi

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.