这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 请教:单片机串口编程问题

共2条 1/1 1 跳转至

请教:单片机串口编程问题

院士
2006-09-17 18:14:16     打赏
请教:单片机串口编程问题



关键词: 请教     单片机     串口     编程     问题    

院士
2006-12-22 22:43:00     打赏
2楼
1: 对不起,刚才内容没有发送出去我最近在做一个单片机串口通讯的题目,我写了一个串口测试子程序,两机可以正取接收和显示,但把子程序放在总程序中就不行了;我的总程序应该也没有问题,因为我如果不调用这个串口子程序,主程序也能很好的运行。我想了一天也解决不了,还请各位热心的大虾门帮帮解决一下:
~~~~~发送测试程序
#include<reg51.h>
#include<absacc.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define pa8255 XBYTE[0xc7ff]       //8255PA口
#define pb8255 XBYTE[0xcfff]       //8255PB口
#define pc8255 XBYTE[0xd7ff]       //8255PC口
#define com8255  XBYTE[0xdfff]     //8255控制口
#define VOLTAGE 5     //采集电压为0~5V

void sendkey(uchar d)   //发送一个字节的内容
{
     SBUF=d;
     while(TI==0);
     TI=0;
}
void sendvalue(uchar d)  //发送一个采样值
{
     if(d%16==8)
        {  SBUF=d;
           while (TI==0);
           TI=0;
        }
     else
        {  SBUF=d+1;
           while (TI==0);
           TI=0;
        }

}
void delay(uint t)  //延时函数延时t*10ms
{
uint j;
for(j=0;j<t;j++)
  {
   TH0=-39;
   TL0=-16;
   TR0=1;
   do {} while(TF0!=1);
   TF0=0;
  }
}


main()
{
  uchar trdata[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar redata[10];
uchar i;
TMOD=0x21;
TH1=0xE6;
TL1=0xE6;
TR1=1;
SCON=0x50;
PCON=0x00;
TCON=0xc0;
IE=0x00;
com8255=0x80;
pc8255=0xff;
while(1)
{for(i=0;i<10;i++)
   { sendvalue(trdata[i]);
    // while(TI == 0 );
    // TI = 0;
    // while(RI == 0 );
     //RI = 0;

     pb8255=trdata[i];
     delay(30);
     }
}
}

~~~~接收子程序~~~~
main()
{uchar trdata[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar redata[10];
uchar i;
TMOD=0x21;
TH1=0xE6;
TL1=0xE6;
TR1=1;
SCON=0x50;
PCON=0x00;
TCON=0xc0;
IE=0x00;
com8255=0x80;
pc8255=0xff;
pa8255=0xff;
while(1)
{    
     while(RI == 0 );
     RI = 0;
     pa8255= SBUF-1;
     delay(30);
}
}
2: 呵呵什么意思呀,楼主好象没有说明白 3: 还用8255 4: 表达不清,还望见谅! 谢谢 荆潇影 和 王紫豪 的指点!
我的系统是这样的:在发送端用0809采集八路电压数据,然后用单片机的串口发送给另一片单片机,并显示。  我用8255显示采样值和显示的路数。
我的问题是:我上面编写的是两片单片机的接受和发送的调试程序。
这个调试程序我可以很好的运行,并且很好的显示。但就是把上面的sendkey(uchar a)和sendvalue(uchar a)函数(前者是发送采样路数,后者是发送采样值),放到我的总程序里调用,就不能发送了,每次仿真时都是在 while(TI==0);这儿停了。也是就说数据没用经过SBUF发送出去。为什么??
我的总程序应该也没有问题,因为我要是不调用sendkey(uchar a)和sendvalue(uchar a),我的发送端的总程序可以正确显示。

不好意思了,发帖很少,表达不清,还望见谅!
5: 这样的等到很可能导致程序不稳定 6: 为什么不用中断? 7: 主程序中有没有对串口设置的地方?或者中断等寄存器设置冲突... 8: 中断用得不熟练我对中断用得不熟练,所以没有用中断。主程序我上传到这儿了,请各位看看 9: 啊这么多人进来了这么没有人给我留点意见啊?
期待大家的意见啊! 10: 近来学习帮你顶下

共2条 1/1 1 跳转至

回复

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