Myp писал(а):поднимаю вобщем заново вопрос
есть вот такой код
У вас приведение типа к int
(int)MSS
а в ветвлении
switch (MSS) //проверка заголовка
{
case 'L':
используются символы.
Наверно логичней к символьному типу приводить
(char)
Технический форум по робототехнике.
Myp писал(а):поднимаю вобщем заново вопрос
есть вот такой код
Myp писал(а):как вобще в протеусе делать отладку?
как мне заставить пошагово выполнять программу?
ато я жму step into и совершенно ничего не меняется
MSS = resived >> 2;
mssint = (int)MSS;
avr123.nm.ru писал(а):выше написал уже.
========
А что не в "микроконтроллерах" обсуждение ?
Может там продолжить ?
char resived;
char MSS, LSS;
int mss, lss;
void priem(void) //процедура приёма и обработки строки
{
char *end = 'X'; // зачем так!???!!! 'X' = 0x58, уже потенциально опасное место!
// а если это буффер - то почему не массив?
resived = *gets(end, 3); // мне не понятно...
MSS = resived >> 2; // сдвиги не буду комментировать...
mss = (int)MSS; // а толку? в См нет типа данных строка!!! char - это уже число! [0 - 0xFF]
LSS = resived << 1;
lss = (int)LSS - 4; // опять...
switch (MSS) //проверка заголовка (кстати по стандарту свитч работает с int'ом (16 бит))
{
case 'L': //если заголовок L (если MSS == 0x4C)
PORTB.1 = lss; // устанавливаем или сбрасываем бит порта
break;
case 'R': //если заголовок R (если MSS == 0x52)
PORTB.2 = lss;
break;
case 'i': //тож самое, к этой ножке прицепляем светодиод, для красоты
PORTB.3 = lss; // 'i' = 0x69
break;
}
MSS = 0;
}
Myp писал(а):хм
Ну мы же принимаем текстовые данные по уарту?
Myp писал(а):принимаем например строку R20X
// зачем так!???!!! 'X' = 0x58, уже потенциально опасное место
// а если это буффер - то почему не массив?
resived = *gets(end, 3); // мне не понятно...
inputs, using getchar, the character string str terminated by the new line character.
The new line character will be replaced with 0.
The maximum length of the string is len. If len characters were read without encountering the new line character, then the string is terminated with 0 and the function ends.
The function returns a pointer to str.
mss = (int)MSS; // а толку? в См нет типа данных строка!!! char - это уже число! [0 - 0xFF]
avr123.nm.ru писал(а):Myp писал(а):хм
Ну мы же принимаем текстовые данные по уарту?
Все передаются числа.Myp писал(а):принимаем например строку R20X
Она у вас помещается в строковую переменную ?
Или как в задаче /z5.htm в буфер содержащий отдельные числа в порядке поступления в USART ?
почему опасное? я таково незнаю. объясните плиз
char buffer[10]; // реально нужно только 3+1 байт (3 значащих и терминатор)
void myfunc(void)
{
char val = 0;
gets(buffer, 3); // по RS232 передаем только направление, и значение (3 символа, без 0 в конце)
if (buffer[0]=='R')
{
// включаем движок вправо
sscanf(&buffer[1], "%i", &val); // в val теперь будет число переданное после буквы
// далее уже чето колдуем с val
//***
}
else if (buffer[0]=='L')
{
// включаем движок влево
sscanf(&buffer[1], "%i", &val); // в val теперь будет число переданное после буквы
//***
}
}