<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        51單片機串口控制繼電器

        作者:樊曉軍   來源:樊曉軍   點擊數:  更新時間:2014年06月08日   【字體:

        實驗室有個項目,用到報警功能。比如當溫度或應力過高或者過低的時候啟動報警器,通過給串口發送一個命令來控制繼電器。不巧去年被我正負極接反燒了,最近開始搞單片機,哥苦心經營,利用實驗室單片機學習板給搞定了,程序如下:

         
         
        #include<reg52.h>
        #define uchar unsigned char
        sbit JDQ=P3^7;         //繼電器接P3.7
        sbit FMQ=P3^6;
        sbit LED=P0^0;
        sbit LEDra=P0^1;
        sbit LEDar=P0^2;
        uchar dat[4];
        int i=0;
         
         
        void Delay(unsigned int ii) //1mS
        {
        unsigned int jj;
        for(;ii>0;ii--)
        for(jj=0;jj<125;jj++)
        {;}
        }
         
         
        void init_serialcom( void ) //串口通信初始設定
        {      
        TMOD|=0x20;  //定時器中的方式控制寄存器TMOD,設置T1為工作模式2,當TL1溢出時,TH1的值自動裝入TL1,TH1和TL1當然都要賦值.TMOD前四位T1,后四位T0:GATE=0,C/T=0,M1=0,M0=01
        TR1=1;       //定時器中的運行控制寄存器TCON,允許T1計數
        TH1=0xfd;   //波特率9600
        TL1=0xfd;
        SCON  = 0x50 ;   //SM0=0;SM1=1;REN=1; UART為模式1,8位數據,允許接收,
        PCON |= 0 ;      //SMOD=1;波特率的問題。
        IE|=0x90 ;       //中斷允許寄存器IE,P97,EA終端總允許標志位,ES串行口中斷允許位
        }
         
         
        void jdq() interrupt 4{  //void 函數名() interrupt 4
        EA=0;     
        if(RI)
        {
        RI=0;
        if(i<4)
        {
        dat[i] = SBUF;
        i++;
          
        if(dat[2]==0x10 && dat[0]==0xE5 && dat[1]==0xA1 && dat[3]==0x4E)   //E5A1 104E
          JDQ=0;//吸合
             LED=0;//P0口LED亮
          LEDra=1;
             LEDar=1;
        }
        else if(dat[2]==0x11 && dat[0]==0xE5 && dat[1]==0xA1 && dat[3]==0x4D) //E5A1114D
          {
          JDQ=1; //釋放
             LED=1; //P0口LED燈滅
          LEDra=1;
             LEDar=1;
          }
            else
            {
            LEDra=0;
               LEDar=0;
            LED=1;
            }
        if(i>=4)i=0;else;
        }
        EA=1;
        }
         
         
        main()      //串口方式1發送時的定時信號,也就是移位脈沖,由定時器1產生。不是定時器0。
        {
        init_serialcom();
        Delay(10);
        while(1);                                                                        
        }
         
         
         
        第一次獨立寫的,程序粗糙了點,但是完美運行。
         
        發送:E5A1 104E,繼電器閉合   
                  E5A1 114D,繼電器斷開  
        這里控制用到了四個字節,所以在中斷程序里面我定義了一個數組,最后判斷這四個字節是否都正確。如果一個字節的話更簡單。
         
        下一步要用無線控制,等哥哥好消息吧
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮