FreshMan писал(а):Аlex писал(а):Не инвертируется, а сбрасывается 2-ой бит.
а не проще ли написать PORTD.2=0 ?
вы похоже тему перепутали... это только CVAVR такой формат понимает, поэтому не проще.А тут вопросы по С насколько мне память не изменяет
FreshMan писал(а):Аlex писал(а):Не инвертируется, а сбрасывается 2-ой бит.
а не проще ли написать PORTD.2=0 ?
Код: Выделить всё
void sensor_write_1_0(int bit)
{
if (bit==0)
{
DDRB=DDRB | (1<<DQ); // запись 0
_delay_us(100); // задержка 100мкс
DDRB=DDRB & 0xFE; // запись 1
}
else if (bit==1)
{
DDRB=DDRB | (1<<DQ); // запись 0
_delay_us(1); // задержка 1мкс
DDRB=DDRB & 0xFE; // запись 1
_delay_us(100); // задержка 100мкс
}
}
// sensor_read_1_0 - функция чтения 1/0
unsigned int sensor_read_1_0(void)
{
// объявление переменных
char bit; // данные DQ
DDRB=DDRB | (1<<DQ); // запись 0
_delay_us(1); // задержка 1мкс
DDRB=DDRB & 0xFE; // запись 1
bit=PINB & 0x1; // чтение состояния линии DQ
_delay_us(100); // задержка 100мкс
if (bit==0x1)
{
return 1; // возвращение 1
}
else if (bit==0x0)
{
return 0; // возвращение 0
}
}if(bit == 1){
} else if(bit == 0){
}
фантастика! и какое же третье значение может иметь бит?Arlleex писал(а):if(bit == 1){
} else if(bit == 0){
}
Да, может быть и другое значение (в моем устройстве).
принципиально - нет, т.к. вы не соблюдаете требования стндарта по временным интервалам. кроме того, тип int для результата функции чтения бита - великоват, хватило бы и unsigned char. кроме того, эти функции надо бы сделать static, а то плохо будет оптимизироваться функция чтения байта. ну и для записи то же самое.Arlleex писал(а):Ну хорошоубедили
Я просто опасался того случая, когда переменная может содержать все что угодно
Но, собственно говоря, сам процесс организации чтения/записи битов верен?
это не правда: язык Си строго стандартизирован. не ведитесь на поводу у создателей "си-подобных" языков или "диалектов языка", учите язык Си. заодно изучайте аппаратуру микроконтроллеров. ну и развивайте логическое мышление - оно в программировании главноеsvetl1928 писал(а):Что мне нужно учить, если язык си для каждого компилятора разный? Я не вижу единого базового.
Rusja2008 писал(а):Ребята, подскажите, с какой целью глобальные переменные определяют как static, что это дает и в каких случаях так надо делать, а в каких нет?
Код: Выделить всё
#include <avr/io.h>
#include <avr/pgmspace.h>
//определяю массив в оперативке
const unsigned char my_word [] = {'a','b','c'};
//отправляю на дисплей
int main( void )
{
LSDSend(my_word);
while(1)
return 0;
}
Код: Выделить всё
const char my_word [] PROGMEM = {'a','b','c'};
AaNnDdRrEeYy писал(а):я хочу разместить переменную my_word во флеш памяти делаю такКод: Выделить всё
const char my_word [] PROGMEM = {'a','b','c'};
подскажите пожалуйста как ее потом достать от туда, для того чтобы передать в метод LCDSend();
Код: Выделить всё
PROGMEM char my_word[] = {'a', 'b', 'c'};
LCDSend(pgm_read_byte((void*)&my_word[1])); // выводим 'b'Код: Выделить всё
my_word+1Rusja2008 писал(а):Доброе время суток.
Ребята, подскажите, с какой целью глобальные переменные определяют как static, что это дает и в каких случаях так надо делать, а в каких нет?
P.S. может уже такой вопрос поднимался, случай че не серчайте. Спасибо.
IfoR писал(а):А зачем здесь явно преобразовывать указатель к нетипизированному виду? И почему не записать тогда так:?Код: Выделить всё
my_word+1
Код: Выделить всё
//посылаем команду или байт данных в часы
void write(unsigned char cmd)
{
DDR_RTC |= (1<<E) | (1<<SCLK)|(1<<IO);//устанавливаем на выход
PORT_RTC |= (1<<E);//СE=1
_delay_us(4);
for(unsigned char i=0; i<8; i++)//передаем биты
{
if((cmd&(1<<i)) == 1<<i)
{
PORT_RTC |= (1<<IO);
}
else
{
PORT_RTC &= ~(1<<IO);
}
PORT_RTC |= (1<<SCLK);//устанавливаем синхроимпульс и по фронту бит записывается в часы
_delay_us(1);
PORT_RTC &= ~(1<<IO);//сбрасываем IO и SCLK
PORT_RTC &= ~(1<<SCLK);
}
}
Bigcrash писал(а):Если есть желание и свободные 5 минут перевести это в асм, прям вообще шикарно будет.
Jack_A писал(а):Включив соображалку, несложно найти соответствие между операторами Си и реализующими их кусками кода.