亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? plc.c

?? 智能控制系統主機程序V_01?悄蕓刂葡低持骰絳騐_01
?? C
字號:
/* //////////////////////////////////////////////////////////////////////////
// lme2200.c  - source file for lme2200 API
// 
// Copyright 2005, Leaguer MicroElectronics Co., Ltd
// www.leaguerme.com
//////////////////////////////////////////////////////////////////////////// */
#include <REG922.H>

#include "sart.h"
#include "plc.h"
#include "timer.h"
#include "wr_flash.h"
//#include "Beacon.h"

#define uint unsigned int
#define uchar unsigned char

// Maximum time to wait to get reply from the chip after sending read command in sync mode,
// in number of instructions
#define SYNC_WAIT 100       	

#define INC_THRES_EA  16
#define MAX_THRES_EA  0x80
#define MIN_THRES_EA  16
#define	DEC_THRES_EA  8
idata uchar cur_smod = SMOD_SYNC;	// default
idata uchar frame_sz = 18;

// !!!!!!!! EA, EB should be initially set to prevent receiving packets
//uchar code plc_setting[] = {0x30,0x00,0x32,0x05,0x33,0x01,0x34,0x02,0x35,0x12,0x36,0x08,0x37,0xBC,0x38,0x60,0x39,0x64,0x3a,0x68,0x3b,0x6c,0x3c,0x04,0x3e,0x00,0x3f,0x00};//28 byte 傳輸速率為2400
uchar code plc_setting[] = {0x30,0x00,0x32,0x10,0x33,0x01,0x34,0x02,0x35,0x12,0x36,0x08,0x37,0x3C,0x38,0x60,0x39,0x64,0x3a,0x68,0x3b,0x6c,0x3c,0x04,0x3e,0x00,0x3f,0x00};//28 byte 傳輸速率為1200
/*
  uchar code WtFIR[] = {0x77,0x0d,0xfb,0xe8,0xfe,0xeb,0x06,0xac,0x06,0x8c,0xfb,0xba,
                              0xf4,0xae,0xfd,0x64,0x0a,0x68,0x08,0xf3,0xfb,0x38,0xf8,0xf8,
                              0xfe,0x8e,0x00,0xa7,0xfc,0x04,0x04,0x76,0x11,0x2c,0x06,0x39,
                              0xe3,0x7f,0xde,0x1a,0x13,0xfc,0x3e,0x7d,0x13,0x19,0xbb,0x4a,
                              0xb7,0x00,0x22,0xae,0x6c,0x7f,0x21,0x3f,0x9d,0xcc,0x9b,0xe5,
                              0x27,0xff,0x7f};
*/
idata uchar thres_ea;
idata uchar wet;

bit packet_recved;
bit packet_recving;
bit timeout_40s;
bit timeout_1s;
bit timeout_1m;
extern bit reply;
//bit init_set;
bit rx_adj;
bit rx_stop;
bit delay_tx;
idata uchar thres_set;
void timeout_t2(void);

/////////////////////////////////////////////////////////////////
// Data sending & receiving functions
/*=============================================================================*/
// Send a single byte
void send_data(uchar c)
{
 sync_sendchar(c);
}

/*=============================================================================*/

// Send a data block of specified length
void send_block(uchar block[], uint len)
{
  uchar i;

  for (i = 0; i < len; i++)   send_data(block[i]);

}
/*=============================================================================*/
// Register write & read operations

// Write register
void write_reg(uchar op, uchar val)
{
  uchar buf[2];

  buf[0] = op;
  buf[1] = val;
  send_block(buf, 2);
 
}
/*=============================================================================*/

// Read register. Return -1 if error,
// otherwise, the result is in the lower byte of the returned value
int read_reg(uchar op)
{
  uchar i;

 // ET0 = 0;

  send_data(op);  // send the read command
   
 /* if (cur_smod == SMOD_ASYNC) {

  //  ET0 = 1;

    return -1; // not supported
  }*/

  // sync mode
  i = 0;
  while (i++ < SYNC_WAIT) {
    if (sync_data_ready()) break;
  }

  if (!sync_data_ready()) {

   // ET0 = 1;

    return -1;  // time out
  }

  i = sync_getchar();

 // ET0 = 1;
 
  return  i;  

}
/*=============================================================================*/

// Read from buffer (multiple bytes)
int read_buffer(uchar op, uchar buf[], uint len)
{
  uint i;

 // ET0 = 0;

  //rx_clear();
  send_data(op);  // send the read command
   
  if (cur_smod == SMOD_ASYNC) {
  // async mode

   // ET0 = 1;
    return -1;
  }

  // sync mode
  i = 0;
  while (i++ < SYNC_WAIT) {
    if (sync_data_ready()) break;
  }

  if (!sync_data_ready()) {

   // ET0 = 1; 
    return -1;  // time out
  }

  i = sync_getblock(buf, len);
 // ET0 = 1;

  return i;  

}
/*=============================================================================*/
/*=============================================================================* /


// Send a command
void send_command(uchar cmd)
{
  send_data(cmd);
}

/*=============================================================================*/
// Register operations

/*
int set_sync_err(char val)
{
  ET0 = 0;
  write_reg(REG_WR_SYNC_ERR, val);
  ET0 = 1;

  // Verify
  if (read_reg(REG_RD_SYNC_ERR) != (int)val)
    return -1;

  return 0;

}

*/
/*=============================================================================*/

int set_thres_ea(uchar val)
{
 // ET0 = 0;
  write_reg(REG_WR_EA, val);  
 // ET0 = 1;

  // Verify
  if (read_reg(REG_RD_EA) != (uint)val)
    return -1;
}

/*=============================================================================*/


int set_thres_eb(uchar val)
{
 // ET0 = 0;
  write_reg(REG_WR_EB, val);
 // ET0 = 1;

  // Verify
  if (read_reg(REG_RD_EB) != (uint)val)
    return -1;
}

/*=============================================================================*/

int read_crc()
{
  return (read_reg(REG_RD_STATUS) & 0x01); 
}
/*=============================================================================*/

/*
int read_rssi(char rssi[])
{
  int val;

  val = read_reg(REG_RD_EA);
  if (val < 0) return -1;
  rssi[0] = (char)val;

  val = read_reg(REG_RD_EB);
  if (val < 0) return -1;
  rssi[1] = (char)val;

  return 0;
}
*/
/*=============================================================================*/

int write_txbuffer(uchar buffer[])
{
  send_data(BUF_WR_TXBUF);
  send_block(buffer, frame_sz);

  return 0;
}

/*=============================================================================*/

/*
int read_txbuffer(char buffer[])
{
 	return read_buffer(BUF_RD_TXBUF, buffer, frame_sz);
}
*//*
int read_rxbuffer(uchar buffer[])
{
	return read_buffer(BUF_RD_RXBUF, buffer, frame_sz);
}
/**/

/*=============================================================================* /

void send()
{
 // ET0 = 0;
  send_command(CMD_TRANSMIT);
 // ET0 = 1;
}

/*
int plc_reset()
{
  send_command(CMD_RESET);

  return 1;

}
*/
/*=============================================================================*/

//////////////////////////////////////////////////////////////////////
// High-level API function

/* this function must be called before using any PLC API functions.
   smod = SMOD_ASYNC or SMOD_SYNC, must be consistant with the hardware
   smod pin connection.

int plc_init(uint smod)
{
   cur_smod = smod;
 
   if (cur_smod == SMOD_ASYNC)
     uart_init();

   return 0;

}  */
/*=============================================================================*/

int plc_config(uchar buf[], uint len)
{
 // ET0 = 0;
  send_block(buf, len);
 // ET0 = 0;
  return 1;
}


/*=============================================================================* /
int plc_send(uchar frame[])
{
 // ET0 = 0;

  write_txbuffer(frame);
  send();  // send it!!

 // ET0 = 1;

  return 0;
}

/*=============================================================================*/
/*
int plc_resend()
{
  ET0 = 0;
  send();  // send current data in tx buffer
  ET0 = 1;

  return 0;
}
*/

/*=============================================================================*/

int plc_recved()
{
  return sync_recved();
}

/*=============================================================================*/

int plc_getframe(uchar *frame)
{
  uint res;

  res = read_buffer(BUF_RD_RXBUF, frame, frame_sz);
  
  if (res < 0) return -1;

  return frame_sz;

}

/* ================================================================* /
/* ================================================================*/

void thres_adjust(void)
{
  timeout_1s = 0;
  rx_adj = 0;
  rx_stop = 1;
  wet = 0;
  set_thres_eb(1);

  disable_t2();//<-------------------------------關40秒定時

 while(rx_stop){  //等待到上調 
     clr_wdt();
     if(timeout_40s){    //<---------------------------時間到下調	     
	    thres_ea -= DEC_THRES_EA + INC_THRES_EA;   //減8
	    if (thres_ea < MIN_THRES_EA) {thres_ea = MIN_THRES_EA; plc_power_on();} //最小16;
		timeout_40s = 0;
	    set_thres_ea(thres_ea);	
	    rx_adj = 0;
     }

    timeout_1s = 0;
    setup_t0(600, ist_count); //定時1s
    while(timeout_1s == 0){clr_wdt();}  
    if(wet > 4) {
        thres_ea +=  INC_THRES_EA;
        if (thres_ea > MAX_THRES_EA) thres_ea = MAX_THRES_EA;  //
        rx_adj = 1;     
        set_thres_ea(thres_ea);
    }
	if (wet == 4) {
        thres_ea +=  DEC_THRES_EA;
        if (thres_ea > MAX_THRES_EA){ thres_ea = MAX_THRES_EA; plc_power_on();} //
        rx_adj = 1;     
        set_thres_ea(thres_ea);
        rx_stop = 0;

    }
    else rx_stop = 0;//如果發現rx_busy不在閃,跳出
	wet = 0;
  }


  disable_t0(); //  關1秒定時 

  clr_wdt(); //重設看門狗

  thres_ea += INC_THRES_EA;
  if (thres_ea > MAX_THRES_EA) thres_ea = MAX_THRES_EA;
  set_thres_ea(thres_ea);
  // uart_sendchar(0xf0);
  // uart_sendchar(thres_ea);
  set_thres_eb(thres_ea>>1);
  wet = 0;
  setup_t2(4000, timeout_t2);
}

/*=============================================================================*/

									
void timeout_t3(void)
{
  disable_t3(); //t3_enable = 0;停計數100ms   

  // Test if RX_BUSY is still low 
  if (RX_BUSY){wet ++;} 

  else {
   // wet = 0; // recved, clear it
	packet_recved = 1;
	packet_recving = 1;
   }
}

/*=============================================================================*/
 
void RX_BUSY_ISR (void) interrupt 2		   //執行外部中斷1
{
  // RX_BUSY is low, setup t3 and test RX_BUSY again when timeout.
  setup_t3(10, timeout_t3);    //設定100ms秒時間中斷次數.
  packet_recving = 0;
  //wet ++;
}


/*=============================================================================*/
void ist_count()/*	   //計1秒中斷次數   */
{  
  timeout_1s = 1;
  //disable_t0();
}

/*=============================================================================*/

void timeout_t2(void)
{
  timeout_40s = 1;
 // disable_t2();
}

/*=============================================================================*/

void timeout_t4(void)
{
  delay_tx = 0;
 disable_t4();
}
/*=============================================================================*/
/*=============================================================================*/

// Perform initialization of PLC modem after power on
void plc_power_on(void)
{
  uint i;
  clr_wdt();
  // Reset LME2200  
 // ET0 = 0;
  RST_PLC = 0;
  for (i = 0; i < 3000; i++) {;}
  clr_wdt();
  RST_PLC = 1;
  for (i = 0; i < 100; i++) {;} 
 // ET0 = 1;
  // Configure PLC 
  plc_config(plc_setting, sizeof(plc_setting));
  clr_wdt();
  //plc_config(WtFIR,sizeof(WtFIR));
  clr_wdt();
  // Initial threshold measurement & setting
  set_thres_eb(0);
  thres_set = 0;
  thres_ea = 0x05;

  while (thres_set < 4) {
    wet = 0; 
    timeout_1s = 0;  
    setup_t0(600, ist_count); //1.6s
    // wait for 1s
    while (timeout_1s == 0) { clr_wdt();}
    disable_t0();//關1S定時
	if	(wet > 4) {
	  thres_ea += INC_THRES_EA;
	  if (thres_ea > MAX_THRES_EA)  thres_ea = MAX_THRES_EA; 
      set_thres_ea(thres_ea);
	}
	else { thres_set++; }
  }

  thres_ea += INC_THRES_EA;
  if (thres_ea > MAX_THRES_EA) thres_ea = MAX_THRES_EA; 
  set_thres_ea(thres_ea);
  set_thres_eb(thres_ea>>1);
  clr_wdt();

  packet_recved = 0;
  packet_recving = 0;
  wet = 0;
}
/*=============================================================================*/
/*=============================================================================*/

void w_flsh(uchar dat,uchar dat1)
{
   uchar buf[2];

  write_reg(REG_WR_33, dat);
  write_reg(REG_WR_3c, dat1);
  buf[0] = dat;
  buf[1] = dat1;
  EA = 0; 
  FLASH_WriteNByte(0x1c00, buf, 2);
 // FLASH_WriteByte(0x1c05,dat);	//   (int code *)&plc_setting[5]
 // FLASH_WriteByte(0x1c06,dat1);//(int code *)&plc_setting[23]  
  EA = 1;
}

/*=============================================================================*/
//              智能控制演示程序(根據UPLM2200 API協議設定)
//           接收應答處理
/*=============================================================================*/
void Rx_Command_Reply(uchar comm)
{
    uchar Command;
    Command = comm & 0x3f;
   switch(Command){ //B5~B0 命令字
   
       case 0x01:{reply = 1;}break;

       case 0x02:{reply = 0;}break;
   }
}

/*=============================================================================*/
/*=============================================================================*/

void Remote_Replies(uchar buf[])//遠程測試應答
{
    buf[0] = 0xa1;//B7B6 = 10;B5~B0 = 0x21h;

	 write_txbuffer(buf);	//寫入2200c
	 sync_sendchar(0x7e);
}

/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<軟件說明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
                              軟件修改說明在main.c,敬請留意
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<軟件說明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产欧美亚州国产日韩mv天天看完整| 亚洲精品国久久99热| 国产精品久久久久影院色老大| 亚洲欧美另类图片小说| 黄网站免费久久| 欧美日韩另类国产亚洲欧美一级| 日本一区二区三区高清不卡| 日本午夜精品一区二区三区电影| www.欧美精品一二区| 精品久久久久久综合日本欧美| 一级特黄大欧美久久久| 成人毛片视频在线观看| 日韩女优电影在线观看| 青青草成人在线观看| 欧美性猛片aaaaaaa做受| 国产精品久久久久aaaa| 狠狠色狠狠色综合日日91app| 欧美日产在线观看| 亚洲动漫第一页| 欧美亚洲日本一区| 亚洲综合网站在线观看| 在线观看日韩高清av| 亚洲色图欧美在线| 色综合色狠狠天天综合色| 日本一区二区成人| a级精品国产片在线观看| 国产精品私人影院| 99久久精品费精品国产一区二区| 国产农村妇女毛片精品久久麻豆 | 精品免费国产一区二区三区四区| 亚洲国产精品一区二区尤物区| 色婷婷av一区二区三区大白胸 | 亚洲国产成人tv| 在线亚洲免费视频| 午夜伦理一区二区| 欧美一区二区三区免费在线看| 亚洲国产日韩一级| 欧美精三区欧美精三区| 免费成人在线视频观看| 精品福利一区二区三区免费视频| 久久av中文字幕片| 久久久不卡影院| 99视频一区二区三区| 亚洲女子a中天字幕| 欧美亚洲综合另类| 麻豆91在线看| 国产女同性恋一区二区| 色综合天天视频在线观看| 亚洲高清久久久| 2020国产精品自拍| www.欧美日韩国产在线| 亚洲va国产天堂va久久en| 日韩欧美一区中文| 成人免费毛片嘿嘿连载视频| 亚洲日本在线看| 日韩欧美在线不卡| 成人免费视频一区| 午夜精品福利一区二区三区蜜桃| 欧美videos大乳护士334| 国产白丝精品91爽爽久久| 一区二区三区美女| 久久久久一区二区三区四区| 97精品国产露脸对白| 日本在线不卡视频| 国产精品久久久一本精品 | 久久久蜜桃精品| 色婷婷国产精品综合在线观看| 日韩福利电影在线| 综合激情成人伊人| 日韩欧美激情在线| 在线欧美小视频| 国产一区二区三区观看| 一区二区三区成人在线视频| 精品国产成人系列| 欧美亚日韩国产aⅴ精品中极品| 国产一区二区三区久久悠悠色av| 亚洲男人电影天堂| 久久久久久久久99精品| 欧美高清激情brazzers| 成人综合婷婷国产精品久久免费| 日本人妖一区二区| 一区二区三区国产| 国产精品免费视频一区| 日韩欧美国产1| 欧美日韩卡一卡二| 色婷婷一区二区| 99久久精品国产导航| 国产精品91一区二区| 免费看日韩a级影片| 亚洲在线观看免费视频| 国产精品九色蝌蚪自拍| 欧美国产日韩一二三区| 久久蜜桃av一区精品变态类天堂 | 香蕉成人啪国产精品视频综合网| 日本一区二区三区在线不卡| 日韩视频中午一区| 337p亚洲精品色噜噜噜| 欧洲生活片亚洲生活在线观看| 大胆欧美人体老妇| 国产激情精品久久久第一区二区 | 青青草精品视频| 午夜精品久久久久久| 亚洲一区二区三区视频在线| 亚洲激情av在线| 亚洲日本在线a| 亚洲欧美日本韩国| 亚洲精品乱码久久久久久| 亚洲日穴在线视频| 一区二区三区中文字幕| 亚洲综合激情网| 午夜不卡av在线| 日韩avvvv在线播放| 日日摸夜夜添夜夜添精品视频| 亚洲综合成人在线视频| 亚洲成人手机在线| 日本成人在线电影网| 久久精品国产色蜜蜜麻豆| 韩日av一区二区| 国产不卡在线一区| 99久久久国产精品| 欧美性xxxxxxxx| 欧美一区二区福利视频| 欧美成人福利视频| 国产日产欧产精品推荐色| 精品久久人人做人人爰| 日本一区二区免费在线观看视频 | 欧美电影免费观看高清完整版在线观看| 91麻豆精品91久久久久同性| 7777精品伊人久久久大香线蕉完整版 | 亚洲精品国产无天堂网2021| 一区二区三区欧美| 奇米四色…亚洲| 国产乱码精品一区二区三区忘忧草| 国产成人午夜精品影院观看视频| 成人福利电影精品一区二区在线观看 | 美女被吸乳得到大胸91| 国产精品一级在线| 欧美综合一区二区| 日韩亚洲欧美在线| 国产人伦精品一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲电影在线播放| 国产传媒日韩欧美成人| 91蜜桃网址入口| 精品三级在线看| 亚洲免费在线观看| 久久 天天综合| 91久久精品午夜一区二区| 欧美哺乳videos| 一区二区三区在线免费视频| 免费成人av资源网| 日本久久精品电影| 精品国产乱码久久久久久蜜臀 | 日本精品裸体写真集在线观看| 9191久久久久久久久久久| 国产视频亚洲色图| 亚洲va欧美va人人爽| 丁香激情综合国产| 日韩欧美综合一区| 亚洲午夜久久久久久久久电影网| 国产毛片精品视频| 欧美日韩亚洲综合| 中文字幕在线观看一区| 久久国产精品99久久久久久老狼 | 国产成人啪免费观看软件 | 欧美精品一区二区三区高清aⅴ | 国产一区二区不卡在线| 欧美三级蜜桃2在线观看| 欧美激情自拍偷拍| 精品亚洲欧美一区| 日韩一区二区三区四区| 亚洲精品视频一区| 成人av在线网站| 久久综合狠狠综合| 麻豆91小视频| 91精品免费观看| 亚洲一区二区视频在线观看| a亚洲天堂av| 久久精品一区二区三区四区| 麻豆精品新av中文字幕| 欧美日本一区二区三区四区| 亚洲特黄一级片| 波多野洁衣一区| 欧美国产1区2区| 国产黄色91视频| 日本一区二区电影| 国产成人在线观看免费网站| 欧美电视剧在线看免费| 日本在线不卡视频| 91精品麻豆日日躁夜夜躁| 亚洲一区在线观看免费观看电影高清| 97久久人人超碰| 一区二区三区在线免费| 色视频欧美一区二区三区| 国产精品成人免费在线| 99免费精品在线| 综合久久一区二区三区| 91免费视频大全| 一区二区三区在线观看国产| 欧洲中文字幕精品|