51 单片机串口实验

51单片机有一个全双工的串行口。


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


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


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


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


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


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


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


51 单片机串口实验_第1张图片


这个题目的要求是:


每次按一次键,虚拟终端从 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。


你可能感兴趣的:(串口通信)