CodeVision AVR в вопросах и ответах
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А как же вы собираетесь сравнивать байтовую переменную с 264?
Docendo discimus
Re: CodeVision AVR в вопросах и ответах
pyzhman писал(а):А как же вы собираетесь сравнивать байтовую переменную с 264?
ну cnt у меня как char , а вы говорите как int обявить до этого всегда было char и работало просто значение увеличиваю чуть понадо билось вот и спрашиваю нечего не меняется от этого что если как int объявлю?
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
char имеет размерность в байт, т.е. может иметь значения от 0 до 255 при беззнаковом определении. Переменная типа int может принимать значения от 0 до 65535. И где число 264, с которым вы собираетесь сравнивать переменную типа char? 
Поменяется только размер программы, и то не намного.
Поменяется только размер программы, и то не намного.
Docendo discimus
Re: CodeVision AVR в вопросах и ответах
спасибо огромное за разьяснение, всё сделал вроде работает надо в железе теперь проверить 
Re: CodeVision AVR в вопросах и ответах
люди добрые подскажите мне как удалить символ предыдущий в буфере. есть функция вот такая
тоесть как попало в буфер 8 символов выполняется код.
так собственно вопрос как удалить предыдущий символ как бы введённый не правильно, как будет выглядеть код.
нужно что то типа отсупить на 1 байт или символ назад и обнулить его что то типа такого Buf-1=Buf=0;
но как будет правильно?
Код: Выделить всё
unsigned int Buf=0;
void buff() {
if (Buf<8) {
} else {
код
}
}
тоесть как попало в буфер 8 символов выполняется код.
так собственно вопрос как удалить предыдущий символ как бы введённый не правильно, как будет выглядеть код.
нужно что то типа отсупить на 1 байт или символ назад и обнулить его что то типа такого Buf-1=Buf=0;
но как будет правильно?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
приведите всю функцию, ничего непонятно. где сам буфер то?
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
ibiza11 писал(а):приведите всю функцию, ничего непонятно. где сам буфер то?
в сам буфер а имено Buf заношу символы 12345678 например если мне какойто из них не понравился при нажатии например на кнопку подключенную к контроллеру удалялся с Buf предыдущий символ 1 символ раз нажал стёрлось ещё нажал ещё стёрлось и так хоть все хоть 8 стереть.
Код: Выделить всё
unsigned char tmpBuf[100];
tmpBuf[Buf]=заносится символ; Buf++;Re: CodeVision AVR в вопросах и ответах
может так
так виснет при нажатии на кнопку
Код: Выделить всё
tmpBuf[Buf]=0xFF; Buf--;так виснет при нажатии на кнопку
Код: Выделить всё
void enter(){
if (PINC & (1<<0)){
tmpBuf[Buf]=0xFF; Buf--;
}}
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Что значит "удалить" ? Сдаётся мне, нужно просто записать туда конец строки, а это нулевой байт.kotriks писал(а):может такКод: Выделить всё
tmpBuf[Buf]=0xFF; Buf--;
Код: Выделить всё
tmpBuf[Buf]=0x00; Buf--;- uni
- Встал на лапы
- Сообщения: 137
- Зарегистрирован: Пт дек 07, 2007 11:17:40
- Откуда: г. Екатеринбург
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Я делаю это так:
Код: Выделить всё
case VK_BACK: {
tmp = strlen( CommandString );
// Удаляем предыдущий символ, если буфер командной строки не пуст.
if ( tmp > 0 ) {
CConsole::PutChar( VK_BACK );
CConsole::ClearForward(1);
CommandString[ --tmp ] = 0;
}
break;
}
default: {
tmp = strlen( CommandString );
if ( tmp >= sizeof( CommandString ) - 1 ) return;
// Выводим символ на экран.
CConsole::PutChar( ( uint8_t ) Key );
CommandString[ tmp++ ] = ( uint8_t ) Key;
CommandString[ tmp ] = 0;
}Россия навсегда!
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
всем доброго времени суток. помогите написать маленькую программу на си, в код вижен есть программка для мигания светдиодами в разных последовательностях, так же могу поставить количество повторений но не получается это дело запустить при нажатии кнопки . если я пишу программку мигания и подключаю питание к контролеру все работает а я хочу что бы мигания начинались после нажатия на кнопку но когда вставляю в код работы кнопки мигания то в лучшем случае у меня светодиоды просто светятся(((помогите написать код для включения мигания светодиодов от кнопки контролер тини 13 portb.0 включен на вход
- Вложения
-
- Text file.txt
- (1.01 КБ) 139 скачиваний
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Что значит "удалить" ? Сдаётся мне, нужно просто записать туда конец строки, а это нулевой байт.kotriks писал(а):может такКод: Выделить всё
tmpBuf[Buf]=0xFF; Buf--;Код: Выделить всё
tmpBuf[Buf]=0x00; Buf--;
Ничего не пойму как удалить (((
ничерта не работает
Код: Выделить всё
void del(){
if (PINC & (1<<0)){
tmpBuf[Buf]=0xFF; --Buf;
}}
если делать так
Код: Выделить всё
void del(){
if (PINC & (1<<0)){
Buf=0;
}}
то удаляются полностью все символы попавшие в буфер, но это логично так и должно быть он обнуляется весь а вот как удалить крайний не нужный при 1 нажатии.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
2pashaumnov:
Пара замечаний: переменная цикла меняется от 1 до 5. Вполне можно объявить ее как байтовую величину и не тратить память на интеджер. Второе - delay_ms(2000) даст задержку в две секунды.
Код: Выделить всё
PORTB=0x01; // !!!!!!! подтягиваем к питанию, чтобы не бултыхалось в воздухе
DDRB=0x3E;
{ int p;
while(!PINB.0); // ждем отпускания
while(PINB.0); // ждем нажатия
for (p=1; p<=5; p++)
{
PORTB.1=1; // устанавливаем 1 на выходе 0
delay_ms(2000); // Ждем 200 мс
PORTB.1=0; // устанавливаем 1 на выходе 1
delay_ms(200); // Ждем 200 мс
PORTB.2=1; // устанавливаем 0 на выходе 0
Пара замечаний: переменная цикла меняется от 1 до 5. Вполне можно объявить ее как байтовую величину и не тратить память на интеджер. Второе - delay_ms(2000) даст задержку в две секунды.
Docendo discimus
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
а не могли бы вы мне разъяснить вот эти строчки, что они конкретно выполняют и можно ли было их написать по другому???
{ int p;
while(!PINB.0); // ждем отпускания (тут ведь отрицание прописано восклицательным знаком??или я ошибаюсь???
while(PINB.0); // ждем нажатия
for (p=1; p<=5; p++)
а если вот так написать??
например while(PINB.0=1); // это отслеживает положении кнопки и если там 1 то работает дальше , если ноль то стоит и ждет?? так?
while(PINB.0=0);
{ int p;
while(!PINB.0); // ждем отпускания (тут ведь отрицание прописано восклицательным знаком??или я ошибаюсь???
while(PINB.0); // ждем нажатия
for (p=1; p<=5; p++)
а если вот так написать??
например while(PINB.0=1); // это отслеживает положении кнопки и если там 1 то работает дальше , если ноль то стоит и ждет?? так?
while(PINB.0=0);
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Если уж писать так, то так:
Восклицательный знак - да, отрицание. А вашей записи (один знак равенства) идет не сравнение, а присваивание.
PS. Я порой как собака - всё понимаю, а сказать не могу.
Код: Выделить всё
while(PINB.0== 0); // ждем отпускания
while(PINB.0== 1); // ждем нажатия
Восклицательный знак - да, отрицание. А вашей записи (один знак равенства) идет не сравнение, а присваивание.
PS. Я порой как собака - всё понимаю, а сказать не могу.
Docendo discimus
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
а что нужно добавить в эту программу для того что бы при нажатии на кнопку на выходе появилась единица и оставалась там до следующего нажатия на кнопку . кнопка без фиксации.
Код: Выделить всё
PORTB=0x01; // !!!!!!! подтягиваем к питанию, чтобы не бултыхалось в воздухе
DDRB=0x3E;
{ int p;
while(!PINB.0); // ждем отпускания
while(PINB.0); // ждем нажатия
for (p=1; p<=5; p++)
{
PORTB.1=1; // устанавливаем 1 на выходе 0
delay_ms(2000); // Ждем 200 мс
PORTB.1=0; // устанавливаем 1 на выходе 1
delay_ms(200); // Ждем 200 мс
PORTB.2=1; // устанавливаем 0 на выходе 0- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вы как-то несуразно высказались. Вот смотрите, делаем по-вашему: вначале на выходе 0. Нажали кнопку. Появилась 1. Что-то там сделали и приходим опять на опрос кнопки (1 по-прежнему висит). Нажимаем кнопку (т.е. опять сначала) и выставляем 1. В чем суть?
Вообще, скажите чего вы хотите. Иначе, так и будете бултыхаться сами и время отнимать у людей.
Вообще, скажите чего вы хотите. Иначе, так и будете бултыхаться сами и время отнимать у людей.
Docendo discimus
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
хорошо)) и так мне нужно что бы программа работала таким образом нажали кнопку на выходе загорелся светдиод( в моем случае начинаеся мигание по очереди) отпустили кнопку . работа прекратилась. это вы мне помогли разобраться что да как сделать. теперь мне надо сюда же добавить следующее при нажатии на кнопку и отпускании ее светодиоды продолжают мигать . при повторном нажатии на эту же кнопку светодиоды гаснут. спасибо за терпение .надеюсь понятно обьяснил
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
1. Делаем то-то(ждем нажатия на кнопку, например)
2. Делаем то-то.
и т.д. Думаю, многим желающим вам помочь это поспособствует.
Docendo discimus
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
ок))
1 . нажимаем на кнопку и отпускаем ее (кнопка без фиксации)
2. начинает работать программа бегущих огоньков которая повторяется 5 раз по кругу и останавливается.
3. если програма бегущие огоньки еще не закончила свою работу и в это время еще раз нажать кнопку (которая без фиксации) то работа программы огоньков прерывается .
как то так.
1 . нажимаем на кнопку и отпускаем ее (кнопка без фиксации)
2. начинает работать программа бегущих огоньков которая повторяется 5 раз по кругу и останавливается.
3. если програма бегущие огоньки еще не закончила свою работу и в это время еще раз нажать кнопку (которая без фиксации) то работа программы огоньков прерывается .
как то так.