2016-05-15 12 views
-2

Ich soll einen Mux mit einem Dallas 8051-Chip machen. p1.0, p1.1 und p1.2 sind Eingaben. P1.3 ist die Freigabeleitung, und die Ausgänge sind P2.0 bis P2.3. Alle Ausgänge funktionieren gut während der Fehlersuche, außer wenn alle Eingänge Null sind und enable eins ist. (Nur Null sollte in der Ausgabe in der Keil-Debugger-Ansicht aktiviert sein, aber das ist nicht der Fall).Zusammenbau Null Fehler - Switch-Anweisung

#include<reg51.h> 

sbit input0 = p1^0; 
sbit input1 = p1^1; 
sbit input2 = p1^2; 
sbit enable = p1^3; 
sbit output0 = p2^0; 
sbit output1= p2^1; 
sbit output2 = p2^2; 
sbit output3 = p2^3; 
sbit output4 = p2^4; 
sbit output4 = p2^5; 
sbit output6 = p2^6; 
sbit output7 = p2^7; 

void main (void) { 
    P2 = 0x00; 

    if (enable==1) 
    { 
     P1&=0x07; 
     switch(P1) 

     { 
      case 1: output1=1; break; 
      case 2: output2=1; break; 
      case 3: output3=1; break; 
      case 4: output4=1; break; 
      case 5: output5=1; break; 
      case 6: output6=1; break; 
      case 7: output7=1; break; 
      default: output0 =1; break; 
     } 

    } 

    else {P2&=0x07;} 

} 

Antwort

2


Sie fragen, warum die arbeiten nicht, wenn alle Eingänge gleich Null sind und ermöglichen eins ist. Es tut mir leid, ich kann keinen Grund für dieses Verhalten in Ihrem Code sehen, aber ich habe einige Fragen und Vorschläge.

Wo stoppen Sie Ihren Debugger, um die Ausgabe zu lesen? Sind Sie sicher, dass die Anweisung, die output0 setzen soll, schon einmal ausgeführt wurde?

Was ist der Grund für die P2 & = 0x07; im sonst Teil?

Was möchten Sie mit dem P1 tun? & = 0x07; vor dem Wechsel?
Wenn Sie die Bits 4..7 maskieren möchten, wäre es besser, dies direkt in der switch-Anweisung zu tun. Was Sie jetzt tun, hängt von dem Signal in den Eingängen auf Bits 0.3 von P1 ab. Wenn einer von ihnen 0 ist, wird eine 0 auf dieses Bit von P1 geschrieben.
Die Ports des 8051 können bidirektional verwendet werden. Wenn Sie eine 1 schreiben, wird der Pin nur durch einen schwachen Widerstand auf 1 gesetzt. Aber wenn Sie eine 0 schreiben, wird sie von einem Ausgangstransistor, der mehrere mA treiben kann, auf 0 gesetzt. Die 0 wird den Pin des 8051 zu einer Ausgabe zwingen.

Deshalb schlage ich vor

P1&=0x07; 
switch(P1) 

mit

switch(P1 & 0x07) 

Mit freundlichen Grüßen und viel Glück zu ersetzen.

Helmut

+0

Dies tatsächlich behoben den Fehler, danke. Was ist der Grund für die P2 &=0x07; im else Teil? Das war eigentlich ein Tippfehler. P2 sollte auf 0x00 eingestellt sein. – Goblinette