Gå til innhold

Kan noen kommentere denne enkle koden?


Anbefalte innlegg

Skrevet
int main(void)
{

unsigned char les_bryter;

	DDRA = 0x00;    /* PORTA som inn-port */
	DDRB = 0xFF;    /* PORTB som ut-port */

	while(1) 
	{
		les_bryter = PINA;
		
		switch(les_bryter) 
		{
			case 0xFE: PORTB = 0xF9 ;   /* bryter 1 */
				   break;
			case 0xFD: PORTB = 0xA4;    /* bryter 2 */
				   break;
			case 0xFB: PORTB = 0xB0;    /* bryter 3 */
				   break;
			case 0xF7: PORTB = 0x99;    /* bryter 4 */
				   break;
			case 0xEF: PORTB = 0x92;    /* bryter 5 */
				   break;
			case 0xDF: PORTB = 0x83;    /* bryter 6 */
				   break;
			case 0xBF: PORTB = 0xF8;    /* bryter 7 */
				   break;
			case 0x7F: PORTB = 0X80;    /* bryter 8 */
				   break;

			default: PORTB= 0XCD;
				
		}
    }
}
 

Her er løsningsforslaget, men jeg klarer ikke helt å skjønne hva 0x7F er , og hva 0X80 , de delene der, så kunne noen vær så snill å kmomentere koden, slikt at jeg kan få en forklaring?

 

http://www.nullptr.me/2011/09/13/0xcd-0xdd-understanding-windows-memory-codes-2/#.UxnQjvl5NPU

 

har lest litt av dette, men gir fortsatt ikke mening.

 

Videoannonse
Annonse
Skrevet

Den leser en port (PINA) til variabelen les_bryter.

En port, og en char, består av 8 bit. Med 8 bit kan du telle fra 0 til 255, eller 0 til 0xFF med hexadesimal representasjon.

 

Her er det tydeligvis negativ logikk, dvs en bryter som er av leser høy, en bryter som er leser 0.

Alle brytere av gir da 0xFF på porten.

Verdien 0x7F (binært 0111.1111) betyr at bryter 8 er på.

 

PORTB er en utgang. 0x80 (dvs bit 8 på) sendes ut på porten når bryter 8 er på.

 

Den linken din er overhodet ikke relevant her, er vel bare noe du fant ved å Google hex verdier?

Skrevet

Litt innsats på å tenke selv?

 

"Segment A er koblet til bit 0, segment B er koblet til bit 1 "

Hvilke segmenter er det da som lyser når du har 0xF9?

  • Liker 1
Skrevet

Litt innsats på å tenke selv?

 

"Segment A er koblet til bit 0, segment B er koblet til bit 1 "[/size]

Hvilke segmenter er det da som lyser når du har 0xF9?

Nå ble jeg faktisk usikker ... Beklager , forstod iallfall at FFFF 1001 er F9?

Skrevet

Ja, hvis man legger godviljen til. Du må se forskjellen på hex og binær. "FFFF 1001" gir ingen mening.

 

1111 1001 da? men tallet blir vell ikke 1 da?? må jeg regne om med 2 komponement osv?

Skrevet

1111 1001 er riktig binært.

En byte kan bety flere ting. Det kan være positive og negative verdier, og i såfall må man regne med 2s komplement.

Men her er det I/O porter, og den variable er deklarert som unsigned char. Det er ingen grunn til å dra inn negative verdier og utregninger.

Det eneste du trenger å tenke på her at hver enkelt bit er 0 eller 1, og er koblet til et lys som er av eller på.
Skrevet

 

1111 1001 er riktig binært.

En byte kan bety flere ting. Det kan være positive og negative verdier, og i såfall må man regne med 2s komplement.

Men her er det I/O porter, og den variable er deklarert som unsigned char. Det er ingen grunn til å dra inn negative verdier og utregninger.

Det eneste du trenger å tenke på her at hver enkelt bit er 0 eller 1, og er koblet til et lys som er av eller på.

 

 

okay, så hvordan kan dette si meg at den første bryteren lyser opp 1 tall?

er ikke helt sikker på om jeg skjønner det helt, fordi jeg tenker hele tiden at binære tallet skal være 1 slik at bryter 1 slås på som 1.

 

Nettet er heller ikke særlig til hjelp.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...