rozdily v obsluze serialu 8051 vs 8052

Milan milger@pobox.sk
Čtvrtek Červen 2 09:55:41 CEST 2005


Niekde to pouzivam takto:
  SCON = 0x50;        //en.Rx;8-b UART variable baud rate
  TMOD = 0x21;           //8-b autoreload TIMER 1, 16-b TIMER 0
  TH1 =  0xf5;        //serial baudrate = 10MHz/(384*(256-TH1)) = 2367Bd
  TL0 = (unsigned char)Tcnt;
  TH0 = (unsigned char)Tcnt>>8;
  TCON = 0x50;        //TIMER 0,1 run
  IEN0 = 0x92;        //ser.p.INT enable, TIMER 0 INT enable
  IP0 = 0x10;
  EAL = 1;         //INT enable

void SERIAL_INT (void)  interrupt 4
{
  if (RI)         //data received
  {
     if (fifoM<SizeFIFObuff-1) {fifoM++;}
     else {fifoM = 0;}
     BuffIn[fifoM] = SBUF;
     RI = 0;
  }
  if (TI)                                   //data transmited
  {
     ti_en = 0;
     TI = 0;
  }
}

Timer 0 riesi nieco ine, ale inak to cele funguje. Nic ma nenapada, skus 
zmenit poradie pri inicializacii /mozno to chce naskor pustit hodiny pre 
UART a az potom povolit prerusenie/ alebo vymen obvod.

Mila



n
----- Original Message ----- 
From: "Prichy" <prichy@volny.cz>
To: "HW-news" <hw-list@hw.cz>
Sent: Thursday, June 02, 2005 8:28 AM
Subject: rozdily v obsluze serialu 8051 vs 8052


Zdravim.

Nefunguje mi prijem od serialu na 8052.

  SCON = 0x50;      /*inicializace serialu 9600 baud pri 11.059MHz*/
  TMOD |= 0x21;    //nastaveni modu casovace 0 a 1
  TH1 = 0xFD;
  TR0 = 1;                               // start timer 0
  ET0 = 1;                               // enable timer 0 interrupt
  ES = 1;                                // enable serial interrupt
  PS = 0;                                    // set serial interrupts to
hi priority
  EA  = 1;                               // global interrupt enable
  TR1 = 1;                               // start timer 1


zde je inicializace, pouzivam casovac 1,
pri krokovani v simulatoru (u*V*i*s*i*o*n) vse funguje
na HW neprima nic ze serialu (asi, nemam emulator, abych
zjistil presne co se tam deje) (REN mam nahozeny)
Pokud ovsem nahodi TI prijme vse celkem v pohode. (TI nesmim vynulovat)
Z toho usuzuji, ze vubec nedojde k preruseni od prijmu.

v PC mam seriak nastaven na 9600 1sb. bez parity.

Jsem si vedom, ze je to dotaz typu UB (uplne blby),
ale uz se v tom tak nejak placam a tocim v uzavrenem
kruhu,

static void com_isr (void) interrupt 4 using 2
{

if (RI != 0)
  {
  RI = 0;
  buf[buf_count] = SBUF;
  if (buf[buf_count]=='\r'){ ES=0;} // zastaveni serioveho kanalu
  buf_count++;
  serial_count= 20;}

}


pro uplnost obsluha preruseni (na vysilani nepouzivam)

dekuji za pripadne rady a stydim se :-)


Prichy

PS: neni to rozdilem mezi 8051 a 8052, docetl jsem se, ze
casovac 2 muze byt pouzit ke generovani prenosove rychlosti
ale nemusi, tak jsem vse nechal jako na 8051


_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list





__________ Informacia od NOD32 1.1014 (20050301) __________

Tato sprava bola preverena antivirusovym systemom NOD32.
http://www.eset.sk





Další informace o konferenci Hw-list