Hey Hallo mensen

Ik probeer om met een PIC16F690 een Uart programma (C) te schrijven. (Poging om me zelf aan te leren)
nu heb ik een stukje code geschreven die na een paar seconde de letter A verstuurt naar mijn laptop.
Nu is de volgende stap de A versturen als naar mijn laptop als ik eerst een andere letter naar de uC gestuurd heb. Nu loop ik vast op dit punt ik en weet niet waar het fout gaat
Kan iemand mij uitlegen of een stukje code geven hoe ik het moet aan pakken.

(mijn werkende A Stuur code hieronder)


void SendUART(unsigned char dataValue)
{
     TXREG = dataValue; //Start transmission
}

//-------------------------------------------------------------

void main(void){
     unsigned char Reading1, Reading2;
     TRISB = 0xF0; //TRISB<7:0> = 11110000, PORTB<7:4> input, PORTB<3:0> output
     PORTB = 0; //Clear default state of PORTB to 0
     TRISA = 0xFF; //TRISA<7:0> = 11111111, PORTB<7:0> input
     SetupUART(); //Initialize UART Module
	
	while (1) {
			Reading1 = 'A';		
			SendUART(Reading1); //Transmit CH0 reading
			delay(500);
	}	//End While
}	//End Main

[Bericht gewijzigd door Henry S. op (1%)]

Eigenlijk moet je voor het ontvangen van karakters in je µC een interrupt routine maken die aangeroepen wordt door de UART als deze een karakter heeft ontvangen. In die routine lees je dan het receive register van de UART uit en plaats je die waarde in een variabele.

Ik ben even wezen speuren en dit is volgens mij wat je bedoelde.


void interrupt () {
  if (RCIF) {          // test the interrupt for uart rx
    rxchar = Usart_Read();  //
    rxarray[i] = rxchar;
    i++;
    // ******************************************************
    // Only select one of the following statements
    if (rxchar == 36) {  // select this if looking for a terminating character
    //if (i == n) (         // select this if looking for a number of characters
      flag = 1;
      } // end if (rxchar == "$")
    } // end  if (PIR1.RCIF)
  } // end interrupt

Yup, dat lijkt er aardig op. Maar je met ook niet vergeten de betreffende interrupt aan te zetten. ;)

Ik ben er mee aan het spelen maar ik heb het idee dat er gewoon niks gebeurt?? misschien een interrupt die niet ge trickert wordt of zo ????

ik heb eigenlijk geen idee

Heb je de interrupt wel aangezet? (PIE1.RCIE bit)

ja staat aan

TRISB = 0b11000000; 		//PORTB<7:6> input, PORTB<5:0> output
    PORTB = 0; 				//Clear default state of PORTB to 0
    TRISA = 0b11001111; 		//TRISA<7:0> = 11111111, PORTB<7:0> input
	TRISC = 0b00000000; 		//PORTC<:0> output
     
    SPBRGH = 1;
    SPBRG = 25; 			//9600 bps
    TXSTA = 0b00100100; 	//8-bit, Transmission enabled, High Speed
    RCSTA = 0b10010000; 	//Disable Reception, Enable UART module
    BAUDCTL = 0; 			//8-bit, Auto Baud disabled

	GIE = 1;
 	PEIE = 1;
 	RCIE = 1; //enable interrupt.

Op 16 april 2014 14:38:16 schreef Shinoo:
ja staat aan

RCSTA = 0b10010000; //Disable Reception, Enable UART module

Ehm, je moet natuurlijk wel de reception enablen! ;)

Maar dat is gewoon het commentaar dat fout is, 0b10010000 is gewoon goed.

Tjah sorry, dat wist ik verder niet. Ik heb nog nooit met PIC's gewerkt. ;)