技术热线: 4007-888-234

QLdsPIC3}RS

更新时间: 2019-03-25
阅读量:3714

深圳市英锐恩科技有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商
QLdsPIC3}RS-232通信1{C30+dsPIC30F6014A}
适用于带握手协议的RS232-A模块

#include             //dsPIC30F6014标准头文件

  _FOSC(0x0ffe5);                 //XT振荡,4倍频晶振.
  _FWDT(WDT_OFF);                 //关闭看门狗定时器
  _FBORPOR(PBOR_OFF & MCLR_EN);   //掉电复位禁止,MCLR复位使能。
  _FGS(CODE_PROT_OFF);            //代码保护禁止

void ini232(void);               
void __attribute__((__interrupt__)) _U1RXInterrupt(void); /*Declare 232 interrupt ISRs*/

unsigned char rxdata1;            //定义接收数据缓存变量

//******************主函数*************************
int main (void)
{
unsigned char i;
ini232();                         //调用RS232口初始化函数
for(i=100;i>0;i--);               //延长时间以保证可靠初始化   
while(1);             
}

//*************RS232初始化函数**********************
void ini232(void)
{
  TRISFbits.TRISF2 =1;            //RC脚输入
  TRISFbits.TRISF3 =0;            //TX脚输出
  IPC2bits.U1RXIP=7;              //中断优先级别
  IEC0bits.U1TXIE=0;              //禁止发送中断
  IEC0bits.U1RXIE=1;              //使能接收中断
  U1BRG =64;                      //波特率设置为9600,外部10M
  U1MODE =0x8020;                 //使能UART功能
  U1STA=0X0000;   
  U1STAbits.UTXEN =1;             //允许发送   
}

//************接收中断函数**************************
void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF = 0;              //清除中断标志位
while(U1STAbits.URXDA)            //读取接收到的所有数据
 {
    rxdata1=U1RXREG;              //缓存接收的数据
    U1TXREG=rxdata1;              //把接收到的数据发送回去
    while(U1STAbits.TRMT==0);     //等待发送完毕
 }
}