专栏中心

EEPW首页 > 专栏 > 第三十八课 串口通讯之中断法

第三十八课 串口通讯之中断法

发布人:0750long 时间:2009-06-17 来源:工程师 发布文章

 第三十八课 串口通讯之中断法
程序讲解:
/*---------------------------------------------------------------*/
 //串口通讯
 //按下按钮,单片机发送数据"Come On!\r\n"给主机
 //单片机晶振:11.0592MHz
 //波特率:  9600bps
 
 
 /*-------------------------------------------------------------*/
 //包含头文件
 #include<at89x52.h>
 unsigned char code tab[]={"Come On!\r\n"};
 
 #define k1   P3_2  //对应开发板硬件
 
 /*-------------------------------------------------------------*/
 //串口初始化
 void UART_Init(void)
 {
  SCON = 0x50;    //串口工作方式为1,串行允许接受
  TMOD = 0x20;   //定时器1工作在方式2
  PCON = 0x80;   //SMOD = 1; 波特率加倍
  TH1  = 0xfA;      //波特率 9600bps fosc="11".0592MHz
  TL1  = 0xfA;
  ES   = 1;             //开串口中断
  TR1  = 1;            //允许定时器1工作
  EA   = 1;             //开总中断
 }
 
 
 
 /*-------------------------------------------------------------*/
 //延时5000+0us 函数定义
 void delay5ms(void)
 {
   unsigned char i,j,k;
   for(i=135;i>0;i--)
   for(j=2;j>0;j--)
   for(k=7;k>0;k--);
 }
 
 
 
 /*-------------------------------------------------------------*/
 //串口发送一个字节
 void Uart_SendChar(unsigned char dat)
 {
  SBUF = dat;    //待发送的数据写入缓冲区
  while(!TI);        //等待发送完成
  TI = 0;             //清零发送标志位
 }
 
 
 
 /*-------------------------------------------------------------*/
 //串口发送一个字符串
 void Uart_SendString(unsigned char *dat)
 {
  while(*dat!='\0')
  {
   Uart_SendChar(*dat); //发送当前数据
   dat++;                         //指向下一个要发送的数据
  } 
 }
  
 
 
 
 /*-------------------------------------------------------------*/
 //主函数
 void main(void)
 {
  UART_Init();   //初始化串口
 
  while(1)
  { 
   if(k1==0)
   {
    delay5ms();
    if(k1==0)
    {
     Uart_SendString(tab);  //发送数据
     while(P3_2==0);
    }
   }
  }    
 }
 
 
 
 /*-------------------------------------------------------------*/
 //串口接收中断函数
 void INT_UartRcv(void) interrupt 4
 {
  unsigned char Rcv = 0;
  if(RI)                   //查询接收标志位(有数据发送过来时置为1)
  {
   RI  = 0;              //接收标志位清零
   Rcv = SBUF;     //存储缓冲区的数据
   Uart_SendChar(Rcv); //让从电脑上传到单片机的数据,传回的电脑显示
  }
 }
 
 本节重点:
1、ES 串行通信中断使能在中断使能寄存器IE 中
寄存器对应位:EA  -   ET2   ES   ET1   EX1   ET0   EX0
EA   使能标志位置位则所有中断使能复位则禁止所有中断
-       保留
ET2  定时器2 中断使能
ES   串行通信中断使能
ET1 定时器1 中断使能
EX1 外部中断1 使能
ET0 定时器0 中断使能
EX0 外部中断0 使能

2、当有数据从串口传送到单片机时,串口接收中断标志位RI会置位,此时若相关中断均使能则会进入串口接收中断服务函数 

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

品英Pickering为光电信息领域提供先进的开关、仿真方案和测试系统

2025-06-06

瑞萨电子Minicube2

视频 2012-07-04

台积电对日德厂期望值再降 关税、车市不妙双隐忧

EDA/PCB 2025-06-09

为什么这项关键芯片技术对中美之间的人工智能竞赛至关重要

在线调试工具EZ-CUBE参考设计

视频 2012-07-04

UCIe IP 子系统支持 36G 芯片间数据速率

EDA/PCB 2025-06-06

V850 Stick套件

视频 2012-07-04

WinCE下的触控屏驱动程序源代码(MS提供)

瑞萨电子工具E1

视频 2012-07-04

飞机也能电动化? 华裔科学家发明「钠空气电池」

一站式打卡智驾未来,AWC 2025观众登记通道火热开启

汽车电子 2025-06-06

麦克斯韦方程组和麦克斯韦关系式有什么区别?

头部车企终将入局人形机器人领域?

Windows NT下最负盛名的专用调试工具

人工智能与无人机的组合如何撕开俄空天军的 “核心“

Windows CE BSP 1.2

wince的屏幕旋转程序

瑞萨电子工具e8a

视频 2012-07-04

三防漆7大死角终结者!PCBA防水新工艺如何实现360°零盲区防护

更多 培训课堂
更多 焦点
更多 视频

技术专区