// Навбор функций для работы с часами на микросхеме DS1302. Автор Nord_Air 13.10.2025 void RTC_DS1302_Get_Time ( byte SCLK, byte DAT, byte RST, unsigned int *returned_data); void RTC_DS1302_Set_Time ( byte SCLK, byte DAT, byte RST, byte seconds, byte minutes, byte hours, byte day, byte month, byte weekday, unsigned int year); unsigned char Digital_Read (unsigned char pin_number); void Pin_Mode (unsigned char pin, unsigned char mode); void Digital_Port_Direction (unsigned char pin, bool level); void Digital_Write (unsigned char pin, bool level); #define mask_0 1 #define mask_1 2 #define mask_2 4 #define mask_3 8 #define mask_4 16 #define mask_5 32 #define mask_6 64 #define mask_7 128 void setup(){ Serial.begin(9600); // SCLK DAT RST сек, мин, час, дата, месяц, день недели, год RTC_DS1302_Set_Time ( 44, 42, 46, 0, 37, 18, 13, 10, 4, 2025); } void loop(){ unsigned int data_out[7]={0,}; RTC_DS1302_Get_Time ( 44,42,46, data_out ); // Работоспособность проверялась на Ардуино Мега Serial.print ("Years : "); Serial.println (data_out[6]); Serial.print ("Month : "); Serial.println (data_out[4]); Serial.print ("Day : "); Serial.println (data_out[3]); Serial.print ("hours : "); Serial.println (data_out[2]); Serial.print ("minutes : "); Serial.println (data_out[1]); Serial.print ("seconds : "); Serial.println (data_out[0]); Serial.print ("day num : "); Serial.println (data_out[5]); Serial.println ("--------------- "); delay (15000); } void RTC_DS1302_Get_Time ( byte SCLK, byte DAT, byte RST, unsigned int *returned_data ) { // Для унификации с другими функциями возвращаем массив uint16_t byte data_array[7]={0,}; //В RTC данные в байтовом виде, потому и работаем с модулем в байтовом массиве. const unsigned char timer = 1; signed char i; // Предварительная конфигурация всех пинов. Состояние на выход. // pinMode (SCLK, OUTPUT); // Arduino IDE // pinMode (DAT, OUTPUT); // pinMode (RST, OUTPUT); Pin_Mode (SCLK, OUTPUT); Pin_Mode (DAT, OUTPUT); Pin_Mode (RST, OUTPUT); //digitalWrite (RST, LOW); // Arduino IDE //digitalWrite (SCLK, LOW); Digital_Write (RST, LOW); Digital_Write (SCLK, LOW); unsigned char data = 0xBF; // Пакетное чтение 8 байт. Уже учтен бит определяющий запись. // digitalWrite (RST, HIGH); // ----- CS --- (Включение разрешения на работу с модулем часов) Digital_Write (RST, HIGH); for (i=0; i<8; i++) // { //digitalWrite (SCLK, LOW); // Arduino IDE //digitalWrite (DAT, (data & 1)); //digitalWrite (SCLK, HIGH); Digital_Write (SCLK, LOW); Digital_Write (DAT, (data & 1)); Digital_Write (SCLK, HIGH); data = data >> 1; } // pinMode (DAT, INPUT); // Меняем вывод данных на состояние чтения. Pin_Mode (DAT, INPUT); for (i=0; i < 56; i++) // Цикл чтения 7 байт дайнных { data = 0; //digitalWrite (SCLK, LOW); Digital_Write (SCLK, LOW); for ( unsigned char a=0; a> 1); // Запись ведем с левой части байта, поэтому сдвигаем вправо. if (data) { data_array[i/8] = data_array[i/8] + 128; } // Если в предыдущем цикле ожидания данных был высокий уровень, то в первом бите устанавливаем "1". // digitalWrite (SCLK, HIGH); Digital_Write (SCLK, HIGH); } // digitalWrite (RST, LOW); // ----- CS --- Digital_Write (RST, LOW); for (i=0; i<7; i++) // Правка данных пришедших из регистров часов { data = data_array[i]; // Первая тетрада: старший разряд десятичного числа // Вторая тетрада: младший разряд десятичного числа returned_data[i] = (( data >> 4) * 10) + (data & 0x0F); } returned_data[6] = returned_data[6] + 2000; // Приводим значение года к виду со всеми разрядами. } void RTC_DS1302_Set_Time ( byte SCLK, byte DAT, byte RST, byte seconds, byte minutes, byte hours, byte day, byte month, byte weekday, unsigned int year ) { byte data_array[7]={0,}; data_array[0] = seconds; data_array[1] = minutes; data_array[2] = hours; data_array[3] = day; data_array[4] = month; data_array[5] = weekday; data_array[6] = year; // Предварительная конфигурация всех пинов. Состояние на выход. // pinMode (SCLK, OUTPUT); // Arduino IDE // pinMode (DAT, OUTPUT); // pinMode (RST, OUTPUT); Pin_Mode (SCLK, OUTPUT); Pin_Mode (DAT, OUTPUT); Pin_Mode (RST, OUTPUT); //digitalWrite (RST, LOW); // Arduino IDE //digitalWrite (SCLK, LOW); Digital_Write (RST, LOW); Digital_Write (SCLK, LOW); unsigned int data; data_array[6] = data_array[6] - 2000; // В регистр часов передаем только два младших разряда года. //digitalWrite (RST, HIGH); // ----- CS --- Digital_Write (RST, HIGH); for (int8_t i=-3; i<11; i++) // Общее количество 11. { if (i==(-3)) { data = 0x8E; } // Перед началом записи должна быть снята защита от записи. else if (i==(-2)) { data = 0x00; } // После подачи питания значение бита(WP) не определено. else if (i==(-1)) { data = 0xBE; } // Команда начала пакетной(групповой) записи данных. else { // Первая тетрада регистра: ключевые биты в старшем бите и старший разряд десятичного числа. // Вторая тетрада: младший разряд десятичного числа. data = ((data_array[i] / 10) << 4) + (data_array[i] % 10); } for (uint8_t g=0; g<8; g++) { //digitalWrite (SCLK, LOW); //digitalWrite (DAT, (data & 0x01)); // Маскируем первый бит, значние передается с младшего бита. //digitalWrite (SCLK, HIGH); Digital_Write (SCLK, LOW); Digital_Write (DAT, (data & 1)); Digital_Write (SCLK, HIGH); data = data >> 1; } } // digitalWrite (RST, LOW); // ----- CS --- Digital_Write (RST, LOW); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void Pin_Mode (unsigned char pin, unsigned char mode) { if (mode==1) // OUTPUT { Digital_Port_Direction ( pin, 1); } if (mode==2) // INPUT_PULLUP { Digital_Port_Direction ( pin, 0); Digital_Write (pin, 1); } if (mode==0) // INPUT { Digital_Port_Direction ( pin, 0); } } void Digital_Port_Direction (unsigned char pin, bool level) { #ifdef _AVR_IOM328P_H_ // ------- ATMega328p ---------- if (pin==0) { if (level) {(DDRD |= mask_0); } else { (DDRD &= ~mask_0); } } else if (pin==1) { if (level) {(DDRD |= mask_1); } else { (DDRD &= ~mask_1); } } else if (pin==2) { if (level) {(DDRD |= mask_2); } else { (DDRD &= ~mask_2); } } else if (pin==3) { if (level) {(DDRD |= mask_3); } else { (DDRD &= ~mask_3); } } else if (pin==4) { if (level) {(DDRD |= mask_4); } else { (DDRD &= ~mask_4); } } else if (pin==5) { if (level) {(DDRD |= mask_5); } else { (DDRD &= ~mask_5); } } else if (pin==6) { if (level) {(DDRD |= mask_6); } else { (DDRD &= ~mask_6); } } else if (pin==7) { if (level) {(DDRD |= mask_7); } else { (DDRD &= ~mask_7); } } else if (pin==8) { if (level) {(DDRB |= mask_0); } else { (DDRB &= ~mask_0); } } else if (pin==9) { if (level) {(DDRB |= mask_1); } else { (DDRB &= ~mask_1); } } else if (pin==10){ if (level) {(DDRB |= mask_2); } else { (DDRB &= ~mask_2); } } else if (pin==11){ if (level) {(DDRB |= mask_3); } else { (DDRB &= ~mask_3); } } else if (pin==12){ if (level) {(DDRB |= mask_4); } else { (DDRB &= ~mask_4); } } else if (pin==13){ if (level) {(DDRB |= mask_5); } else { (DDRB &= ~mask_5); } } else if (pin==14){ if (level) {(DDRC |= mask_0); } else { (DDRC &= ~mask_0); } } else if (pin==15){ if (level) {(DDRC |= mask_1); } else { (DDRC &= ~mask_1); } } else if (pin==16){ if (level) {(DDRC |= mask_2); } else { (DDRC &= ~mask_2); } } else if (pin==17){ if (level) {(DDRC |= mask_3); } else { (DDRC &= ~mask_3); } } else if (pin==18){ if (level) {(DDRC |= mask_4); } else { (DDRC &= ~mask_4); } } else if (pin==19){ if (level) {(DDRC |= mask_5); } else { (DDRC &= ~mask_5); } } else {return;} #endif #ifdef _AVR_IOM2560_H_ // ------- ATMeg2560 ---------- if (pin==0) { if (level) { (DDRE |= mask_0); } else { (DDRE &= ~mask_0); } } else if (pin==1) { if (level) { (DDRE |= mask_1); } else { (DDRE &= ~mask_1); } } else if (pin==2) { if (level) { (DDRE |= mask_4); } else { (DDRE &= ~mask_4); } } else if (pin==3) { if (level) { (DDRE |= mask_5); } else { (DDRE &= ~mask_5); } } else if (pin==4) { if (level) { (DDRG |= mask_5); } else { (DDRG &= ~mask_5); } } else if (pin==5) { if (level) { (DDRE |= mask_3); } else { (DDRE &= ~mask_3); } } else if (pin==6) { if (level) { (DDRH |= mask_3); } else { (DDRH &= ~mask_3); } } else if (pin==7) { if (level) { (DDRH |= mask_4); } else { (DDRH &= ~mask_4); } } else if (pin==8) { if (level) { (DDRH |= mask_5); } else { (DDRH &= ~mask_5); } } else if (pin==9) { if (level) { (DDRH |= mask_6); } else { (DDRH &= ~mask_6); } } else if (pin==10){ if (level) { (DDRB |= mask_4); } else { (DDRB &= ~mask_4); } } else if (pin==11){ if (level) { (DDRB |= mask_5); } else { (DDRB &= ~mask_5); } } else if (pin==12){ if (level) { (DDRB |= mask_6); } else { (DDRB &= ~mask_6); } } else if (pin==13){ if (level) { (DDRB |= mask_7); } else { (DDRB &= ~mask_7); } } else if (pin==14){ if (level) { (DDRJ |= mask_1); } else { (DDRJ &= ~mask_1); } } else if (pin==15){ if (level) { (DDRJ |= mask_0); } else { (DDRJ &= ~mask_0); } } else if (pin==16){ if (level) { (DDRH |= mask_1); } else { (DDRH &= ~mask_1); } } else if (pin==17){ if (level) { (DDRH |= mask_0); } else { (DDRH &= ~mask_0); } } else if (pin==18){ if (level) { (DDRD |= mask_3); } else { (DDRD &= ~mask_3); } } else if (pin==19){ if (level) { (DDRD |= mask_2); } else { (DDRD &= ~mask_2); } } else if (pin==20){ if (level) { (DDRD |= mask_1); } else { (DDRD &= ~mask_1); } } else if (pin==21){ if (level) { (DDRD |= mask_0); } else { (DDRD &= ~mask_0); } } else if (pin==22){ if (level) { (DDRA |= mask_0); } else { (DDRA &= ~mask_0); } } else if (pin==23){ if (level) { (DDRA |= mask_1); } else { (DDRA &= ~mask_1); } } else if (pin==24){ if (level) { (DDRA |= mask_2); } else { (DDRA &= ~mask_2); } } else if (pin==25){ if (level) { (DDRA |= mask_3); } else { (DDRA &= ~mask_3); } } else if (pin==26){ if (level) { (DDRA |= mask_4); } else { (DDRA &= ~mask_4); } } else if (pin==27){ if (level) { (DDRA |= mask_5); } else { (DDRA &= ~mask_5); } } else if (pin==28){ if (level) { (DDRA |= mask_6); } else { (DDRA &= ~mask_6); } } else if (pin==29){ if (level) { (DDRA |= mask_7); } else { (DDRA &= ~mask_7); } } else if (pin==30){ if (level) { (DDRC |= mask_7); } else { (DDRC &= ~mask_7); } } else if (pin==31){ if (level) { (DDRC |= mask_6); } else { (DDRC &= ~mask_6); } } else if (pin==32){ if (level) { (DDRC |= mask_5); } else { (DDRC &= ~mask_5); } } else if (pin==33){ if (level) { (DDRC |= mask_4); } else { (DDRC &= ~mask_4); } } else if (pin==34){ if (level) { (DDRC |= mask_3); } else { (DDRC &= ~mask_3); } } else if (pin==35){ if (level) { (DDRC |= mask_2); } else { (DDRC &= ~mask_2); } } else if (pin==36){ if (level) { (DDRC |= mask_1); } else { (DDRC &= ~mask_1); } } else if (pin==37){ if (level) { (DDRC |= mask_0); } else { (DDRC &= ~mask_0); } } else if (pin==38){ if (level) { (DDRD |= mask_7); } else { (DDRD &= ~mask_7); } } else if (pin==39){ if (level) { (DDRG |= mask_2); } else { (DDRG &= ~mask_2); } } else if (pin==40){ if (level) { (DDRG |= mask_1); } else { (DDRG &= ~mask_1); } } else if (pin==41){ if (level) { (DDRG |= mask_0); } else { (DDRG &= ~mask_0); } } else if (pin==42){ if (level) { (DDRL |= mask_7); } else { (DDRL &= ~mask_7); } } else if (pin==43){ if (level) { (DDRL |= mask_6); } else { (DDRL &= ~mask_6); } } else if (pin==44){ if (level) { (DDRL |= mask_5); } else { (DDRL &= ~mask_5); } } else if (pin==45){ if (level) { (DDRL |= mask_4); } else { (DDRL &= ~mask_4); } } else if (pin==46){ if (level) { (DDRL |= mask_3); } else { (DDRL &= ~mask_3); } } else if (pin==47){ if (level) { (DDRL |= mask_2); } else { (DDRL &= ~mask_2); } } else if (pin==48){ if (level) { (DDRL |= mask_1); } else { (DDRL &= ~mask_1); } } else if (pin==49){ if (level) { (DDRL |= mask_0); } else { (DDRL &= ~mask_0); } } else if (pin==50){ if (level) { (DDRB |= mask_3); } else { (DDRB &= ~mask_3); } } else if (pin==51){ if (level) { (DDRB |= mask_2); } else { (DDRB &= ~mask_2); } } else if (pin==52){ if (level) { (DDRB |= mask_1); } else { (DDRB &= ~mask_1); } } else if (pin==53){ if (level) { (DDRB |= mask_0);} else { (DDRB &= ~mask_0); } } else {return;} #endif return; } void Digital_Write (unsigned char pin, bool level) { #ifdef _AVR_IOM328P_H_ // ------- ATMega328p ---------- if (pin==0) { if (level) {(PORTD |= mask_0); } else { (PORTD &= ~mask_0); } } else if (pin==1) { if (level) {(PORTD |= mask_1); } else { (PORTD &= ~mask_1); } } else if (pin==2) { if (level) {(PORTD |= mask_2); } else { (PORTD &= ~mask_2); } } else if (pin==3) { if (level) {(PORTD |= mask_3); } else { (PORTD &= ~mask_3); } } else if (pin==4) { if (level) {(PORTD |= mask_4); } else { (PORTD &= ~mask_4); } } else if (pin==5) { if (level) {(PORTD |= mask_5); } else { (PORTD &= ~mask_5); } } else if (pin==6) { if (level) {(PORTD |= mask_6); } else { (PORTD &= ~mask_6); } } else if (pin==7) { if (level) {(PORTD |= mask_7); } else { (PORTD &= ~mask_7); } } else if (pin==8) { if (level) {(PORTB |= mask_0); } else { (PORTB &= ~mask_0); } } else if (pin==9) { if (level) {(PORTB |= mask_1); } else { (PORTB &= ~mask_1); } } else if (pin==10){ if (level) {(PORTB |= mask_2); } else { (PORTB &= ~mask_2); } } else if (pin==11){ if (level) {(PORTB |= mask_3); } else { (PORTB &= ~mask_3); } } else if (pin==12){ if (level) {(PORTB |= mask_4); } else { (PORTB &= ~mask_4); } } else if (pin==13){ if (level) {(PORTB |= mask_5); } else { (PORTB &= ~mask_5); } } else if (pin==14){ if (level) {(PORTC |= mask_0); } else { (PORTC &= ~mask_0); } } else if (pin==15){ if (level) {(PORTC |= mask_1); } else { (PORTC &= ~mask_1); } } else if (pin==16){ if (level) {(PORTC |= mask_2); } else { (PORTC &= ~mask_2); } } else if (pin==17){ if (level) {(PORTC |= mask_3); } else { (PORTC &= ~mask_3); } } else if (pin==18){ if (level) {(PORTC |= mask_4); } else { (PORTC &= ~mask_4); } } else if (pin==19){ if (level) {(PORTC |= mask_5); } else { (PORTC &= ~mask_5); } } else {return;} #endif #ifdef _AVR_IOM2560_H_ // ------- ATMeg2560 ---------- if (pin==0) { if (level) {(PORTE |= mask_0); } else { (PORTE &= ~mask_0); } } else if (pin==1) { if (level) {(PORTE |= mask_1); } else { (PORTE &= ~mask_1); } } else if (pin==2) { if (level) {(PORTE |= mask_4); } else { (PORTE &= ~mask_4); } } else if (pin==3) { if (level) {(PORTE |= mask_5); } else { (PORTE &= ~mask_5); } } else if (pin==4) { if (level) {(PORTG |= mask_5); } else { (PORTG &= ~mask_5); } } else if (pin==5) { if (level) {(PORTE |= mask_3); } else { (PORTE &= ~mask_3); } } else if (pin==6) { if (level) {(PORTH |= mask_3); } else { (PORTH &= ~mask_3); } } else if (pin==7) { if (level) {(PORTH |= mask_4); } else { (PORTH &= ~mask_4); } } else if (pin==8) { if (level) {(PORTH |= mask_5); } else { (PORTH &= ~mask_5); } } else if (pin==9) { if (level) {(PORTH |= mask_6); } else { (PORTH &= ~mask_6); } } else if (pin==10){ if (level) {(PORTB |= mask_4); } else { (PORTB &= ~mask_4); } } else if (pin==11){ if (level) {(PORTB |= mask_5); } else { (PORTB &= ~mask_5); } } else if (pin==12){ if (level) {(PORTB |= mask_6); } else { (PORTB &= ~mask_6); } } else if (pin==13){ if (level) {(PORTB |= mask_7); } else { (PORTB &= ~mask_7); } } else if (pin==14){ if (level) {(PORTJ |= mask_1); } else { (PORTJ &= ~mask_1); } } else if (pin==15){ if (level) {(PORTJ |= mask_0); } else { (PORTJ &= ~mask_0); } } else if (pin==16){ if (level) {(PORTH |= mask_1); } else { (PORTH &= ~mask_1); } } else if (pin==17){ if (level) {(PORTH |= mask_0); } else { (PORTH &= ~mask_0); } } else if (pin==18){ if (level) {(PORTD |= mask_3); } else { (PORTD &= ~mask_3); } } else if (pin==19){ if (level) {(PORTD |= mask_2); } else { (PORTD &= ~mask_2); } } else if (pin==20){ if (level) {(PORTD |= mask_1); } else { (PORTD &= ~mask_1); } } else if (pin==21){ if (level) {(PORTD |= mask_0); } else { (PORTD &= ~mask_0); } } else if (pin==22){ if (level) {(PORTA |= mask_0); } else { (PORTA &= ~mask_0); } } else if (pin==23){ if (level) {(PORTA |= mask_1); } else { (PORTA &= ~mask_1); } } else if (pin==24){ if (level) {(PORTA |= mask_2); } else { (PORTA &= ~mask_2); } } else if (pin==25){ if (level) {(PORTA |= mask_3); } else { (PORTA &= ~mask_3); } } else if (pin==26){ if (level) {(PORTA |= mask_4); } else { (PORTA &= ~mask_4); } } else if (pin==27){ if (level) {(PORTA |= mask_5); } else { (PORTA &= ~mask_5); } } else if (pin==28){ if (level) {(PORTA |= mask_6); } else { (PORTA &= ~mask_6); } } else if (pin==29){ if (level) {(PORTA |= mask_7); } else { (PORTA &= ~mask_7); } } else if (pin==30){ if (level) {(PORTC |= mask_7); } else { (PORTC &= ~mask_7); } } else if (pin==31){ if (level) {(PORTC |= mask_6); } else { (PORTC &= ~mask_6); } } else if (pin==32){ if (level) {(PORTC |= mask_5); } else { (PORTC &= ~mask_5); } } else if (pin==33){ if (level) {(PORTC |= mask_4); } else { (PORTC &= ~mask_4); } } else if (pin==34){ if (level) {(PORTC |= mask_3); } else { (PORTC &= ~mask_3); } } else if (pin==35){ if (level) {(PORTC |= mask_2); } else { (PORTC &= ~mask_2); } } else if (pin==36){ if (level) {(PORTC |= mask_1); } else { (PORTC &= ~mask_1); } } else if (pin==37){ if (level) {(PORTC |= mask_0); } else { (PORTC &= ~mask_0); } } else if (pin==38){ if (level) {(PORTD |= mask_7); } else { (PORTD &= ~mask_7); } } else if (pin==39){ if (level) {(PORTG |= mask_2); } else { (PORTG &= ~mask_2); } } else if (pin==40){ if (level) {(PORTG |= mask_1); } else { (PORTG &= ~mask_1); } } else if (pin==41){ if (level) {(PORTG |= mask_0); } else { (PORTG &= ~mask_0); } } else if (pin==42){ if (level) {(PORTL |= mask_7); } else { (PORTL &= ~mask_7); } } else if (pin==43){ if (level) {(PORTL |= mask_6); } else { (PORTL &= ~mask_6); } } else if (pin==44){ if (level) {(PORTL |= mask_5); } else { (PORTL &= ~mask_5); } } else if (pin==45){ if (level) {(PORTL |= mask_4); } else { (PORTL &= ~mask_4); } } else if (pin==46){ if (level) {(PORTL |= mask_3); } else { (PORTL &= ~mask_3); } } else if (pin==47){ if (level) {(PORTL |= mask_2); } else { (PORTL &= ~mask_2); } } else if (pin==48){ if (level) {(PORTL |= mask_1); } else { (PORTL &= ~mask_1); } } else if (pin==49){ if (level) {(PORTL |= mask_0); } else { (PORTL &= ~mask_0); } } else if (pin==50){ if (level) {(PORTB |= mask_3); } else { (PORTB &= ~mask_3); } } else if (pin==51){ if (level) {(PORTB |= mask_2); } else { (PORTB &= ~mask_2); } } else if (pin==52){ if (level) {(PORTB |= mask_1); } else { (PORTB &= ~mask_1); } } else if (pin==53){ if (level) {(PORTB |= mask_0); } else { (PORTB &= ~mask_0); } } else {return;} #endif return; } unsigned char Digital_Read (unsigned char pin_number) { #ifdef _AVR_IOM328P_H_ // ------- ATMega328p ---------- switch (pin_number) { case 0: return ((PIND >> 0)&1); case 1: return ((PIND >> 1)&1); case 2: return ((PIND >> 2)&1); case 3: return ((PIND >> 3)&1); case 4: return ((PIND >> 4)&1); case 5: return ((PIND >> 5)&1); case 6: return ((PIND >> 6)&1); case 7: return ((PIND >> 7)&1); case 8: return ((PINB >> 0)&1); case 9: return ((PINB >> 1)&1); case 10: return ((PINB >> 2)&1); case 11: return ((PINB >> 3)&1); case 12: return ((PINB >> 4)&1); case 13: return ((PINB >> 5)&1); case 14: return ((PINC >> 0)&1); case 15: return ((PINC >> 1)&1); case 16: return ((PINC >> 2)&1); case 17: return ((PINC >> 3)&1); case 18: return ((PINC >> 4)&1); case 19: return ((PINC >> 5)&1); default: break; } #endif #ifdef _AVR_IOM2560_H_ // ------- ATMeg2560 ---------- switch (pin_number) { case 0: return ((PINE >> 0)&1); case 1: return ((PINE >> 1)&1); case 2: return ((PINE >> 4)&1); case 3: return ((PINE >> 5)&1); case 4: return ((PING >> 5)&1); case 5: return ((PINE >> 3)&1); case 6: return ((PINH >> 3)&1); case 7: return ((PINH >> 4)&1); case 8: return ((PINH >> 5)&1); case 9: return ((PINH >> 6)&1); case 10: return ((PINB >> 4)&1); case 11: return ((PINB >> 5)&1); case 12: return ((PINB >> 6)&1); case 13: return ((PINB >> 7)&1); case 14: return ((PINJ >> 1)&1); case 15: return ((PINJ >> 0)&1); case 16: return ((PINH >> 1)&1); case 17: return ((PINH >> 0)&1); case 18: return ((PIND >> 3)&1); case 19: return ((PIND >> 2)&1); case 20: return ((PIND >> 1)&1); case 21: return ((PIND >> 0)&1); case 22: return ((PINA >> 0)&1); case 23: return ((PINA >> 1)&1); case 24: return ((PINA >> 2)&1); case 25: return ((PINA >> 3)&1); case 26: return ((PINA >> 4)&1); case 27: return ((PINA >> 5)&1); case 28: return ((PINA >> 6)&1); case 29: return ((PINA >> 7)&1); case 30: return ((PINC >> 7)&1); case 31: return ((PINC >> 6)&1); case 32: return ((PINC >> 5)&1); case 33: return ((PINC >> 4)&1); case 34: return ((PINC >> 3)&1); case 35: return ((PINC >> 2)&1); case 36: return ((PINC >> 1)&1); case 37: return ((PINC >> 0)&1); case 38: return ((PIND >> 7)&1); case 39: return ((PING >> 2)&1); case 40: return ((PING >> 1)&1); case 41: return ((PING >> 0)&1); case 42: return ((PINL >> 7)&1); case 43: return ((PINL >> 6)&1); case 44: return ((PINL >> 5)&1); case 45: return ((PINL >> 4)&1); case 46: return ((PINL >> 3)&1); case 47: return ((PINL >> 2)&1); case 48: return ((PINL >> 1)&1); case 49: return ((PINL >> 0)&1); case 50: return ((PINB >> 3)&1); case 51: return ((PINL >> 2)&1); case 52: return ((PINL >> 1)&1); case 53: return ((PINL >> 0)&1); default: break; } #endif return(0); }