Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238868
  • 博文数量: 24
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 251
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-16 21:24
文章分类

全部博文(24)

文章存档

2010年(6)

2009年(18)

我的朋友

分类: 嵌入式

2009-11-20 17:24:18

网上关于单片机串口的文章太多了,这篇是所以说是超级详细,是因为我决定,同时讲上位机和下位机。上位机的话用DELPHI 下位机的话KEILC+PROTEUS,有机会的话,讲一下ARM9 2440下的UART

先讲下位机,有图有真像,先上图成功运行的图。

 

我在学习过程中到也没有碰到什么问题,主要就是那个MAX232和串口的接法,按照书上给连接好之后,才发现不行,代码不行吗,调试一下,发现也没有什么问题。后来上proteus论坛上搜了一下说,串口已经转换过电平了,MAX232有点问题,不用接了,我一下,果然如此,既然可以,那就不接MAX232电平转换了,不过在实际运用中,可是要接的。

我在网上找了个虚拟串口。添加了两个COM3 COM4,在proteus中,双击串口,设置一下端口为COM3,波特率为9600,然后下个,串口调试助手,设为COM49600 就可以,具体的设置过程,网上有带图片的,我就不在多说,

算波特率的时候,可以找个小软件,“51波特率计算“,算一下就出来,当然,你要知道它的原理,是怎么来的,至于TMOD SCON 反正都是那个固定模式,直接拿过来,修改一下就OK了,主要就的发送数据RI和接收数据TI。这两个可以看下,基本上就是那个模式,下面上代码

 

void ReciveData() //接收数据

{
    if(RI)             //RI接收完毕

    {
        RI = 0;
        tmp = SBUF;     //给SBUF的值赋给TMP

        P1 = tmp;    
//        delay(100);

        sendbuf(tmp);
    }
}

void sendbuf(char a) //发送数据

{
    SBUF = a;
    while(!TI);     //发送完毕,清0

    TI = 0;
}
void SendString(char str[]) //发送字符串

{
    uchar i = 0;
    while(str[i] != '\0') //其实我觉的用指针还方便一点

    {
        SBUF = str[i];
        while(!TI);                // 等特数据传送

        TI = 0;                    // 清除数据传送标志

        i++;                    // 下一个字符

    }    
}


阅读(7234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~