Добрый день господа форумчане.
У меня возникла проблема - очень надеюсь на вашу помощь.
Пишу программу под PIC16F876 на PICC от HT-PICC.
В программе захотел сделать функцию антидребезг.
unsigned char do_antiripple_pin(volatile struct data_unit * data , char time_conversion);
В эту функцию передаю время проверки на дребезг и
указатель на структуру в которой содержиться иформация о ножке процессора.
volatile struct data_unit
{
volatile unsigned char pin_addres; // Адрес пина на цоколевке процессора.
unsigned char time_to_end; // Показывает сколько времени до конца преобразования
unsigned char temp_pin_value; // Сохраняет временное значение на меняющимся пине проца.
unsigned char changing_data; // Переменная с которой прграмма работает как с ножкой проца
unsigned char diferences_counter; // Счетчик несовпадений пина и значения переменой за интервал
};
Проблема с полем pin_addres - это у меня просто имя пина ( допустим RA0), я объявил глобальный экземпляр структуры volatile struct data_unit button_data = {0,0,1,1,0};потом в main(); присвоил полю pin_addres значение RA0
button_data.pin_addres = RA0;
ниже вызываю функцию do_antiripple_pin(&button_data,100);
и надеюсь что у меня в функцию передасться значение с ножки порта, причем не просто значение
а мгновенное, так как я везде где можно поставил volatile.
Но этого не происходит. Программа как один раз зафиксировала в памяти значение
button_data.pin_addres = RA0;
так больше его не меняет, хотя значение на ножке меняется (это я вижу через IDC2).
Выкладываю программу , там в листинге более понятно, чем я тут объясняю.
Программма как следует не работает, но если закоментировать стр 31, и раскоментировать стр 92
тогда все работает нормально. Нормально так же все работает если передавать в функцию просто
назвние ножки порта.
Но вот почему не работает как мне надо??? (Т.е в том виде в котором выложил!)
Помогите пожалуйста разобраться.