PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 18f1320 USART sendet aber empfängt nicht



stalky13
19.06.2007, 21:48
Hi leute,

Ich beschäftige mich seit kurzem mit pics und versuche gerade die kommunikation zwischen rechner und pic zum laufen zu kriegen. zum testen hab ich mir ne kleine schaltung auf ner lochrasterplatiene aufgebaut mit nem max232 und nem 18f1320. wenn ich mit meinem pic daten sende dann kommen die beim rechner auch an aber wenn ich mit meinem rechner daten sende dann kommen die bei meinem pic ned an. direkt an meinem RXD pin von meinem pic hab ich ne led zur kontrolle und die is auch fleissig am blinken wenn ich daten empfangen sollte. selbst wenn ich von meinem PIC TXD und RXD direkt mit einem draht verbinde empfange ich nix 8-[ . Deswegen denke ich das es eigendlich nur an meiner software liegen kann... oder? ich programmiere in c und verwende C18 meinen PIC takte ich mit 10 MHz. Ich zerbrech mir schon seit tagen den kopf was ist an meinem code falsch? RXD und TXD sind gebrückt aber trotzdem passiert nix.

/** I N C L U D E S ************************************************** ********/
#include <p18cxxx.h>
#include "delays.h" // für die Warteschleife
#include "usart.h" // für RS232


/** Configuration ************************************************** ******/
#pragma config OSC = HS //CPU= 10MHz x 4 = 40MHz
#pragma config PWRT = OFF //Power UP Timer
#pragma config BOR = OFF //Brown Out Reset
#pragma config WDT = OFF //Watchdog Timer
#pragma config LVP = OFF //Low Voltage ICSP


/** D E C L A R A T I O N S **************************************************/

#pragma udata gpr0
unsigned char out;
unsigned char in;


/** M A I N **************************************************/
#pragma code

void main(void)
{
LATA = 0x00; //0 in Register A schreiben
LATB = 0x00; //0 in Register B schreiben
TRISA = 0b11111100;
TRISB = 0b00010010;

OpenUSART( USART_TX_INT_OFF & //USART Initialisieren
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,64 ); //9600 Baud


while(1)
{

out = 52;
putcUSART(out);
Delay100TCYx(50);

if DataRdyUSART()
{
in = getcUSART();
if (in == 52)
LATAbits.LATA0 = !LATAbits.LATA0;
}
Delay10KTCYx(500);
}
CloseUSART();
}

stalky13
20.06.2007, 19:06
Ich scheine auch irgendwie probleme damit zu haben ein portregister auszulesen... wenn ich z.B. RB4 im register TRISB bit 4 auf 1 setzte um RB4 als eingang zu definieren und an RB4 spannung anlege dann tut sich nix

das ist meine testroutiene an meinem PIC sin RB1 und RB4 gebrückt und eigendlich müsste die LED an RA0 blinken. aber da passiert nix.

LATA = 0x00; //0 in Register A schreiben
LATB = 0x00; //0 in Register B schreiben
TRISA = 0b11111100;
TRISB = 0b11111101;

while(1)
{
Delay10KTCYx(500);
LATBbits.LATB1 = !LATBbits.LATB1;
LATAbits.LATA1 = LATBbits.LATB4;
}

eigendlich müsste der pic doch ja ins register LATB die zustände der eingänge eintragen oder muss ich die irgendwie anders abfragen? kennt nicht jemand n tutorial fur C18 ich hab bei google nämlich nix gefunden.
Ich wäre euch für hilfe sehr dankbar :) weil mein projekt nurnoch an der kommunikation zwischen PIC --> PC hängt.