×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-30 发布时间:
|

**************************  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工作室  版权所有       --------------------
========================================================


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向