RS232-communicatie

V

vaibhav_sinha

Guest
Hoi.
Ik heb deze code voor de RS232-receiver met behulp van 8-N-1-protocol.Maar de code is niet gedraagt zoals verwacht.Kan iemand ga je via de code en debuggen?

library IEEE;
gebruik ieee.std_logic_1164.all;
entiteit ontvangen
poort (opnieuw: in bit;
RX: in bit;
Aan: de bit_vector (7 downto 0);
clk: in bit);
einde ontvangt;
architectuur boog van ontvangen
signaal tellen: integer bereik 0 tot 8000;
type staat (stationair, start, stop, een, twee, drie, vier, vijf, zes, zeven, acht);
signaal pr_state: stand;
signaal nx_state: stand;
seinvlag: bit;
beginnen
proces (clk, RX)
beginnen
indien reset ='1 ', dan
vlag <='0 ';
end if;
indien pr_state = stationair en rx ='0 ', dan
vlag <='1 ';
end if;
einde proces;
proces (vlag, pr_state, reset)
beginnen
indien reset ='1 ', dan
nx_state <= idle;
end if;
geval is pr_state
bij stationair toerental => als flag ='0 ', dan
nx_state <= idle;
anders
nx_state <= start;
end if;
wanneer start => nx_state <= een;
wanneer een => nx_state <= twee;
outp (7) <= rx;

wanneer twee => nx_state <= drie;
outp (6) <= rx;
wanneer drie => nx_state <= vier;
outp (5) <= rx;
toen vier =>
nx_state <= vijf jaar;
outp (4) <= rx;
wanneer vijf =>
nx_state <= zes;
Aan (3) <= rx;
toen zes =>
nx_state <= zeven;
outp (2) <= rx;
toen zeven =>
nx_state <= acht;
outp (1) <= rx;
toen acht =>
nx_state <= stop;
outp (0) <= rx;
wanneer stoppen =>
nx_state <= idle;
einde zaak;
einde proces;proces (reset clk)
beginnen
if (reset ='1 '), dan
count <= 0;
pr_state <= idle;
anders
if (clk'EVENT en clk ='1 '), dan
als count = 0 dan
pr_state <= nx_state;
indien pr_state = start vervolgens
count <= 7812;
elsif pr_state = stop dan
count <= 0;
elsif pr_state / = stationair dan
count <= 5208;
end if;
anders
count <= count-1;
end if;
end if;
end if;
einde proces;
einde boog;In deze code, wanneer er een nieuwe byte te worden ontvangen, hebben we opnieuw eerst.En de vlag wordt beweerd wanneer beginnen bits wordt gedetecteerd.

De klok gebruikt is 50MHz en baudrate is 9600.
Daarom heb ik gebruik gemaakt van een vertraging van 50000000/9600 = 5208 klok cycli.
Voor de start bit, de vertraging is 7812 te bereiken het centrum van de bits.

 

Welcome to EDABoard.com

Sponsor

Back
Top