<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用單片機(jī)實(shí)現(xiàn)遠(yuǎn)程電源控制

          利用單片機(jī)實(shí)現(xiàn)遠(yuǎn)程電源控制

          作者: 時(shí)間:2012-11-27 來(lái)源:網(wǎng)絡(luò) 收藏

          山下控制板的程序如下:
          #include "atmelAT89X51.H"
          #define SYN 0x7E //山頂控制板發(fā)來(lái)數(shù)據(jù)幀的同步字符

          char countdown; //時(shí)鐘計(jì)數(shù)
          char TTL; //通信中斷的時(shí)間門坎值,設(shè)置為3秒
          bit link_error; //通信中斷標(biāo)志
          bit power_on; //山上設(shè)備是否加電的標(biāo)志
          bit km; //按鍵消抖動(dòng)標(biāo)志
          bit kp; //按鍵操作已處理標(biāo)志
          char TTW; //發(fā)送指令前的時(shí)間計(jì)數(shù)

          char TX_buf[3]; //發(fā)送緩沖區(qū)
          char TX_len; //發(fā)送指令長(zhǎng)度
          char TX_num; //當(dāng)前發(fā)送的字符序號(hào)

          char RX_buf[3]; //接收緩沖區(qū)
          char RX_len; //接收指令長(zhǎng)度
          char RX_num; //當(dāng)前接收的字符序號(hào)

          char CRC(char *buf,char len) //校驗(yàn)碼生成函數(shù)
          {char i,temp;
          temp=0;
          for(i=0;ilen;i++) temp=temp^buf[i];
          return(temp);
          }

          void timer0_int() interrupt 1 //定時(shí)器0的中斷服務(wù)函數(shù)
          { bit key1,key2;

          TL0=0x00; TH0=0x0A6;
          countdown--;
          if(countdown==0 || countdown==20)
          { P1_6=!P1_6; //CPU運(yùn)行指示燈秒閃
          if(link_error)
          P1_5=!P1_5; //通信中斷,斷電指示燈秒閃
          else
          { if(power_on) P1_5=1; //設(shè)備加電,斷電指示燈滅
          else P1_5=0; //設(shè)備關(guān)電,斷電指示燈亮
          }
          }

          if(power_on !link_error) //當(dāng)設(shè)備加電且通信正常
          P1_3=0; //關(guān)閉蜂鳴器
          else //當(dāng)設(shè)備斷電或通信中斷
          { if(countdown==0) P1_3=0; //蜂鳴器告警
          if(countdown==5) P1_3=1;
          if(countdown==10) P1_3=0;
          if(countdown==15) P1_3=1;
          }

          key1=P3_4; key2=P3_5;
          if(key1==1 key2==1) { km=0;kp=0; } //兩個(gè)按鍵均沒(méi)有按下
          else
          { if(km==0) km=1; //設(shè)消抖動(dòng)標(biāo)志
          else
          { if(kp==0)
          { kp=1;
          if(key1==0) //按鍵K1被按下
          TTW=(TTW+1)%4; //計(jì)算K1連續(xù)按下的次數(shù)
          if(key2==0) //按鍵K2被按下
          { if(TTW==3) //如果K1已被連續(xù)按了三次
          { if(P1_7) TX_buf[1]=0x13; //發(fā)加電指令
          else TX_buf[1]=0x31; //發(fā)關(guān)電指令
          TX_buf[2]=CRC(TX_buf,2);
          TX_num=0; SBUF=TX_buf[0];
          }
          TTW=0; //不管K1已按下幾次,K2按下后復(fù)位TTW計(jì)數(shù)器
          }
          }
          }
          }

          if(countdown!=0) return;
          countdown=40;

          if(TTL==0) link_error=1; //TTL減到0,表示通信中斷
          else TTL--; //每隔1秒對(duì)TTL作減1操作
          }

          void serial_int() interrupt 4 //串口中斷服務(wù)程序
          { if(TI)
          { TI=0; TX_num++;
          if(TX_numTX_len) SBUF=TX_buf[TX_num];
          }
          else
          { RI=0; RX_buf[RX_num]=SBUF;
          if(RX_num==0 RX_buf[RX_num]!=SYN)
          return; //在接收到的數(shù)據(jù)中搜索同步字符

          RX_num++;
          if(RX_num==RX_len) //接收到一完成指令
          { RX_num=0;
          if(RX_buf[RX_len-1]==CRC(RX_buf,RX_len-1)) //檢查校驗(yàn)
          { if(RX_buf[1]==0x13) power_on=1; //加電狀態(tài)
          if(RX_buf[1]==0x31) power_on=0; //斷電狀態(tài)
          TTL=3; link_error=0; //通信正常,重置TTL值
          }
          }
          }
          }

          void main()
          { IE=0x92;
          TMOD=0x21; //定時(shí)器1:模式2,定時(shí)器0:模式1
          TL1=253; TH1=253; //9600波特率
          TR1=1; //啟動(dòng)定時(shí)器1
          SCON=0x50; //串口:模式1

          TL0=0x00; TH0=0x0A6; //定時(shí)器0定時(shí)0.025秒
          TR0=1; //啟動(dòng)定時(shí)器0
          countdown=40; //1秒=0.025秒*40

          TTL=3; //連續(xù)3秒收不到報(bào)告,表示通信中斷
          TTW=0;
          km=0; kp=0;
          link_error=1; power_on=1;
          TX_buf[0]='Z'; TX_len=3;
          RX_num=0; RX_len=3;

          while(1)
          { if(TTW==0) { P3_7=1; P1_0=1; P1_1=1; }
          if(TTW==1) P3_7=0;
          if(TTW==2) P1_0=0;
          if(TTW==3) P1_1=0;
          }
          }

          四、MODEM通信線制作
          2051與MODEM之間的串口通信電纜只用RX、TX、GND三根線,其他的握手信號(hào)均沒(méi)有使用,但在制作MODEM一端的接頭時(shí)應(yīng)要按下圖制作:
          利用單片機(jī)實(shí)現(xiàn)遠(yuǎn)程電源控制

          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理


          上拉電阻相關(guān)文章:上拉電阻原理

          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();