[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Доброго времени суток всем.
Делал в 98-м монитор RS485-го ( RS485 <--> RS485 + RS232 ) на AT89 2051. Программа писана на Fr. ProV. Тут приспичило повторить. Платка есть, контроллер есть, нет Франклина. Но зато есть Keil! После правки исходника зашил контроллер - как нужно не работает. путём последователного "усечения" выяснилось, что не работают порты. Точнее, биты порта Р1 не устанавливаются и не сбрасываются. В итоге дошел до "маразма" - кнопочка и светодиодики 8-).
Что хотелось получить : bdata unsigned char Led_var = 0; sbit Red_Led = P1^4; bit flag_switch = 0; bit flag_switch = 0; bit Red_Led = 2; Злостный Анонимус Сергей (озадаченный)
E-mail:
info@telesys.ru
/*========================== versions #1 ====*/
#include
#include
sbit bit_Led4 = Led_var^4;
sbit bit_Led5 = Led_var^5;
sbit Green_Led = P1^5;
/*========================= Int 0 interrupt ====*/
int_int0() interrupt 0 using 1 {
EA = 0;
if (Red_Led){
bit_Led4 = 0; bit_Led5 = 1;
}
else
if (Green_Led){
bit_Led5 = 0; bit_Led4 = 1;
}
else bit_Led4 = 1;
P1 = Led_var;
flag_switch = 1;
EA = 1;
}
Прерывание по срезу. Контроллер его отрабатывает, но состояние на ножках порта не изменяется 8-(((... Зато работает вот такая вот конструкция:
/*============================= version #2 ======*/
#include
#include
bit Green_Led = 3;
/*========================= Int 0 interrupt ====*/
int_int0() interrupt 0 using 1 {
EA = 0;
if (Red_Led){
Red_Led = 0; Green_Led =1;
P1_4 = 0; P1_5 = 1;
}
else
if (Green_Led){
Green_Led = 0; Red_Led = 1;
P1_5 = 0; P1_4 = 1;
}
else P1_4 = 1;
flag_switch = 1;
EA = 1;
}
После замены записи из регистра в порт на явное указание установки(сброса) бит в порту девайс (монитор RS485) ожил. Ну работает и ладно... Но это ведь как то криво получается. Может я чего то не так делаю? Хотя листинги тех примеров, которые привел выше, сравнивал. В Keil-ом дебагере... Ни чего криминального не обнаружил...
Ответы