北京交通大学-单片机实验-串口通信(UVision4+80/87C52)

参考资源:https://download.csdn.net/download/calvin189s/89622812

一、实验环境:

操作系统:Windows8专业版

处理器:Intel(R)Core™i5-3317U CPU @1.70GHz 1.70GHz

安装内存(RAM):4.00GB

系统类型:64位操作系统,基于x64的处理器

二、试验目的:

在例9-1的基础上进行修改(本文不包含例9-1的说明,这不重要,因为本文有详细源码解释发生了什么)

采用中断实现:

收到“C”后“c”开始发送;收到“S”或“s”停止发送

三、实验步骤:

  1. 打开μVision4,选择Project,New μVision Project建立新的工程,单片机类型选择Intel公司的80/87C52。

2、编写初始化代码和主程序代码,编译,链接。

   3、仿真测试。

  • 实验代码:
#include<reg52.h>



unsigned char aa[]={"Hello World!\n"};

unsigned char receive;

                      

void SendOneByte(unsigned char c)

{

    SBUF = c;

    while(!TI);

    TI = 0;

}

void delay_ms(int x)

{

         int i,j;

         for(j=0;j<x;j++)

                   for(i=0;i<120;i++);

}



void TX()  //

{

unsigned char j;

for(j=0;j<14;j++)

  {

    SBUF=aa[j]; delay_ms(10);     

  }



}

                             

/******************************************************************/

/*                   主函数                                       */

/******************************************************************/

void main (void)

{





    SCON  = 0x50;                          /* SCON: 模式 1, 8-bit UART, 使能接收         */

    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */

    TH1   = 0xFD;               /* TH1:  reload value for 9600 baud @ 11.0592MHz   */

    TR1   = 1;                  /* TR1:  timer 1 run                          */

    EA    = 1;                  /*打开总中断*/

    ES    = 1;                  /*打开串口中断*/



while (1)                       /*主循环不做任何动作*/

    {

          if(receive==0x43)     //  C

         { TX(); delay_ms(500);}

          if(receive==0x53)     //  S

         { }

    }

}

/******************************************************************/

/*                  串口中断程序                                  */

/******************************************************************/

void UART_SER (void) interrupt 4 //串行中断服务程序

{

    unsigned char Temp;          //定义临时变量

  

   if(RI)                        //判断是接收中断产生

     {

           RI=0;                      //标志位清零

           Temp=SBUF;                 //读入缓冲区的值

           receive=Temp;                   //把值输出到P1口,用于观察

          }

   if(TI)                        //如果是发送标志位,清零

     TI=0;

}

五、实验结果:

输入C

输入s

六、实验总结

通过本次实验,我对串口通信有了基本的了解。串口是单片机进行内外信息交换的重要组件。

在日常的生活中,串口驱动程序常常是让人头疼的部分,特别是对于Windows7系统,不正确的驱动安装方式不但可能导致蓝屏,更可能破坏其他的驱动!虽然单片机和电脑区别不小,但端口的设置仍然有可借鉴之处。通过学习端口,可以让我们对端口驱动的问题解决有更清醒的认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值