您的位置:首页 > 其它

51 单片机串口实验

2016-01-25 12:02 316 查看
51单片机有一个全双工的串行口。

在 PROTEUS 软件中,可以使用虚拟终端,和单片机的串口进行通信实验。

此时,并不需要在电路中加上 TTL-RS232 电平转换器件。直接把单片机的串口,和虚拟终端连接在一起就可以了。

但是在一些书中,以及一些网络文章,却在单片机和虚拟终端之间,夹了一个 MAX232。

要知道,TTL-RS232 电平转换器件中是反相器,本来,串口通信时,1 是空闲位,如果反相后再送到对方,就不会起空闲的作用了。

实际上,TTL-RS232 电平转换器都是成对的使用,发送方加上一个,接收方,也要加上一个,这样,信号电平才是正常的。

一般来说,做一个简单的通信实验,完全可以不加电平转换器。

有一个关于串口简单通信的问题,(链接:http://zhidao.baidu.com/question/560670975,)就可以使用下面的电路,进行实验。



这个题目的要求是:

每次按一次键,虚拟终端从 0 开始显示,按一次增一次。可以增加到 9,最好到 F。

在虚拟终端输入 0 到 9,则由数码管显示。

实现这些要求的全部程序如下:

//-----------------------------------
#include "reg52.h"
#define uchar unsigned char
#define uint  unsigned int  

sbit k1 = P2^2;

uchar code table[] = {
    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

char a = 0;
//-----------------------------------
void delay(uint x)
{
    uchar i;
    while(x--)  for(i = 0; i < 120; i++);
}
//-----------------------------------
void com(uchar com)
{
    SBUF = com;
    while(!TI);
    TI = 0;
}
//-----------------------------------
void main()
{
    PCON = 0x80;      //倍增
    SCON = 0x50;
    TMOD = 0x20;
    TH1 = 0xfd;          //晶振如果是 11.0592MHz,波特率则为 19200。
    TL1 = 0xfd;
    TR1 = 1;
    IE = 0x90;

    while(1)  {
      if(!k1)  {
        delay(10);
        if(!k1) {
          a++;  if(a == 16)  a = 0;
          while(!k1);
          if(a < 10)  com((a + 0x30)); //变成ASCII码再发送
          else        com((a + 0x37));
    } } }
}
//-----------------------------------
void ert() interrupt 4
{
    char i;
    if(RI)  {
      RI = 0;
      i = SBUF & 0x0f;   //简单的处理,仅仅保留低四位
      P0 = ~table[i];     //显示 0~F
    }
}
//-----------------------------------

实验时,虚拟终端的波特率,要设置为 19200。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: