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

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

?? pic2448.c

?? PWM控制輸出電壓由于該程序所需完成的功能比較簡單
?? C
?? 第 1 頁 / 共 2 頁
字號:


void ini_hardware(void)			// 硬件初始化,相應設置值用英文說明,不明請參考數據手冊
{
  TRISA =0b00111111;	/* PORT_A as input */

  TRISB =0b11001000;	/* PORT_B as output(except PGD/C/M) */

  TRISC =0b11000000;	/* PORT_C as output(except TX,RX) */

  TRISD =0b11111111;	/* PORT_D as input */

  TRISE =0b00000111;	/* PORT_E as input */

  OPTION = 0b11010111;	/* TMR0 source CLKOUT, PSA=1:256 assigned to TMR0 */
  TMR0   = 0;		/* Clear TMR0 & Prescaler */
  OPTION = 0b11011111;	/* PSA=1:128 assigned to WDT */
  CLRWDT();		/* Clears WDT */

  OPTION = 0b10001111;	/* PORT_B disable pull_ups, TMR0 source CLKOUT, PSA=1:128 assigned to WDT */

  T1CON = 0b00110000;	/* 1:8 Prescale,internal Fosc/4 clock, stop TMR1 */
  TMR1L = (uint)(-17280)%256;	/* 11.059M Fosc and 1:8 Prescale, T=50 ms / 2.8935708472737137173342978569491 us */
  TMR1H = (uint)(-17280)/256;
  TMR1ON = 1;		/* restart TMR1 */

  T2CON = 0b00000100;	/* set 1:1 Prescaler,1:1 Postscale,Timer2 is on */
  PR2 = 0xFF;

  CCP1CON = 0b00001111;	/* ENABLE PWM */
  CCP2CON = 0b00001111;

  SPBRG=0x08;         	/* set bps 19200 , 11.059M OSC and low BRG */



  TXSTA=0b01000001;
  RCSTA=0b11011000;

  INTCON = 0b01000000;	/* disable GIE,enable PE INT */
  PIE1  =0b00100001;	/* enable rx,T1 INT, disable tx INT,prevent TXREG empty cause TXIF interrupt */
  PIE2  =0b00000000;

  ADDEN=1;
  TXEN=1;

  }

uchar check_rx_frame()				// 檢查接收幀是否完整
{
 uchar i=0;
 uint sum=0;

 for(i=0;i<=3;i++)								//檢驗加法和
   sum+=sio_rx_buf[i];

 id_addr=ADR_ID?0x41:0x47;	//獲得模塊組地址

 if(sum!=(sio_rx_buf[4]*256+sio_rx_buf[5]))
   return 0;

 return 1;
}

uchar process_rx_frame()			// 接收幀處理,相關命令參照通信協議說明
{
 rct_addr=sio_rx_buf[0];
 cpu3=sio_rx_buf[2]*256+sio_rx_buf[3];



 switch(sio_rx_buf[1])
   {
    case 0x11:					// 查詢
        {
               sio_tx_buf[1]=0x11;
	       if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址
		{
		 sio_tx_buf[2]=(rct_cur[rct_addr-id_addr]*10)/256;		//模塊電流和溫度
		 sio_tx_buf[3]=(rct_cur[rct_addr-id_addr]*10)%256;
		 sio_tx_buf[4]=0;
		 sio_tx_buf[5]=0;
		 return 1;																				//進入應答分支
		}
		else
		return 0;


         }
    case 0x12:					// 查詢
        {
         sio_tx_buf[1]=0x12;
	 if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址
	  {
	   sio_tx_buf[2]=0;																//交流輸入電壓和模塊電壓
	   sio_tx_buf[3]=0;
	   sio_tx_buf[4]=0;
	   sio_tx_buf[5]=0;
	   return 1;																				//進入應答分支
	  }
	 else
	   return 0;
         }
    case 0x80:					// 設限流 模塊充電限流值(2字節)
        {
         if(rct_addr==0x40)
           {
            switch (cur_type)
      	{
      		case 15:												// 15Bor10D
      		{
        		cur_pc  = (cpu3*1023) / CUR_MAX_15B;								// 轉換成PWM值
      			break;
      		}
			case 20:												// 20D
      		{
        		cur_pc  = (cpu3*1023) / CUR_MAX_20D;								// 轉換成PWM值
      			break;
      		}
      		case 25:												// 25D
      		{
        		cur_pc  = (cpu3*1023) / CUR_MAX_25D;								// 轉換成PWM值
						break;
			}
			case 30:												// 30Dor40D
      		{
        		cur_pc  = (cpu3*1023) / CUR_MAX_30D;								// 轉換成PWM值
      			break;
      		}
			default:												// 若模塊配置未完成,則充電限流值采用默認值
					break;
		   }// end of switch (rct_type)
		   

         

           cur_lmt=(cur_pc<=cur_nc)?cur_pc:cur_nc;

           }
         return 0;
         }
    case 0x81:// 整流器開機					// 設開關機
        {
         if(rct_addr==0x40)
          {
           if((sio_rx_buf[2]==0x0f)&&(sio_rx_buf[3]==0x0f))rct_pow=0xff;
          }
         else
         {
          if((sio_rx_buf[2]==0x0f)&&(sio_rx_buf[3]==0x0f))
          {
           	if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址
		   rct_pow|=(1<<(rct_addr-id_addr));
          }
         }


         return 0;
         }
    case 0x82:// 整流器關機					// 設開關機
        {
         if(rct_addr==0x40)
          {
           if((sio_rx_buf[2]==0xf0)&&(sio_rx_buf[3]==0xf0))rct_pow=0x00;
          }
         else
         {
         if((sio_rx_buf[2]==0xf0)&&(sio_rx_buf[3]==0xf0))
          {
          if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址
	    rct_pow&=~(1<<(rct_addr-id_addr));
          }

         }


         return 0;
         }

    case 0x83: // 整流器浮充
           {
           if(rct_addr==0x40)
           {
           if((sio_rx_buf[2]==0x0f)&&(sio_rx_buf[3]==0x0f))
           change=0;
           }
          return 0;
          }

    case 0x84: // 整流器均充
          {
           if(rct_addr==0x40)
           {
           if((sio_rx_buf[2]==0xf0)&&(sio_rx_buf[3]==0xf0))
           change=1;
           }
           return 0;
          }



    case 0x90: //模塊浮充電壓設置值
         {
          if (cpu3 <= DCV_MID)						// 若為24V系統
				DC_F = (cpu3*1023) / DCV_MAX_24V;	// 轉換成PWM值
		  else										// 若為48V系統
				DC_F = (cpu3*1023) / DCV_MAX_48V;

          vol_set=change?DC_J:DC_F;

          return 0;
         }
    case 0x91: //模塊均充電壓設置值
         {
         if (cpu3 <= DCV_MID)						// 若為24V系統
				DC_J = (cpu3*1023) / DCV_MAX_24V;	// 轉換成PWM值
		 else										// 若為48V系統
				DC_J = (cpu3*1023) / DCV_MAX_48V;


         

          vol_set=change?DC_J:DC_F;

          return 0;
         }
    case 0x96: // 設限流 模塊充電限流值(2字節)最大
          {
          if(rct_addr==0x40)
           {     
                flag_cfg = 1;																// 模塊類型配置完成
      	    	if(cpu3 <= 1600)cur_type = 15;	// 配置模塊電流值類型
		    	else if(cpu3 <= 2100)cur_type = 20;
			    else if(cpu3 <= 2600)cur_type = 25;
			    else cur_type = 30;	

              
      	switch (cur_type)
      	{
        	case 15:												// 15Bor10B
        	{
        		cur_nc  = (cpu3*1023) / CUR_MAX_15B;
        		break;
        	}
			case 20:												// 20D
        	{
        		cur_nc  = (cpu3*1023) / CUR_MAX_20D;
        		break;
        	}
        	case 25:												// 25D
        	{
        		cur_nc  = (cpu3*1023) / CUR_MAX_25D;
        		break;
      		}
			case 30:												// 30Dor40D
        	{
        		cur_nc  = (cpu3*1023) / CUR_MAX_30D;
        		break;
        	}
      		default:
      		{
      			flag_cfg = 0;									// 需重新配置模塊類型
      			break;
      		}
           }

           	

            cur_lmt=(cur_pc<=cur_nc)?cur_pc:cur_nc;
	
      	    	
      	     


           }

           return 0;

          }

    default:
        {
         return 0;
         }
    }

 }

void send_tx_frame()				// 發送返回信息幀
{
 uchar i=0;
 uint	sum=0;


 if(bittest(rct_no,rct_addr-id_addr)==0x00)
 return ;


 //構造發送信息幀
 sio_tx_buf[0]=rct_addr;
 sio_tx_buf[6]=0;
 sio_tx_buf[6]|= ((flag_cfg == 0) || (cur_lmt > 1023)) ? 0x40 : 0x00;	// 若需要配置模塊類型, 或者模塊輸出電流超界, 則發送設置值bit=1


 //if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址
 sio_tx_buf[6]|=((bittest(~rct_pow,rct_addr-id_addr))<<0);

 sio_tx_buf[6]|=(cur_nc>=1023)?0x40:0x00;

 sio_tx_buf[7]=0;
 //if((rct_addr-id_addr>=0)&&(rct_addr-id_addr<=5))	//若是本組模塊地址



 //sio_tx_buf[7]|=(rct_cur[rct_addr-id_addr]<5)?0x80:0x00;

 sio_tx_buf[7]|=((bittest(rct_warn,rct_addr-id_addr))<<7);

 if(bittest(~rct_pow,(rct_addr-id_addr)))sio_tx_buf[7]=0;



 for(i=0;i<SIO_TX_LEN-2;i++)				//校驗和
   sum+=sio_tx_buf[i];
 sio_tx_buf[8]=sum/256;
 sio_tx_buf[9]=sum%256;
  //構造完畢

 EN485 = 0;
 sio_tx_num = 0;

 TX9D=1;
 TXIE  = 1;
 TXREG = sio_tx_buf[0];		//start send frame 啟動發送
 sio_rx_num = 0;        	//restart receive  重啟接收
 }

void interrupt IntService(void)  //中斷處理子程序 
{

 if(TMR1IF)     //50 ms 中斷處理 
 {
  TMR1IF=0;
  TMR1ON=0;
  TMR1L = (uint)(-17280)%256;	//11.059M Fosc and 1:8 Prescale, T=50 ms / 2.8935708472737137173342978569491 us
  TMR1H = (uint)(-17280)/256;
  TMR1ON=1;

  ticks++;
  if(ticks > 19)
    {
     ticks = 0;
     secs++;
     norx_secs++;
     if(norx_secs > 250)
        norx_secs = 250;

     if(secs>=59)
     {
      secs=0;

     }

     }
  }


 if((!EN485) && TXIF)	//發送中斷處理
 {
  sio_tx_num++;
  TX9D=0;

  if(sio_tx_num <SIO_TX_LEN+1)	//send 1 more invalid byte <<echo_info.sio_tx_buf[SIO_TX_LEN]>>
		        	//insure last TSR send over
    {
     TXREG = sio_tx_buf[sio_tx_num];
     }
  else
    {
     sio_tx_num=SIO_TX_LEN+1;
     TXIE  = 0;
     EN485 = 1;
     }
  }

 while(RCIF)   //接收中斷處理
  {
   img_RCSTA = RCSTA;
   img_RCREG = RCREG;

   if(img_RCSTA & 0x04)	//frame error
     {
      continue;
      }

   if(img_RCSTA & 0x02)	//receive over_run error
     {
      CREN = 0;
      _NOP_;
      CREN = 1;		//reset CREN

      continue;
      }

   if(sio_rx_num)				// 已經開始接收
    {
     sio_rx_buf[sio_rx_num] = img_RCREG;
     sio_rx_num++;
     if(sio_rx_num >= SIO_RX_LEN)
       {ADDEN=1;
        sio_rx_num = 0;
        if(check_rx_frame())
          {
           norx_secs = 0;
           if(process_rx_frame())
             {
              send_tx_frame();
              }

           }

        }
     }
   else						// 未開始接收
    {
     if((img_RCREG&0xC0)==0x40)			// 收到“頭“標志
       {
        sio_rx_buf[0] =img_RCREG;
        sio_rx_num = 1;
        ADDEN=0;
        }
     }
   }

 return;
 }


void main()
{
 //uchar t;
 //uint i,j;

 static uchar turn_ticks;

 //get_warn_status();

 di();

 ini_hardware();

 EN485 = 1;		// set 485 receive
 RLSW  = 0;		// RELAY OFF 		繼電器脫開,(信號不穩定前,不輸出)

 rct_pow = 0xff;
 pow_process();		// all rect power on	全開機

 vol_set = 750;
 pwm_vol_set = 750;	// out vol 46V	設輸出46V

 cur_lmt = 1023;
 pwm_cur_lmt = 1023;	// no out cur limit	無限流

 set_pwm_out();

 delay(100);					// 延時,使控制信號穩定

 ticks = 0;
 secs  = 0;
 norx_secs = 0;

 sio_rx_num = 0;
 sio_tx_num = SIO_TX_LEN + 1;

 ei();

 RLSW  = 1;					// RELAY ON 繼電器閉合,(信號穩定,輸出)

 while(1)					// 主循環
 {
  CLRWDT();					// 清看門狗

  start_measure();			// 測量模擬量
  pow_process();			// 處理關機
  get_warn_status();		// 測量模塊狀態

  if(norx_secs > 10)		// 無通信超過10秒,繼電器脫開,模塊電壓,電流均不控
    RLSW  = 0;	        	// RELAY OFF
  else
    RLSW  = 1;	        	// RELAY ON


   if(norx_secs >= 240)
    {
     vol_set=900;
     cur_lmt=1023;
     rct_pow=0xff;
    }


  if(turn_ticks != ticks)		// 每過50ms
    {
     turn_ticks = ticks;
     calcu_vol_set_pwm();		// 計算調壓值
     calcu_cur_lmt_pwm();
     _NOP_;
     set_pwm_out();				// 調整PWM輸出
     }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情文学综合插| 日韩电影免费一区| 亚洲一区二区三区四区五区中文 | 色综合中文字幕国产 | 久久99久久久欧美国产| 99久久99久久精品免费看蜜桃| 欧美精三区欧美精三区| 国产精品日日摸夜夜摸av| 日韩av电影一区| 欧美性猛片xxxx免费看久爱| 中文字幕精品在线不卡| 麻豆久久久久久久| 欧美日韩国产系列| 亚洲精品成人在线| 91在线看国产| 国产精品看片你懂得| 国产精品中文字幕日韩精品 | 在线看日本不卡| 国产精品视频一区二区三区不卡| 免费观看在线综合色| 欧美日韩小视频| 亚洲愉拍自拍另类高清精品| 成人免费观看av| 日本一区二区视频在线| 国产一区美女在线| 久久综合久久鬼色中文字| 舔着乳尖日韩一区| 欧美裸体一区二区三区| 久久久久久免费| 色婷婷综合久久久久中文一区二区 | 一区二区三区自拍| 精品日韩成人av| 7777精品伊人久久久大香线蕉最新版| 国产在线一区观看| 精久久久久久久久久久| 亚洲欧洲国产专区| 一区二区欧美国产| 韩国女主播一区| 欧美日韩国产一二三| 亚洲不卡在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 蜜桃久久久久久久| 欧美成人高清电影在线| 韩国v欧美v日本v亚洲v| 国产午夜精品福利| gogo大胆日本视频一区| 一区二区三区 在线观看视频| 欧美日韩精品一区二区三区蜜桃| 天天色综合成人网| 精品久久99ma| 狠狠色丁香久久婷婷综| 中文字幕乱码一区二区免费| 色综合久久精品| 午夜精品福利视频网站| 欧美v日韩v国产v| 成人av网址在线| 亚洲午夜私人影院| 欧美videossexotv100| 国产成人在线看| 亚洲制服丝袜av| 久久这里都是精品| 91麻豆免费视频| 奇米一区二区三区| 国产精品理伦片| 欧美日本一区二区在线观看| 精品在线免费视频| 亚洲另类在线制服丝袜| 欧美一区二区三区影视| 成人av在线资源| 免费久久99精品国产| 亚洲色图在线播放| 精品国产乱码久久久久久老虎| av在线不卡电影| 国产视频不卡一区| 亚洲一区二区三区视频在线| 日韩理论片在线| 日韩欧美亚洲另类制服综合在线| av激情成人网| 黄网站免费久久| 一区二区三区91| 中文欧美字幕免费| 精品久久久网站| 精品视频1区2区| 99精品热视频| 国产一区二区导航在线播放| 性感美女久久精品| 亚洲视频综合在线| 久久久久久久久久久99999| 欧美日韩视频一区二区| 成人爱爱电影网址| 国产不卡视频在线观看| 日本视频在线一区| 亚洲人妖av一区二区| 久久综合国产精品| 5566中文字幕一区二区电影| 97久久精品人人澡人人爽| 国内成人免费视频| 蜜桃av一区二区在线观看 | 精品久久久久av影院| 久久99精品久久久久| 91精品国产综合久久精品麻豆| 亚洲高清不卡在线观看| 欧美高清在线精品一区| 波多野结衣视频一区| 亚洲与欧洲av电影| 精品国产一区久久| 国产suv精品一区二区6| 国产精品国产三级国产a| 一本久久a久久精品亚洲| 亚洲国产日韩a在线播放| 午夜久久久久久久久| 岛国精品一区二区| 成人福利视频在线| 免费高清不卡av| 日韩在线一区二区| 肉色丝袜一区二区| 狠狠色丁香久久婷婷综| 久久精品一区四区| 亚洲精品一区二区三区精华液| 欧美一区日韩一区| 91精品国产黑色紧身裤美女| 欧美日韩不卡一区| 欧美一区二区在线观看| 欧美大片拔萝卜| 奇米一区二区三区av| 91福利在线播放| 欧美精品自拍偷拍动漫精品| www.日韩av| 亚洲精品一区二区在线观看| 久久免费看少妇高潮| 久久这里只有精品6| 久久久久久久久久久电影| 中文欧美字幕免费| 亚洲与欧洲av电影| 蜜臀精品一区二区三区在线观看| 精品中文av资源站在线观看| 国产精品亚洲一区二区三区妖精 | 国产精品久久久久久久久免费相片| 中文字幕高清一区| 亚洲一区二区在线免费看| 婷婷六月综合亚洲| 国产成人在线影院| 欧美视频在线一区| 久久久久免费观看| 一区二区三区成人| 激情成人综合网| 91免费观看国产| 日韩欧美国产一区在线观看| 中文字幕成人av| 亚洲午夜私人影院| 国产99久久久久久免费看农村| 色综合色综合色综合| 日韩一区二区在线观看视频| 欧美精彩视频一区二区三区| 亚洲图片欧美视频| 成人综合日日夜夜| 欧美一区二区网站| 亚洲欧美在线视频观看| 美美哒免费高清在线观看视频一区二区| 国产精品一二三区| 884aa四虎影成人精品一区| 国产欧美日本一区视频| 视频在线观看91| 成人av网址在线| 久久奇米777| 午夜精品视频一区| 成人激情开心网| 欧美成人a在线| 亚洲图片自拍偷拍| a亚洲天堂av| xvideos.蜜桃一区二区| 丝袜国产日韩另类美女| 91在线精品秘密一区二区| 国产午夜精品一区二区三区四区| 五月婷婷综合网| 色狠狠色狠狠综合| 中文字幕中文字幕在线一区| 久久99蜜桃精品| 日韩一区国产二区欧美三区| 亚洲制服丝袜av| 日本韩国一区二区三区| 国产精品免费丝袜| 国产剧情在线观看一区二区| 欧美一区二区成人| 婷婷六月综合网| 欧美三级在线播放| 一区二区三区高清在线| 色哟哟亚洲精品| 亚洲精品免费视频| 色婷婷激情综合| 亚洲精品免费一二三区| 色综合久久天天综合网| 18成人在线观看| 波多野结衣欧美| 中文字幕一区免费在线观看| 国产不卡一区视频| 国产精品理论在线观看| 99v久久综合狠狠综合久久| 亚洲欧洲精品一区二区三区| 成人动漫在线一区|