AVR - jak pristoupit k jednotlivym pinum, ne k celemu portu?

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
petus
Příspěvky: 594
Registrován: 12 led 2009, 01:00
Bydliště: Pelhřimov
Kontaktovat uživatele:

#16 Příspěvek od petus »

Když používáš CodeVision a jeho kompilátor, tak umí přistupovat bitově, ale ve výsledku to dělá stejně jako AVRStudio, tj. že maskuje porty.
Pokud něco chcete a neodpovídám,pošlete SZ :)
https://chiptron.cz - novinky ze světa elektro (Arduino, Raspberry Pi, ESP8266, STM32, ESP32...)
Peťus

Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 02:00
Bydliště: Kadaň
Kontaktovat uživatele:

#17 Příspěvek od Jenda_KL »

MiroH píše:Pretoze AVR nemaju na porty bitovy pristup.
SBI PORTB,PB0
CBI PORTB,PB0
toto je jaký přístup?

Uživatelský avatar
sqad
Příspěvky: 148
Registrován: 23 zář 2007, 02:00

#18 Příspěvek od sqad »

Sprav to takto:

Kód: Vybrat vše

typedef union
{
	unsigned char Byte;
	struct
	{
		unsigned int bit_0 :1;
		unsigned int bit_1 :1;
		unsigned int bit_2 :1;
		unsigned int bit_3 :1;
		unsigned int bit_4 :1;
		unsigned int bit_5 :1;
		unsigned int bit_6 :1;
		unsigned int bit_7 :1;
	}Bits;
}ByteField;


volatile ByteField pokus;


void main(void)
{
	pokus.Byte = 255;
	pokus.Bits.bit_6 = 0;
}
alebo takto:

Kód: Vybrat vše

unsigned char bit[8];

void main(void)
{
	unsigned char k, m=1;

	for(k=0;k<=7;k++)
	{
		bit[k] = m;
		m <<= 1;
	}

	PORTB |= bit[5];
	PORTB &= ~bit[5];
}
Výsledok logického predpokladu je niekedy nezmysel... bacha na to! :)

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“