这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 77e58 关于77e58的双串口问题?

共2条 1/1 1 跳转至

77e58 关于77e58的双串口问题?

院士
2006-09-17 18:14:16     打赏
77e58 关于77e58的双串口问题?



关键词: 77e58     关于     串口     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 各位道友:

我的硬件电路是用77e58设计的一个双串口的中继器,在软件设计的时候,仿真的时候显示正确,但烧录的片中之后就显示不对,到底是怎么回事??

在软件设计时,对77e58还有什么特殊的要求吗?麻烦分析一下下面的程序!!

/***********************中继器程序*************************/
#include<77e58.h>
#define uint unsigned int
#define uchar unsigned char

sbit DERE0=P1^6;
sbit DERE1=P1^5;
sbit WDOG=P1^4;
uint time_count1;

/********************串口及定时器初始化*************/
void serial_init(void)
{
TMOD=0x21;
TH0=(65536-50000)/256;           //t0延时时间为50ms
TL0=(65536-50000)%256;


TH1=0xfd;        //定时器t1设置,串口1设置波特率9600
TL1=0xfd;
SCON1=0x50;      //串口1工作在方式1
PCON=0x00;
EA=1;
ET0=1;            //定时器0中断允许
TR0=1;            //启动定时器
T2CON=0x30;      //用定时器2做串口0的波特率发生器
RCAP2H=0xff;     // 11.0592M晶振下,baud rate=9600
RCAP2L=0xd9;
TH2=0xff;
TL2=0xd9;
SCON0=0x50;
TR1=1;            //启动定时器1
TR2=1;            //启动定时器2

}

/************定时器t0中断,喂狗程序???????***************/
void time0(void) interrupt 1
{
  EA=0;
  TR0 = 0;
  time_count1++;
  if(time_count1 == 30)            //共1.5s时间
  {
   WDOG=!WDOG;                     //喂狗
   time_count1 = 0;
   }
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  TR0=1;

}
/*******************主程序************************/
void main()
{
  time_count1=0;
//DS12887_init();
serial_init();
DERE0=0;
DERE1=0;
while(1)
/*用查询的方法进行判断***********/
{
  if(RI==1)
  {
   RI=0;
   ACC=SBUF;
   SBUF1=ACC;
   DERE0=1;
   DERE1=1;
   }
  else if(TI==1)
  {
   TI=0;
   DERE0=0;
   DERE1=0;
   }

  else if(RI1==1)
  {
   RI1=0;
   ACC=SBUF1;
   SBUF=ACC;
   DERE0=1;
   DERE1=1;
   }
  else if(TI1==1)
  {
   TI1=0;
   DERE1=0;
   DERE0=0;
   }
  }
}
1: re:T2 定时器设错了。应该是TH2=0xff;
TL2=0xdc.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]