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