www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik kann man die In-Port-Register nicht abfragen?


Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey leute,

probiere gerade eine pin abfrage zu machen mit 430F2274.
mit diesem Code:

#include "msp430x22x4.h"

volatile unsigned int i;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1DIR |= 0x01;

  for (;;)
  {
   if(P1IN & BIT2){
     P1OUT ^= 0x01;              // Toggle P1.0 using exclusive-OR

     i = 50000;                  // Delay
     do (i--);
     while (i != 0);
   }
  }
}
----------------------------
das problem ist auch wenn ich den taster am Port1-Pin2 drücke, passiert 
nichts.

Ich benutze den Code Composer E version 2. Hier gibt es eine 
Registerleiste. das komische ist, wenn ich den taster drücke, wird der 
Flag des Ports für Pin2 gesetzt , aber im P1IN register verändert sich 
nichts.

habe ich da was übersehen? darf ich den P1IN-register nicht abfragen?

hm.......

MFG max

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

lass mal den Debugger weg, übersetz das Programm nativ ohne Debugcode 
und lass es dann am Prozessor laufen.
Außerdem solltest du die P1DIR und P1SEL für beide verwendeten Ports 
richtig einstellen, bei solchen Fehlern nicht dran glauben, dass die 
defaultmäßig stimmen, schon gar nicht im Debugmode.

P1IN ist das Port input register, da steht der momentane Zustand der 
PortEINGÄNGE. Deine Abfrage ist also korrekt.

Grüße,

Peter

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Peter.  naja habe das jetzt aufm port 2 probiert und es geht.
kennst du dich mit CCE v2 aus, wie übersetze ich da progrramm ohne 
Debugcode?

MFG Max

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim MSP430 gibt es meines Wissens, normalerweise keinen separaten 
Debug-Code bzw. Monitor Software, da er ja per JTAG "gedebuggt" wird und 
das Zeug in Hardware vorhanden ist.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann Dein code überhaupt funktionieren?
do (i--);
while (i != 0);

sollte wohl eher heissen:
do
{
  i--;
} while (i != 0);

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn es nur eine Anweisung im do ist, dann ist das zulässig.

Mit CCE kenn ich mich nicht sehr gut aus, aber man kann auf jeden Fall 
von Debug auf Release umstellen.

Project -> Properies -> C/C++ Build

hier kann man normal zwischen Debug und Release umstellen, wenn es das 
Profil Release noch nicht gibt, musst du eins anlegen. Dazu muss man bei 
den Optionen im unteren Fensterteil alles auf höchste Optimierung 
stellen und nicht auswählen, dass irgenein Debugcode integriert wird, so 
genau kenn ich mich damit aber auch nicht aus. Dann kann man einfach ein 
neues Profil speichern.

Ich verwende immer den mspgcc Compiler und übertrage meine Programme 
dann im BSL-Modus in den Controller. Zusammen mit Programmers Notepad 
und einem kleinen Batchfile zum Abarbeiten der Compilierungsschritte 
geht das sehr gut.
Aber der CCE Compiler ist wohl auch nicht schlecht, vor allem ist nur 
die Codesequenz auf 8kB begrenzt, Data darf beliebig groß sein, man darf 
also auch für 32kB irgendwelche Schriftarten und Bilder für Displays 
usw. in arrays legen, ohne dass der Compiler aussteigt. IAR lässt das 
nicht zu, da ist alles zusammen auf 4 kB begrenzt.


Grüße,

Peter

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jop peter , danke nochmal, habe die einstellung gefunden für release.

PS: kleines updatechen (nur zu info)--> mit dem neuen  CCE_v3 kann man 
bis zu 16kB code programmieren ;)

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> do (i--);
> while (i != 0);

Ok, wusste nicht, dass dies zulässig ist. Aber ich würde es auf jeden 
Fall anders schreiben. Schnell ändert man mal was am Code und dann geht 
gar nichts mehr, wenn man sowas dann übersieht.

Habe nochmal nachgedacht. Wenn Dein Code mit Port 2 funktioniert, dann 
hast Du bei Port 1 vielleicht noch ein Peripheriemodul aktiviert, dass 
das IO 0 oder 2 belegt und die Kontrolle darüber hat. Vielleicht ist es 
sogar der BSL, keine Ahnung.
Am besten zu Beginn Deines Programmes auch noch P1SEL wie gewünscht 
setzen. Und "P1DIR |= 0x01;" ersetzen durch "P1DIR = 0x01;", damit es zu 
Beginn mal einen bekannter Wert zugewiesen wird.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.