Sida 1 av 1

Förenkla logiska uttryck - hur? [Löst]

Postat: 7 juli 2006, 11:50:38
av oJsan
Bakgrund: Har skrivit en mjukvaru-UART som klockas med 8 x BAUDRATE och samplar alltså varje inkommande bit 8ggr. För att vara säker på att varje bit ÄR 1 eller 0 så sparar jag de tre "mittersta" samplen för varje bit i motsvarande bit i variablerna a, b och c.
Skickar jag 0x53 borde det alltså se ut såhär:
a: 01010011 (sample 3)
b: 01010011 (sample 4)
c: 01010011 (sample 5)

Databehandling:
Om antalet nollor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 0
Om antalet ettor (kolumnvis) är 2 eller 3 blir motsvarande bit i result 1.

Detta har jag löst med följande logiska uttryck, och det fungerar:

Kod: Markera allt

result = (~(a^b^c) & (a|b|c)) | (a&b&c);	//Majority voting process..
Men min fråga är; hur förenklar man detta uttryck?! Eller kan jag helt enkelt lita på att kompilatorn fixar det på effektivast sätt?

Postat: 7 juli 2006, 12:02:31
av Schnegelwerfer
Googla på "Karnaugh-diagram".

Det finns även färdiga kalkylatorer som förenklar uttrycken åt dig.

Postat: 7 juli 2006, 12:55:09
av oJsan
Tack Schnegel! Karnaugh kändes väldigt bekant, men var ska man börja söka då man inte kommer på ordet! =D
Hittade denna sida, och förenklat så blev uttrycket:

Kod: Markera allt

result  = (a&b) | (b&c) | (a&c);

Samma resultat, men mer läsbart! =D

Postat: 7 juli 2006, 13:11:14
av malbeat
men Ojsan, karnaugh höll vi ju på med på digital 1'an :wink:

Postat: 7 juli 2006, 13:23:11
av oJsan
:oops: Haha, ja jag vet, men vad hjälper det då man inte kommer ihåg namnet! =D Men jag kom ju iallafall ihåg en viktig sak: nämligen att det FINNS en metod för att förenkla logiska uttryck! :wink:

Postat: 7 juli 2006, 13:44:50
av malbeat
jo jag skojja bara.. är ju 4 år sen!