Вот мои переменные:
Код: Выделить всё
unsigned char tmp=0; // возможное значение: 0..255 (8 бит)
const unsigned char string_in[20] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14}; //гамма функция
unsigned char index_str=0; //индекс массива гамма функции
Код: Выделить всё
while (1)
{
// Place your code here
if(rx_counter1 != 0) //если еще не все символы, из входного буфера, прочитанные функцией getchar
{
tmp = getchar1(); // tmp = входной символ (уменьшаем на 1 rx_counter1)
putchar1(tmp^string_in[index_str]); // Xor и отправляем на выход
if (index_str == 19) index_str=0;
else index_str++;
};
};
С ПК отправляю массив символов (нажатием кнопки) на UART нашего МК.
Программа берет по одному символу из массива с ПК и делает операцию Xor с каким-то элементом массива string_in (который записан в памяти МК). Если входной массив с ПК больше чем массив string_in, то index_str обнуляется. И данные для операции Xor берутся сначала массива string_in.
После чего возвращает на ПК (по UART) измененный массив символов.
Что нужно добавить в код, чтобы, когда с ПК отправляется новый массив символов, МК сбрасывал в 0 значение моей переменной index_str?
P.S. Попробовал добавить прерывание:
Код: Выделить всё
//Регистр данных USART1 свободен
interrupt [USART1_DRE] void usart1_dr_isr(void)
{
index_str=0;
}Пожалуйста, помогите!!!


