欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2656|回復: 1
收起左側

STC12C5A60S2單片機開發板之雙485通信測試

[復制鏈接]
ID:324810 發表于 2018-5-8 10:07 | 顯示全部樓層 |閱讀模式
/********************************************************************
PC機與控制板采用485-1或者485-2連接都可以進行測試

單片機接收PC機發送的十六進制碼表如下:

01、全開:PC發送FF FF*********返回:FF AA;           
02、全關:PC發送FF 00*********返回:FF BB;
************************************************************
03、第1路開:PC發送FF 01*********返回:FF A1;
04、第2路開:PC發送FF 02*********返回:FF A2;
05、第3路開:PC發送FF 03*********返回:FF A3;
06、第4路開:PC發送FF 04*********返回:FF A4;
07、第5路開:PC發送FF 05*********返回:FF A5;
08、第6路開:PC發送FF 06*********返回:FF A6;
09、第7路開:PC發送FF 07*********返回:FF A7;
10、第8路開:PC發送FF 08*********返回:FF A8;
11、第1路關:PC發送FF F1*********返回:FF B1;
12、第2路關:PC發送FF F2*********返回:FF B2;
13、第3路關:PC發送FF F3*********返回:FF B3;
14、第4路關:PC發送FF F4*********返回:FF B4;
15、第5路關:PC發送FF F5*********返回:FF B5;
16、第6路關:PC發送FF F6*********返回:FF B6;
17、第7路關:PC發送FF F7*********返回:FF B7;
18、第8路關:PC發送FF F8*********返回:FF B8;
************************************************************

*********************************************************************/
#include<STC12C5A60S2.H>                 //庫文件
#include <intrins.h>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型
/********************************************************************
                            初始定義
*********************************************************************/


uchar receBuf[2]={0xee,0xee};
uchar P2dat=0xee;
void B485_send1(uchar c);
void B485_send2(uchar c);
void B485_CLR1();
void B485_CLR1();
/*定義八位數字量輸出IO口*/
sbit Y01=P0^0;  
sbit Y02=P0^1;
sbit Y03=P0^2;
sbit Y04=P0^3;
sbit Y05=P0^4;
sbit Y06=P0^5;
sbit Y07=P0^6;
sbit Y08=P0^7;
/*定義雙485方向控制位*/
sbit RS485_DIR1=P3^2;
sbit RS485_DIR2=P1^1;
/********************************************************************
                            延時函數
*********************************************************************/

void Delay2ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}


/********************************************************************
              功能:串口初始化,波特率9600,方式1
*********************************************************************/
void Init_Com(void)
{
    //串口1初始化
    RS485_DIR1=0;//RS485_1設置為接收
        SCON = 0x50;                //8位數據,可變波特率
        AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //清除定時器1模式位
        TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0xFD;                //設定定時初值
        TH1 = 0xFD;                //設定定時器重裝值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1

   //串口2初始化       
    RS485_DIR2=0;//RS485_2設置為接收
    AUXR|=0x10;        //啟動波特率發生器
        S2CON = 0x50;                                 //方式1,八位數據,可變波特率
        BRT=0XFD;                                  //設置波特率9600
   //串口中斷初始化       
        ES=1;                //開串口1中斷            
        IE2=0x01;        //開串口2中斷
        EA=1;                 //開總中斷            
}
void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0x66;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
    ET0 = 1;  //開定時器中斷
}
/********************************************************************
                            配置P4口
*********************************************************************/
void P4_init(void)
{
   P4SW|=0x70;                   //配置P4.4,P4.5,P4.6為IO口
   P4M0|=0x10;                   //配置P4.4,P4.5,P4.6為普通IO口
   P4M1|=0x10;
   P4|=0x3f;           //置P4.0,P4.1,P4.2,P4.3,P4.4,P4.5,P4.6為1
   P5|=0x08;           //置P5.0,P5.1,P5.2,P5.3為1  
}
/********************************************************************
                            485發送及清零函數
*********************************************************************/
void B485_send1(uchar c)
{
    RS485_DIR1=1;
    SBUF=c;
    Delay2ms();
    RS485_DIR1=0;
}
void B485_send2(uchar c)
{
    RS485_DIR2=1;
    S2BUF=c;
    Delay2ms();
    RS485_DIR2=0;

}
void B485_CLR1()
{
    uchar i;
                 for( i=0;i<2;i++)
                {
                        receBuf[i] = 0xee;
                } i=0;
}
void B485_CLR2()
{
    uchar i;
                 for( i=0;i<2;i++)
                {
                        receBuf[i] = 0xee;
                } i=0;
}
/********************************************************************
                            主函數
*********************************************************************/
void main()
{
   Init_Com();//串口初始化
   P4_init();
   Timer0Init();
   while(1)
   {
     ;
   }
}
/********************************************************************
                          串口中斷函數
*********************************************************************/
void commIntProc() interrupt 4
{
    uchar i;
        if(TI)
    {
      TI = 0;
      RS485_DIR1=0;
        }         
        else if(RI)
         {
//           RI = 0;
                 for( i=0;i<2;i++)
                {
                        receBuf[i] = SBUF;
            while(!RI);RI=0;
            Delay2ms();
                }         
          i=0;
         } //接收數據SBUF賦與dat       
}
/********************************************************************
                         串口二(485) 發送接收中斷函數
*********************************************************************/
void uart2_isr()  interrupt 8
{
    uchar j;   
   if( S2CON & 0x01 )
         {

                 for( j=0;j<2;j++)
                {
                        receBuf[j] = S2BUF;
            while(!(S2CON &= ~0x01));S2CON &= ~0x01;
            Delay2ms();
                }         
          j=0;
         }
        if( S2CON & 0x02 )
        {
          S2CON&=0xfd;
      RS485_DIR2=0;
        }
}
void timer() interrupt 1//定時器0中斷
{
        TL0 = 0x66;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
    P2dat=P2;
    if(receBuf[0]==P2dat)//P2口為薄碼開關地址數據
    {   
        switch(receBuf[1]) //接收數據判斷
        {

            case 0xFF: Y01=Y02=Y03=Y04=Y05=Y06=Y07=Y08=0;
                       B485_send1(P2dat);B485_send1(0xAA);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xAA);B485_CLR2();
                       break;                                                      //  全開
            case 0x00: Y01=Y02=Y03=Y04=Y05=Y06=Y07=Y08=1;
                       B485_send1(P2dat);B485_send1(0xBB);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xBB);B485_CLR2();
                       break;                                                      //  全關

            case 0x01: Y01=0;B485_send1(P2dat);B485_send1(0xA1);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA1);B485_CLR2();break;           //  第一路開
            case 0x02: Y02=0;B485_send1(P2dat);B485_send1(0xA2);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA2);B485_CLR2();break;           //  第二路開
            case 0x03: Y03=0;B485_send1(P2dat);B485_send1(0xA3);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA3);B485_CLR2();break;           //  第三路開
            case 0x04: Y04=0;B485_send1(P2dat);B485_send1(0xA4);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA4);B485_CLR2();break;           //  第四路開
            case 0x05: Y05=0;B485_send1(P2dat);B485_send1(0xA5);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA5);B485_CLR2();break;           //  第五路開
            case 0x06: Y06=0;B485_send1(P2dat);B485_send1(0xA6);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA6);B485_CLR2();break;           //  第六路開
            case 0x07: Y07=0;B485_send1(P2dat);B485_send1(0xA7);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA7);B485_CLR2();break;           //  第七路開
            case 0x08: Y08=0;B485_send1(P2dat);B485_send1(0xA8);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xA8);B485_CLR2();break;           //  第八路開

            case 0xF1: Y01=1;B485_send1(P2dat);B485_send1(0xB1);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB1);B485_CLR2();break;           //  第一路關
            case 0xF2: Y02=1;B485_send1(P2dat);B485_send1(0xB2);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB2);B485_CLR2();break;           //  第二路關
            case 0xF3: Y03=1;B485_send1(P2dat);B485_send1(0xB3);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB3);B485_CLR2();break;           //  第三路關
            case 0xF4: Y04=1;B485_send1(P2dat);B485_send1(0xB4);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB4);B485_CLR2();break;           //  第四路關
            case 0xF5: Y05=1;B485_send1(P2dat);B485_send1(0xB5);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB5);B485_CLR2();break;           //  第五路關
            case 0xF6: Y06=1;B485_send1(P2dat);B485_send1(0xB6);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB6);B485_CLR2();break;           //  第六路關
            case 0xF7: Y07=1;B485_send1(P2dat);B485_send1(0xB7);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB7);B485_CLR2();break;           //  第七路關
            case 0xF8: Y08=1;B485_send1(P2dat);B485_send1(0xB8);B485_CLR1();
                       B485_send2(P2dat);B485_send2(0xB8);B485_CLR2();break;           //  第八路關
            default:break;                                           //  跳出
        }
    }         
}

回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:369814 發表于 2018-8-14 21:19 | 顯示全部樓層
樓主,發現如果發送的是FF或者FF0,也是全開狀態
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表