[an error occurred while processing this directive] [an error occurred while processing this directive]
Keil C51 & bit's
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено з_а_С 12 января 2002 г. 12:26

Доброго времени суток всем.

Делал в 98-м монитор RS485-го ( RS485 <--> RS485 + RS232 ) на AT89 2051. Программа писана на Fr. ProV. Тут приспичило повторить. Платка есть, контроллер есть, нет Франклина. Но зато есть Keil! После правки исходника зашил контроллер - как нужно не работает. путём последователного "усечения" выяснилось, что не работают порты. Точнее, биты порта Р1 не устанавливаются и не сбрасываются. В итоге дошел до "маразма" - кнопочка и светодиодики 8-).

Что хотелось получить :
/*========================== versions #1 ====*/
#include
#include

bdata unsigned char Led_var = 0;
sbit bit_Led4 = Led_var^4;
sbit bit_Led5 = Led_var^5;

sbit Red_Led = P1^4;
sbit Green_Led = P1^5;

bit flag_switch = 0;
/*========================= 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 flag_switch = 0;

bit Red_Led = 2;
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-ом дебагере... Ни чего криминального не обнаружил...

Злостный Анонимус Сергей (озадаченный)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru