> aliens6
Вот появились еще вопросики.
Это хорошо, но старайся точней формулировать вопросы и расскажи как ТЫ пытался их решить. где встал в тупик.
> aliens6
1.как на одну ногу послать байт?(возможно ли такое без всяких протоколов)
лучше по протоколам подсказаным выше, а без протокола бессмыслено - протокол это описание того как устройство примет передаваемую информацию, протокол может быть и своим, не стандартным.
Если же информация не принимается чем либо, то посылать что-то не имеет смысла.
пример:
вывести на "ногу" PB4 значение переменной temp типа unsigned char, первым выводится бит_0
code text
char ctr = 0; // переменная счетчик
for (ctr; ctr< 8; ctr++) {
// пока ctr не превышает 7 делать код до };
PORTB.4 = (temp >> ctr);
// сдвинуть temp в право на ctr разрядов
// и бит_0 результата сдвига вывести на ножку PB4
delay_ms(10);
// пауза 10 мС - или столько сколько нужно
// приемнику чтоб надежно считать бит.
};
Если нужно вывести бит_7 первым то:
PORTB.4 = (temp >> (7 - ctr));
// сдвинуть temp в право на (7 - ctr) разрядов
можно былоб вместо:
for(;;){
};
применить
while( ){
};
как впримере ниже.
> Guest
Можно конечно и тупо по таймеру выставлят в порт регистр перед этим его сдвинув.
нет, наверно тупо не надо
могут пострадать не виновные! сидящие на других пинах этого порта.
> aliens6
2.как сделать задержку 0.012 мс в CodeVision?
Это задача 05 курса, далее:
либо help CodeVisionAVR
либо:
- учти что милисек это: ms
- а микросекунды: us
- 0.012 мс = 12 us
Реальную длительность паузы в МК можно проверить в VMLAB
> aliens6
3.Надо сделать такой вывод в порт, чтобы включался сначала
0 бит, потом 0и1, далее 0,1 и 2 и т.д.
Сдвиг не подходит. Помогите.
Сдвиг подходит, но не сдвиг порта.
Еще раз прочитай курс, задачу 01
и мои ответы на твои вопросы 3-4 стр. назад.
если "включался" == становился "1" то:
code text
char ctr = 0; // переменная счетчик
PORTx = 0; // все нули = все выключены
while(ctr < 8) {
// пока ctr не превышает 7 делать код до };
delay_ms(100); // пауза 100 мС
PORTx ^= (1 << ctr);
// инвертировать бит с номером ctr
// в порте (в регистре) PORTx
// инвертировать значит: 1 -> 0 а 0 -> 1
ctr++;
// инкрементировать == увеличить на 1
//значение переменной ctr
};
если "включался" == становился "0" то в начале PORTx = 1;
можно былоб вместо:
while( ){
};
применить
for(;;){
};
как впримере выше.
=======
Не забудь о правильном объявлении используемых переменных и о заголовочных файлах .h
=======
Еще раз: точней формулируй вопросы, найди время и проштудируй задачи курса!
Используй поиск виндоус по папке где сохранил курс и по словам в файлах