天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

{QLdsPIC3} RS

更新時間: 2019-03-23
閱讀量:3353

深圳市英銳恩科技有限公司:臺灣麥肯單片機(Micon MDT單片機)亞太地區A級代理商

{QLdsPIC3} RS-485 {C30+dsPIC30F6014A}
//實驗目的:熟悉RS485通信
//軟件規劃:
//          1.配合上位機軟件“串口助手”一起工作
//          2.上位機發送數據,下位機接收后不做任何處理發送回PC
//          3.接收數據采用中斷形式,發送數據在接收中斷里完成。
//硬件規劃:
//          1。通過RS485轉RS232連接到電腦上。
//          2。撥碼開關S5和S6全部置ON,其他撥碼開關關閉。

#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 __attribute__((address(0x896)))flag;
unsigned char __attribute__((address(0x898)))rxdata;
unsigned char __attribute__((address(0x900)))rxdata1[20] ;            //定義接收數據緩存變量
 unsigned char __attribute__((address(0x950)))i;
//******************主函數*************************
int main (void)
{
unsigned char i;
ini232();                         //調用RS232口初始化函數
for(i=100;i>0;i--);               //延長時間以保證可靠初始化
LATGbits.LATG0=0;                 //489輸出有效(主芯片輸入),即主芯片接收PC數據
LATGbits.LATG1=0;                 //489輸入無效(主芯片輸出)
i=0;
while(1);             
}

//*************RS232初始化函數**********************
void ini232(void)
{
  TRISG=0;
  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;   
  i=0;
}

//************接收中斷函數**************************
void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{  
   
    unsigned char txflag,j;   
    IFS0bits.U1RXIF = 0;              //清除中斷標志位
    rxdata1[i]=U1RXREG;               //保存到接收單元里
    i++;                              //指向下一接收單元

    if(rxdata1[i-1]==0x0A)            //判斷是否接收完所有數據(因為約定PC以“回車”鍵做發送數據結束標識符)
      {
       i=0;
       txflag=1;                      //發送標志位
       LATGbits.LATG1=1;              //489輸入有效(主芯片輸出),即主控制器發送數據給PC
       LATGbits.LATG0=1;              //489輸出無效(住芯片輸入)
   //  for(j=0;j<200;j++);
        while(txflag)                 //判斷是否要繼續發送
         {
          U1STAbits.UTXEN =1;         //允許發送
          U1TXREG=rxdata=rxdata1[i];  //發送數據
        
          while(U1STAbits.TRMT==0);   //等待一位發送完成
          if(rxdata1[i]==0x0A)        //判斷是否發送完所有數據
             {
                txflag=0;             //清除發送標志位
                i=-1;                 //返回接收單元開始處
             }
          i++;                        //發送下一個數據
         }
       
      }
   LATGbits.LATG0=0;                  //489輸出有效(主芯片輸入),即主芯片接收PC數據;重新接收PC數據
   LATGbits.LATG1=0;                 
}


联系我们: 华坪县| 建水县| 湾仔区| 兴安县| 措美县| 盐亭县| 苗栗县| 郓城县| 门源| 万安县| 富川| 忻城县| 越西县| 海阳市| 武隆县| 柘城县| 烟台市| 万宁市| 错那县| 莱芜市| 祁阳县| 镇康县| 修文县| 民勤县| 左云县| 沁阳市| 旬邑县| 平陆县| 友谊县| 宿迁市| 曲沃县| 平山县| 南汇区| 昭苏县| 黑水县| 万安县| 蕲春县| 河东区| 崇文区| 漯河市| 当阳市|