Gå til innhold

Kan noen kommentere denne enkle koden?


Anbefalte innlegg

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.

 

Lenke til kommentar
Videoannonse
Annonse

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?

Lenke til kommentar

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?

Lenke til kommentar

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å.
Lenke til kommentar

 

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.

Lenke til kommentar

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å
×
×
  • Opprett ny...