专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于51单片机之串口中断方式实验

作者:佚名   来源:CaKen工作室   点击数:  更新时间:2014年08月28日   【字体:

**************************  Copyright(C) CaKe  ****************************************

========================================================================================
==============**版权信息   : CaKen工作室                            ==============
==============**文件名     : main.c              ==============
==============**作者       : CaKen             ==============
==============**版本号     : V1.0              ==============
==============**时间       : 2014.08.27               ==============
==============**功能描述   : 串口中断实验测试            ==============
========================================================================================
****************************************************************************************
 
#include
#define uchar unsigned  char
#define uint unsigned int
uchar idata trdata[]={'C','a','K','e','n','_', 'Z','H','C','K','-','5','1',0xaa};
sbit KEY = P3^2;
***************************************************************************************
函数名:UART_Init();
调  用:();
 
备  注:
****************************************************************************************
void UART_Init(void)
{
   SCON = 0x50;     //串口工作方式为1 , 串行允许接收
   TMOD = 0x20;     //定时器1 工作在方式2
   TH1  = 0xfd;     //波特率 9600bps fosc="11".0592MHz
   TL1  = 0xfd;
   EA   = 1;        //开总中断
   ES   = 1;        //开串口中断
   TR1  = 1;        //允许定时器1工作
}
 
***************************************************************************************
函数名:延时函数
调  用:();
****************************************************************************************
 
void delay1ms(uint i)
{
uchar j;
  while(i--)
  {
   for(j=0;j<115;j++)   //1ms基准延时程序
   {;}
  }
}
 
***************************************************************************************
函数名:Uart_SendChar();
调  用:();
参  数:
返回值:
结  果:
备  注:发送字符
****************************************************************************************
 
void Uart_SendChar(unsigned char dat)
{
   SBUF = dat; //待发送的数据写入缓冲区
   while(!TI); //等待发送完成
   TI = 0;     //清零发送标志位
}
 
***************************************************************************************
函数名:Uart_SendString();
调  用:();
参  数:
返回值:
结  果:
备  注:发送字符串
****************************************************************************************
 
void Uart_SendString()
{ uchar i=0;
    while(trdata[i]!=0xaa)
  {
   SBUF=trdata[i];
        while(!TI);
        TI=0;
        i++;
     }
}
 
***************************************************************************************
函数名:
调  用:();
参  数:
返回值:
结  果:
备  注:
****************************************************************************************
void main(void)
{
    UART_Init(); //初始化串口
    while(1)
     {
    if(KEY==0)
     {
    delay1ms(20);
    if(KEY==0)
    {
      Uart_SendString();
   while(!KEY);//等待按键释放
    }
  }
     }
}
 
***************************************************************************************
函数名:串口中断函数
****************************************************************************************
 
void INT_UartRcv(void) interrupt 4
{
    unsigned char Rcv = 0;
    if(RI)                    //查询接收标志位(有数据发送过来时置为1)
      {
         RI  = 0;        //接收标志位清零
         Rcv = SBUF;          //存储缓冲区的数据
         P0  = SBUF;
         Uart_SendChar(Rcv);  //让从计算机上传到单片机的数据 , 传回的计算机显示
 
      }
}
 
=======================================================================================
 -------------------      CaKen工作室  原创作品     --------------------
 -------------------            CaKen工作室  版权所有       --------------------
========================================================================================
关闭窗口

相关文章