AVR - jak pristoupit k jednotlivym pinum, ne k celemu portu?
Moderátor: Moderátoři
AVR - jak pristoupit k jednotlivym pinum, ne k celemu portu?
Nemuzu nikde najit jak nadefinovat a pristupovat pouze pinove, ne portove k jednotlivym pinum. Jedna se mi o nadefinovani nazvu konkretniho pinu a nasledne k pristupu k nemu pres jeho nazev, ne pres prime nazvy jeho registru. Cteni a zapis celeho portu je v jasny, ale pinove (bitove) se mi na to nedari prijit. Poradi mi nekdo? Prikladam priklad kodu:
#include <avr/io.h>
#define VSTUP PORTB0 //definice nazvu pinu 0 na portu B
#define VYSTUP PORTB1 //definice nazvu pinu 1 na portu B
int main(void)
{
DDB0 = 0; //nastaveni pinu jako vstupni
DDB1 = 1; //nastaveni pinu jako vystupni
while(1)
{
VYSTUP = VSTUP; //zapsani hodnoty vstupu na vystup
}
}
#define A PORTA
#define B PORTB
int main() {
DDRA = 0x00;
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
B = A; //na PORTB se zapise nactena hodnota portu PORTA - to chodi vcetne definic normalne
PORTC = 5; //tento zapis na cely port taky chodi normalne
PORTD3 = 1; //jak ale zapisu napr pouze na pin 3 portu D hodnotu?? Jak se primo pristupuje k tomu samotnemu pinu 3?? Ted tady ani nemotam definici nazvu pinu pomoci #define. Tento zapis nechodi a nevim proc??
}
To nastaveni a nulovani bitu pres makra a pak volani funguje:
#define bsf(port,pin) port |= 1<<pin //nastav bit
#define bcf(port,pin) port &= ~(1<<pin) //nuluj bit
bsf(PORTA,5); //nastavim bit 5 na portu A
bcf(PORTA,3); //nuluji bit 3 na portu A
Ale nepochopil jsem ty makra pro cteni bitu jak uvedl Atlan. Jak ten bit prectu?
https://chiptron.cz - novinky ze světa elektro (Arduino, Raspberry Pi, ESP8266, STM32, ESP32...)
Peťus