[an error occurred while processing this directive]
Чисто конкретно приемник RS232C (+). Нужна помощь ...
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено Виноградов Алексей 16 июля 2002 г. 19:21

Написал простой приемник для RS232C. Прием начинается с отрицательного перепада на RXD, после чего запускается счетчик. При определенных его состояниях читаются биты с линии и помещаются на выход Q7 .. Q0. Синхроимпульсы идут в 8 раз чаще, чем биты в порт.
На практике выходит вот что. При нужных состояниях счетчика биты Q7 .. Q0 действительно правильно устанавливаются, но в следующем же такте ... сбрасываются ! Почему ? Вот мой код, гонял на симуляторе.
Спасибо.

SUBDESIGN simple_da_5
(
rxd, clk, clear : INPUT;
load, q[7..0] : OUTPUT;
)
VARIABLE
ss : machine with states (s0, s1);
count [6..0] : dffe;

BEGIN
count [].clrn = clear;
count [].clk = clk;

ss.clk = clk;
ss.reset = !clear;

case ss is
when s0 =>
load = gnd; %Áàéò åùå íå ïðèíÿò%
count [].d = 0; %Ñ÷åò÷èê íå ñ÷èòàåò !!!%
if !rxd then ss = s1;
end if;

when s1 =>
case count [].q is
when 12 => q [0] = rxd; count [].d = count [].q + 1;
when 20 => q [1] = rxd; count [].d = count [].q + 1;
when 28 => q [2] = rxd; count [].d = count [].q + 1;
when 36 => q [3] = rxd; count [].d = count [].q + 1;
when 44 => q [4] = rxd; count [].d = count [].q + 1;
when 52 => q [5] = rxd; count [].d = count [].q + 1;
when 60 => q [6] = rxd; count [].d = count [].q + 1;
when 68 => q [7] = rxd; count [].d = count [].q + 1;
when 76 => load = vcc; ss = s0;
when others => count [].d = count [].q + 1;
end case;

end case;
END;


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

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


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

E-mail: info@telesys.ru