Datum: 21.10.2007 17:09
Hallo, ich will gerade eine RS232 Kommunikation mit dem C167 programmieren. Dafür sind ja Pin3.10 und P3.11 vorgesehen. Jetzt habe ich aber das Problem, dass die Interruptfunktionalität nicht funktioniert. Das manuelle Senden funktioniert. Sicherlich habe ich wieder etwas bei der Initialisierung vergessen. Anbei mal der Code. Habt ihr eine Idee, warum die ISR nicht ausgelöst wird???
unsigned int counter = 0; sbit sb_Dir_TX = DP3^10; sbit sb_Pin_TX = P3^10; sbit sb_Dir_RX = DP3^11; void init_RS232(void) { sb_Dir_TX = 1; sb_Pin_TX = 1; sb_Dir_RX = 0; S0BG = 0x0020; // 38400Baud S0TIC = 0x0080; S0RIC = 0x0000; S0CON = 0x8011; S0REN = 1; // receiver enable S0TIE = 1; // enable transmit interrupt S0RIE = 1; // enable receive interrupt } void send_RS232(void) { S0TBUF = 'a'; P2 ^= 0x000f; while(!S0TIR); S0TIR = 0; S0TBUF = 'c'; } void rs232_SendInterrupt(void) interrupt 0x2A { counter++; P2 ^= 0x000f; if (counter <= 12) { while(!S0TIR); S0TIR = 0; S0TBUF = 'c'; } } void rs232_ReceiveInterrupt(void) interrupt 0x2B { P2 ^= 0x000f; //S0RBUF } void main(void) { IEN = 0; // global interrupt disable DP3 |= 0xFFFF; ODP3 = 0x0000; IEN = 1; // global interrupt enable init_RS232(); send_RS232(); while(1); } |
Danke Nobbie
Datum: 21.10.2007 22:10
Hallo Nobbie, Du hast keine interrupt level eingestellt. Also register S0RIC richtig setzten. Grüße Mark,
Datum: 22.10.2007 01:04
Deine Sende-(Interrupt)routine passt auch nicht so richtig: Zum Starten des Sendens reicht es aus dem S0TBUF einen Wert zuzuweisen S0TBUF = 'a'; wenn das Interrupt-Enable-Bit korrekt gesetzt ist, wird das nächste zu sendende Zeichen per Interrupt angefordert Finger weg vom S0TIR ! Nimm mal aus der send_RS232 die While schleife und vor allem das setzen des S0TIR='0' raus analog in der Interruptroutine ! in der Int.Routine reicht es dem S0TBUF einen neuen Wert zuzuweisen. zu was wird P2 mit 0x000F verxordert ? Gruss
Datum: 22.10.2007 08:55
Hallo, das mit dem receive Interrupt habe ich jetzt sauber hinbekommen. Den Transmitinterrupt nehme ich mir jetzt noch einmal vor. danke Nobbie
Datum: 30.10.2007 17:36
he Nobbie ! mich würde deine Lösung interessieren! bei mir funzt das mit den interrupts nicht!
Datum: 31.10.2007 16:52
hallo helmi anbei der code
unsigned char init_RS232(void) { sb_Dir_TX = 1; sb_Pin_TX = 1; sb_Dir_RX = 0; S0BG = 0x0020; // 38400Baud @ 40MHz S0TIC = 0x00C6; S0RIC = 0x0047; S0CON = 0x8011; S0REN = 1; // receiver enable S0TIE = 1; // enable transmit interrupt S0RIE = 1 // enable receive interrupt return F_OK; } void rs232_SendInterrupt(void) interrupt 0x2A { getChar(&ucSendChar); S0TBUF = ucSendChar; } void rs232_ReceiveInterrupt(void) interrupt 0x2B { ucDat = S0RBUF; } |
gruss
Datum: 27.06.2008 17:50
Hallo, kurze Frage: Wie, bzw. wann genau wird der Interrupt 0x2a (=S0TINT) ausgelöst? Wenn ich das im Manual richtig verstehe, ist er gesetzt, bis das letzte Bit des Datenrahmens gesendet wurde. Demnach wird er doch aber auch nur dann gesetzt, wenn man eine Datenübertragung in Gang setzt. Im obigen Quellcode von Nobbie wird diese aber erst durch das Auftreten des Interrupts in gestartet (nämlich mit dem Schreiben eines Wertes in S0TBUF). Bitte korrigiert mich, wenn ich das falsch verstehe. Der obige Code soll ja so funktioniert haben. MfG J_uri
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel