Seriova komunikace X Keil simulator
Petr Reznicek
Bdaem@seznam.cz
Sobota Prosinec 11 20:00:25 CET 2004
Preji dobry den,
narazil jsem na jeden problem, ktery po 3 dnech stale nejsem schopem vyresit. Jde o seriovou komunikaci, kterou se snazim odsimulovat v Keilu. V realu na mikroprocesoru se to chova spravne, ale v simulaci je neco spatne. Procesor je DS89c450 od fi. Dallas Semi..
Program se pokusim prilozit nebo ho najdete na sweb.cz/dozo/new.c. Jde o to, ze kdyz se pokusim o simulaci v keilu,tak v procedure serial0 v radce 30 s instrukci buffer[write_pointer] = SBUF0; mi do promenne buffer ulozi 0x00, at jiz jsem v SBUF0 mel cokoliv. Viz dva predchozi radky 29,28. A uz opravdu netusim proc..
Nenapadne to nekoho z vas?
Komunikaci chci vlepit do jineho sveho programu, ale pokud mi to neulozi prichozi znaky, tak jej muzu upgradovat jen z tezka...
Vim, ze jsou i rutinky typu _getkey, getchar, ale tem sem se snazil vyhnout.
Díky za rady Petr
____________________________________________________________
http://www.bezpecnyinternet.cz
http://ad.seznam.cz/clickthru?spotId=80833
------------- další část ---------------
/********************************************************************
* *
* CCDreader *
* *
* Petr Reznicek *
********************************************************************/
#include <reg420.h>
#include <stdio.h>
#include <string.h>
/*-------------------------------------------------------------------
* Vars Definice bran
*-------------------------------------------------------------------*/
#define buffer_length 31
unsigned char buffer[buffer_length+1];
unsigned char read_pointer = 0;
unsigned char write_pointer = 0;
/* Seriova linka 0 */
void serial0 (void) interrupt 4
{
if (RI_0 == 1)
{
// buffer[write_pointer] = 94; //tohle funguje v pohode
// SBUF0=buffer[write_pointer];
c buffer[write_pointer] = SBUF0; //tady ale nechce vhodit napr do buffer[1] hodnotu nastaveou v SBUF 0x55
write_pointer++;
if (write_pointer == buffer_length) write_pointer = 0;
}
RI_0 = 0;
TI_0 = 0;
}
void main(void)
{ PCON = 0x80;
SCON0 =0x50; /* SCON0: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 243; /* TH1: reload value for 19200 baud @ 22.100 MHz*/
TR1 = 1; /* TR1: timer 1 run */
TI_0 = 1;
EA = 1;
ES0 = 1;
ET1 = 0;
while(1 == 1)
{
if (read_pointer != write_pointer)
{
if (TI_0 == 0)
{SBUF0 = buffer[read_pointer];
TI_0 = 1;
read_pointer++;
//while (TI_0 == 0){};
//TI_0 = 0;
if (read_pointer == buffer_length) read_pointer = 0;
}
}
}
}
Další informace o konferenci Hw-list