锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

dsPIC33F串口通讯中断接收发送数据-UART

时间:2022-08-19 21:00:01 ds30p1传感器ds30nb传感器ds30c1光电传感器

/* ****************************************************************  ** 功能描述: 串行通信程序,DSP中断收到8个数据后,将收到8个数字  以中断发送方式返回发送方。  *************************************************************** */  #include "p30f6014.h"    //ds30f6014头文件  unsigned int  receive[8];    // 接收数据数组  unsigned int  send[8];   // 发送数据数组  unsigned int  receive_count=0;  // 接收数据个数计数  unsigned int  send_count=0;  // 发送数据个数计数  unsigned int  *pointer;   // 发送指针  unsigned int  Receiveflag;  // =1,接收8个数据  /* ****************************************************************  ** 函 数 名: Uart_Initial()  ** 功能描述: 232串行通信初始化子程序,设置中断优先级  *************************************************************** */  void Uart_Initial()  {   IFS0bits.U1TXIF=0;   ///中断标志位置复位发送   IFS0bits.U1RXIF=0;   ///复位接收中断标志     IPC2bits.U1RXIP=1;   //收中断优先级:1级     IPC2bits.U1TXIP=1;    U1MODE=0x8000;    //UART使能,8位数据,无奇偶验证     U1STA=0x0000;   //当一个字符被传输到发送移位寄存器(发送缓冲器)       ///至少有一个字符)中断,当接收到一个字符时,///中//断开标志位置   U1BRG=0X34;   //U1BRG=Fcy/(16*波特率)-1,波特率9600  }  /* ****************************************************************  ** 函 数 名: __attribute__((__interrupt__)) _U1RXInterrupt()  ** 功能描述: 中断子程序:232接收中断子程序  *************************************************************** */  void __attribute__((__interrupt__)) _U1RXInterrupt()  {   while(U1STAbits.URXDA==1)     {IFS0bits.U1RXIF=0;   receive[receive_count]=U1RXREG;  // 接收并存储数据   send[receive_count]=receive[receive_count];   receive_count  ;    // 接收计数器加1   if(receive_count>7)   // 如果已经收到8个数据   {   receive_count=0;    // 接收计数器清0   Receiveflag=1;    // 接收数据标志   }  }  }  /* ****************************************************************  ** 函 数 名: __attribute__((__interrupt__)) _U1TXInterrupt()  ** 功能描述: 中断子程序:232发送中断子程序  *************************************************************** */  void __attribute__((__interrupt__)) _U1TXInterrupt()  {    IFS0bits.U1TXIF=0;    if(send_count>7)    //如果发送的数据数量大于7   {   send_count=0;    ////发送数据个数清零   U1STAbits.UTXEN=0;    //已发送到最后一个数,发送不使能     return;   }     else   {   send_count  ;    // 否则,发送计数器加1    U1TXREG=send[send_count];   }  }  main()  {  Uart_Initial();     // 串行通信初始化子程序  IEC0bits.U1RXIE=1;     //UART接收和发送中断  IEC0bits.U1TXIE=1;  while(1)  {   if(1==Receiveflag)    // 是否收到通信数据   {   Receiveflag=0;    // 清接收标志   U1STAbits.UTXEN=1;    // 使能发送   U1TXREG=send[0];    ///首先发送第一个数据   }  }  }

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章