目录
频道首页
51单片机之T2定时器串口通信
收藏
0
EndlessCodeEndlessBug 最近修改于 2023-03-28 10:17:01

52芯片,比51要多一个定时器。所以我在网上也是看了很多资料,许多都不能运行,我在进行部分修改后,终于在keli和proteus上实现了仿真测试。以下是我的代码和设计的电路。

/*-----------------------------------------------------------------------------
* 实 验 名         : RS232串口试验
* 实验说明     : 单片机串口接收数据控制灯亮灭
* 连接方式     : 
* 注    意         : 该试验使用的晶振是11.0592
*******************************************************************************/

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

uchar PuZh[36] = "hello world";

//--定义使用的IO--//

sbit LED=P2^0;


//--声明全局函数--//   
void UsartConfiguration();
void Delay_1ms(uint i);


/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无 * 输出 : 无
***********************************************************************/
void Com_IntIsr(void) interrupt 4
{
    uchar i;
  uchar receive_data;

  EA = 0;

  if(RI == 1) //当硬件接收到一个数据时,RI会置位
    {         
        RI = 0;
        receive_data = SBUF;//接收到的数据

        if(receive_data == '1')     
        {
                LED =0;//接收到1亮灯
        }
        else
        {
                LED =1; //其他情况灯灭
        }

    }

        for(i=0; i<36; i++)
        {
            SBUF = PuZh[i];   //将要发送的数据放入到发送寄存器
            while(!TI);            //等待发送数据完成
            TI=0;                    //清除发送完成标志位
            Delay_1ms(1);
        }
        EA = 1;
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能           : 主函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void main()
{

    UsartConfiguration();//初始化串口

    while(1);    
}

/*******************************************************************************
* 函 数 名       : UsartConfiguration()
* 函数功能           : 设置串口
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void UsartConfiguration()
{    

    T2MOD = 0x01;     //自动重载
    T2CON = 0x30;     //T2用做发送接收时钟
    TH2 = 0xFF;      //9600波特率,11.0592Mhz晶振
    TL2 = 0xDC; 
    RCAP2H = 0xFF; 
    RCAP2L = 0xDC; 
    SCON = 0x50;     //串口方式1,1个起始位,1个停止位,8位数据,可变波特率
    PCON = 0X00;    //波特率不加倍
     TR2 = 1;          //启动T2 
    ES = 1;         //开串口中断
      EA = 1;         //开总中断
}


/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms
* x * 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
  uchar x,j;

  for(j=0;j<i;j++)
    for(x=0;x<=148;x++);
}

由于不是用的自己电脑来画的图,所以就没有办法贴出图片,但是要是有空的话,我一定把图贴出来。但是我还说一下设计的大概思路,就是一个最小单片机系统RX端接compim的RX端,TX接compim的TX端,然后LED接P2口的0端。

\ \ ————————————————

内容大纲
批注笔记
51单片机之T2定时器串口通信
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板