做学校的点子大赛,需要单片机之间的通信,传送固定数据的程序调出来了,但是我用计时器产生的变动数据传送却出问题了,想请教一下问题出在哪
下面是大概的程序
发送端:(定时器0每秒加一个数的那部分没问题,省略了,这些只是发送数据的程序 变量sec就是定时器产生的变动数据)
void ultra_init(void)
{
TMOD=0X20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
SCON=0x40;
ET1=0;
EA=1;
ES=1;
}
void Timer0Init(void) //初始化定时器0程序
{
TMOD = 0x01;
TH0 = HI; //给TH0,TL0赋初始值
TL0 = LO;
TR0 = 1;
ET0 = 1;
EA = 1;
void main(void)
{ uchar i;
Timer0Init();
ultra_init();
i=sec; (这里我原来直接传送的是sec,后来感觉可能是传送过程中定时器中断导致sec变化所以传送出错,这么改了以后还是不对。。=。+!)
while(1)
{
SBUF=i;
while(!TI)
{}
TI=0;
}
}
接收端(接收到的数据在LED上显示出来,显示部分没问题省略掉 这些只是接受的程序)
void ultra_init(void)
{
TMOD=0x20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1; //开定时器1
ET1=0;
//SM0=0; //编程SCON寄存器,设置通讯方式,方式1
//SM1=1;
SCON=0X40;
// PCON=PCON|0x7f;
REN=1; //接受使能
EA=1; //开中断
ES=1;
}
void main()
{ uchar j;
ultra_init();
init_wei();
while(1)
{
j=key;
while(!RI)
{
show(j%10,1); //显示各位
delay(1);
init_wei();
show(j/10%10,2); //显示十位
delay(1);
init_wei();
show(j/100%10,3); //显示百位
delay(1);
init_wei();
}
}
}
void serial() interrupt 4
{
key=SBUF;
RI=0;//清楚标志
}
还有个问题就是 握手信号和结束信号大概要怎么写?找了很多书都找不到 。。麻烦各位了~
接收端应该是
while(1)
{
while(!RI)
{
j=key;
show(j%10,1); //显示各位
delay(1);
init_wei();
show(j/10%10,2); //显示十位
delay(1);
init_wei();
show(j/100%10,3); //显示百位
delay(1);
init_wei();
}
}
}
void serial() interrupt 4
{
key=SBUF;
RI=0;//清楚标志
}
忘了改。。竟然没法编辑帖子吗
就是这个sec有问题,它在main和int中都要用到,对于这样的变量要加volatile修饰符。
先说发送端
Timer0Init()中TMOD为0x01
ultra_init()中TMOD为0x20
T0的模式变了