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

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

?? main.c

?? 單片機控制的USB與can轉換源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//***************************************************
//  filename: main.c
//  Author: wen
//  Rewrite:
//  Date: 2007-01-10
//  Version: V1.0
//  Description: ALL main.c file
//****************************************************

//****************************************************
//修改
//文小龍
//提供接收及發送BUFFER,USB數據改為中斷上傳和批量下傳方式,即采用EP1IN,EP2OUT
//****************************************************

#include<include.h>
#include<reg52.h>
#include<string.h>

sbit LED_Low= P1^4;


//****************************************************
//CAN bus function
/*
//函數原型:  bit   CAN_CREATE_COMMUNATION(void)
//           0: 表示SJA1000接口正常
//           1: 表示SJA1000與處理器接口不正常
//說明:該函數用于檢測CAN控制器的接口是否正常
bit CAN_CREATE_COMMUNATION(void)
{
    SJA_CANAdr= SJA_TEST;                     //訪問測試寄存器
    *SJA_CANAdr=0xaa;                     //寫入測試值
    if(*SJA_CANAdr== 0xaa)                  //回讀
       return  0;                          //讀測試正確
    else
       return  1;
}  */

//函數原型:      bit   CAN_ENTER_RETMODEL(void)
//返回值:
//           0 ; 表示成功進入復位工作模式
//           1 ; 表示不能進入復位工作模式                                                                                                     *
//說明:      CAN控制器進入復位工作模式
bit CAN_ENTER_RETMODEL(void)
{
    INT8U TempData;
    SJA_CANAdr= SJA_MOD;			     //訪問地址指向模式寄存器
    TempData=  *SJA_CANAdr;                          //保存原始值
    *SJA_CANAdr= (TempData|0x01);                     //置位復位請求
    if((*SJA_CANAdr&0x01)== 1)
       return   0;
    else
       return   1;
}
/*
//函數原型:      bit   CAN_QUIT_RETMODEL(void)
//返回值:
//           0: 表示成功退出復位工作模式
//           1: 表示不能退出復位工作模式
//說明:      CAN控制器退出復位工作模式
bit CAN_QUIT_RETMODEL(void)
{
    INT8U TempData;
    SJA_CANAdr= SJA_MOD;                   //訪問地址指向模式寄存器
    TempData= *SJA_CANAdr;                       //保存原始值
    *SJA_CANAdr=(TempData&0xfe);       		 //清除復位請求
    if((*SJA_CANAdr&0x01) == 0)
       return   0;                              //退出成功
    else
       return   1;                    	       //退出失敗
}
*/
//函數原型:  bit   CAN_DATA_WRITE(unsigned char *SendDataBuf)
//參數說明:  特定幀格式的數據發送
//返回值:
//           0    ; 表示將數據成功的發送至發送緩沖區
//           1	  ; 表示上一次的數據正在發送,
//                ; 表示發送緩沖區被鎖定,不能寫入數據
//                ; 表示寫入數據錯誤
bit CAN_DATA_WRITE(unsigned char *SendDataBuf)
{
   INT8U TempCount;
   SJA_CANAdr= SJA_SR;      //訪問地址指向狀態寄存器
  if((*SJA_CANAdr&0x08)== 0)         //判斷上次發送是否完成
      return  1;

   if((*SJA_CANAdr&0x04)== 0)          //判斷發送緩沖區是否鎖定
      return  1;

   SJA_CANAdr=  SJA_RXEFF;
   switch(SendDataBuf[0]&0xC0)	//對PelicCAN mode 數據格式進行判斷
   {
   	case 0x40:		//標準遠程幀
   		TempCount= 3;
   	break;
   	case 0x00:		//標準數據幀
   		TempCount= (SendDataBuf[0]&0x0f)+ 3;
   	break;
   	case 0xC0:		//擴展遠程幀
   		TempCount= 5;
   	break;
   	case 0x80:		//擴展數據幀
   		TempCount= (SendDataBuf[0]&0x0f)+ 5;
        break;
   	default:		//退出,返回1
   		return 1;
   	break;
   }

    memcpy(SJA_CANAdr,SendDataBuf,TempCount);     //將數據傳入SJA1000CAN數據發送緩沖區

    SJA_CANAdr= SJA_CMR;        //置位發送請求
    *SJA_CANAdr= 0x01;
    return 0;
}

//函數原型:  bit   CAN_DATA_RECEIVE(unsigned char *RcvDataBuf);
//參數說明:  RcvDataBuf,存放微處理器保存數據緩沖區
//返回值:    0;接收成功
//           1;接收失敗
//說明:CAN控制器接收數據,僅限于接收數據
bit CAN_DATA_RECEIVE(INT8U *RcvDataBuf)
{
   INT8U TempCount;
   SJA_CANAdr= SJA_SR;     		//訪問地址指向狀態寄存器

   if((*SJA_CANAdr&0x01)==0)               //判斷報文是否有效
      return 1;

   SJA_CANAdr= SJA_RXEFF;
   switch(*SJA_CANAdr&0xC0)
   {
	case 0x00:				//標準數據幀
		TempCount= (*SJA_CANAdr&0x0f)+ 3;
	break;
	case 0x40:				//標準遠程幀
		TempCount= 3;
    break;
	case 0x80:				//擴展數據幀
		TempCount= (*SJA_CANAdr&0x0f)+ 5;
    break;
	case 0xC0:				//擴展遠程幀
		TempCount= 5;
    break;
	default: break;
   }
   memcpy(RcvDataBuf,SJA_CANAdr,TempCount);//讀取接收緩沖區的報文
   RecDataFromCanLength= TempCount;            //置標志位
   return  0;
 }

//函數原型:void SJA_Init(void);
//無參數,無返回值
//說明:SJA初始化
void SJA_Init(void)
 {
 	INT8U i;

 	EA= 0;

 	//進入復位模式
 	for(i= 0; i< 500; i++)
 		if(!CAN_ENTER_RETMODEL())   break;

        SJA_CANAdr= SJA_IER;
        *SJA_CANAdr= 0x00;         //清除所有中斷

        SJA_CANAdr= SJA_CDR;
        *SJA_CANAdr= 0xC8;          //設定PeliCAN模式,禁止CLKOUT,使能CBP



 	//設定ACR0~3 AMR0~3  EFF
	SJA_CANAdr= SJA_ACR0;
	for(i=0;i<8;i++)
 	{
		*SJA_CANAdr= i2c_read(0x05+ i);
		SJA_CANAdr++;
	}
        //test



  //設定波特率
	SJA_CANAdr= SJA_BTR0;
	*SJA_CANAdr= 0x18; //i2c_read(0x01);
	SJA_CANAdr= SJA_BTR1;
	*SJA_CANAdr= 0x1c; //i2c_read(0x02);

	//配置CAN輸出 TX1懸空 TX0推免
	SJA_CANAdr= SJA_OCR;
	*SJA_CANAdr= 0x1A;        //0x00|0x18|0x02

	SJA_CANAdr= SJA_RBSA;
	*SJA_CANAdr= 0x00;       //接收緩沖地址置零

	SJA_CANAdr= SJA_RXERR;
	*SJA_CANAdr= 0x00;      //接收錯誤計數器置零

	SJA_CANAdr= SJA_TXERR;
	*SJA_CANAdr= 0x00;      //發送錯誤計數器置零

	//讀取錯誤代碼器,器件自動將錯誤代碼器歸零
  SJA_CANAdr= SJA_ECC;
  i= *SJA_CANAdr;

	SJA_CANAdr= SJA_IER;
	*SJA_CANAdr= 0xFF;      //設置SJA1000中斷使能

   	//清除復位模式
	//關閉自我測試及僅聽模式
	//清除休眠模式
	//選擇單濾波模式
      SJA_CANAdr= SJA_MOD;
     *SJA_CANAdr= 0x08;
      EA= 1;

      SJA_CANAdr= SJA_CMR;
      *SJA_CANAdr= 0x0c;        //釋放接收/發送緩存區
}
//CAN bus function end
//****************************************************

//***************************************************
//USB function define
#define DELAY_START_VALUE		1	  //根據單片機的時鐘選擇延時初值

//IO位置定義
IOPORT CH375_CMD_PORT _at_ 0xFD00;		// CH375命令端口的I/O地址
IOPORT CH375_DAT_PORT _at_ 0xFC00;		// CH375數據端口的I/O地址

//延時1微秒,不精確
void	Delay1us( )
{
#if DELAY_START_VALUE!= 0
	INT8U i;
	for ( i=DELAY_START_VALUE; i!=0; i-- );
#endif
}

//延時2微秒,不精確
void	Delay2us( )
{
	INT8U i;
	for ( i=DELAY_START_VALUE*2+1; i!=0; i-- );
}

//與CH372/CH375有關的基本I/O操作
void CH375_WR_CMD_PORT(INT8U cmd) {   //向CH372/CH375寫入命令
	Delay2us();
	CH375_CMD_PORT= cmd;
	Delay2us();
}

void CH375_WR_DAT_PORT(INT8U dat) {  //向CH372/CH375寫入數據
	CH375_DAT_PORT= dat;
	Delay1us();
}

INT8U CH375_RD_DAT_PORT( void ) {      //讀CH372/CH375內部數據
	Delay1us();
	return(CH375_DAT_PORT);
}

//CH375初始化子程序
void CH375_Init( void )
{
	INT8U i;

	#ifdef MY_USB_VENDOR_ID
	#ifdef MY_USB_PRODUCT_ID
		CH375_WR_CMD_PORT( CMD_SET_USB_ID );
		CH375_WR_DAT_PORT( (UINT8)MY_USB_VENDOR_ID );
		CH375_WR_DAT_PORT( (UINT8)(MY_USB_VENDOR_ID>>8) );
		CH375_WR_DAT_PORT( (UINT8)MY_USB_PRODUCT_ID );
		CH375_WR_DAT_PORT( (UINT8)(MY_USB_PRODUCT_ID>>8) );
	#endif
	#endif

        // 設置USB工作模式
	CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
	CH375_WR_DAT_PORT( 2 );     // 設置為使用內置固件的USB設備方式
	for (i= 100; i!= 0; i--)
		if(CH375_RD_DAT_PORT()== CMD_RET_SUCCESS)   break;  // 等待操作成功

	#ifdef ENABLE_USB_SUSPEND
	// 設置檢查USB總線掛起狀態,便于在USB總線掛起時使CH375也進入低功耗狀態
		CH375_WR_CMD_PORT( CMD_CHK_SUSPEND );  // 設置檢查USB總線掛起狀態的方式
		CH375_WR_DAT_PORT( 0x10 );
		CH375_WR_DAT_PORT( 0x04 );  // 以50mS為間隔檢查USB掛起
	#endif
}
//USB function define end
//********************************************************

//********************************************************
//others function define

//函數原型:void USB_INT1(void) interrupt 2
//無參數,無返回值
//說明:外部中斷1服務函數
void USB_INT1(void) interrupt 2
{
	INT8U			IntStatus;
	INT8U			cnt;
	PINT8U			buf;
    EA= 0;
	CH375_WR_CMD_PORT(CMD_GET_STATUS);  //獲取中斷狀態并取消中斷請求
	IntStatus = CH375_RD_DAT_PORT( );     // 獲取中斷狀態
	IE0 = 0;                              //清中斷標志
	switch(IntStatus)
        {                  // 分析中斷狀態
		case USB_INT_EP2_OUT:          // 批量端點下傳成功,接收到數據
		{
			CH375_WR_CMD_PORT( CMD_RD_USB_DATA );
			RecDataFromUsbLength = cnt = CH375_RD_DAT_PORT( );  // 首先讀取后續數據長度
			if ( cnt ) {  // 接收到數據放到緩沖區中
				buf= RecDataFromUsb;  // 指向緩沖區
				do {
                    *buf = CH375_RD_DAT_PORT( );  // 接收命令包的數據
					buf ++;
				} while ( -- cnt );
			}
		}break;
		case USB_INT_EP2_IN:  // 批量端點上傳成功,數據發送成功
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  //釋放當前USB緩沖區,收到上傳成功中斷后,必須解鎖USB緩沖區,以便繼續收發
		break;
		case USB_INT_EP1_IN:  // 中斷端點上傳成功,中斷數據發送成功
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  // 釋放當前USB緩沖區
		break;
		case USB_INT_EP1_OUT:  // 輔助端點下傳成功,接收到輔助數據
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  // 釋放當前USB緩沖區
		break;
                #ifdef ENABLE_USB_SUSPEND   //總線掛起狀態查詢
		case USB_INT_USB_SUSPEND:
                {
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );
			CH375_WR_CMD_PORT( CMD_ENTER_SLEEP );
                 }
		break;
		case USB_INT_WAKE_UP:
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );
		break;
                #endif
		default:
			CH375_WR_CMD_PORT( CMD_UNLOCK_USB );  // 釋放當前USB緩沖區
			break;
	}
	EA= 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲制服欧美中文字幕中文字幕| 精品va天堂亚洲国产| 中文av字幕一区| bt欧美亚洲午夜电影天堂| 亚洲欧美日韩国产另类专区| 欧美人狂配大交3d怪物一区| 毛片不卡一区二区| 久久这里只精品最新地址| 91蜜桃视频在线| 另类人妖一区二区av| 国产精品第四页| 欧美一级日韩免费不卡| 成人综合在线观看| 婷婷六月综合亚洲| 中文字幕中文字幕中文字幕亚洲无线| 精品国产乱码久久久久久老虎| 日韩手机在线导航| 欧美丝袜丝交足nylons图片| 国产精品一区二区三区四区 | 亚洲五月六月丁香激情| 日韩精品在线一区| 欧美日韩中字一区| 成人免费av在线| www.综合网.com| 在线观看免费视频综合| 久草热8精品视频在线观看| 亚洲精品高清视频在线观看| 国产欧美1区2区3区| 日韩欧美www| 欧美国产1区2区| 久久久久久久综合| 精品国产亚洲一区二区三区在线观看| 日韩欧美成人午夜| 亚洲少妇30p| 亚洲三级视频在线观看| 亚洲午夜精品在线| 国产成人丝袜美腿| 国产成人综合亚洲91猫咪| 91小视频在线免费看| 日韩一区二区三区三四区视频在线观看 | 亚洲欧洲国产日本综合| 国产女主播视频一区二区| 亚洲免费观看高清| 国内成+人亚洲+欧美+综合在线| 三级成人在线视频| 午夜精品爽啪视频| 成人免费观看av| 欧美日韩一区二区三区不卡| 久久综合色鬼综合色| 亚洲一区二区三区四区中文字幕| 久久精品国产亚洲高清剧情介绍| 夫妻av一区二区| 北条麻妃一区二区三区| 欧美一区二区成人| 一区二区三区四区乱视频| 亚洲一区在线观看免费| 国产一区二区三区精品视频| 国产成人av电影免费在线观看| 欧美羞羞免费网站| 亚洲欧美在线aaa| 国产中文字幕一区| 制服丝袜激情欧洲亚洲| 日韩免费成人网| 亚洲一区二区三区三| 99re在线精品| 欧美精品乱人伦久久久久久| 日韩欧美一区二区三区在线| 一区二区三区蜜桃| 91麻豆swag| 中文字幕亚洲不卡| 波多野结衣在线aⅴ中文字幕不卡| 99这里都是精品| 久久久精品黄色| 国产一区二区主播在线| 日韩欧美另类在线| 男女激情视频一区| 91亚洲国产成人精品一区二区三 | 欧美日韩色一区| 亚洲美女免费在线| 色8久久人人97超碰香蕉987| 日韩欧美资源站| 日本欧美肥老太交大片| 不卡在线观看av| 国产精品亲子乱子伦xxxx裸| 国产suv精品一区二区6| 久久久久88色偷偷免费| 国产91在线|亚洲| 欧美国产精品久久| 色婷婷国产精品综合在线观看| 精品国产伦一区二区三区免费| 蜜臀精品久久久久久蜜臀 | 成人午夜av在线| 国产精品高潮呻吟久久| 99麻豆久久久国产精品免费 | 国产丝袜在线精品| 亚洲va国产天堂va久久en| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久99精品国产麻豆婷婷 | 色偷偷88欧美精品久久久| 亚洲一区二区精品视频| 5566中文字幕一区二区电影| 久久99精品久久只有精品| 久久精品人人爽人人爽| 91视频免费播放| 日本不卡一二三| 欧美精品一区二区三区在线| 成人国产电影网| 亚洲国产视频在线| 国产三级一区二区| 在线视频欧美精品| 国产一区免费电影| 亚洲视频资源在线| www国产成人| 一本色道久久综合亚洲aⅴ蜜桃| 日韩高清一级片| 中文久久乱码一区二区| 欧美色图一区二区三区| 国产毛片一区二区| 午夜久久久久久| 国产精品视频一二三区| 欧美二区乱c少妇| 成人一区二区视频| 日本特黄久久久高潮| 成人欧美一区二区三区视频网页| 91精品国产乱码| 99re在线视频这里只有精品| 久久精品二区亚洲w码| 亚洲国产一区二区视频| 国产精品乱码人人做人人爱 | 国产一区在线精品| 亚洲成av人影院| 成人免费在线观看入口| 精品少妇一区二区三区视频免付费| 免费成人小视频| 一区二区三区丝袜| 欧美国产精品中文字幕| 欧美mv日韩mv亚洲| 7777精品伊人久久久大香线蕉超级流畅 | 精品免费视频.| 制服丝袜国产精品| 欧美在线你懂的| 色综合激情久久| 成人97人人超碰人人99| 国产福利91精品| 国产一区 二区| 精品一区二区免费| 狠狠色丁香婷婷综合| 免费成人av资源网| 日本成人在线网站| 日韩av电影免费观看高清完整版在线观看 | 欧美电视剧免费全集观看| 欧美人与禽zozo性伦| 欧美日韩亚洲另类| 欧美撒尿777hd撒尿| 欧美日韩在线观看一区二区| 色网站国产精品| 欧美日韩黄色影视| 欧美高清激情brazzers| 3atv一区二区三区| 日韩欧美国产系列| 久久精品夜色噜噜亚洲aⅴ| 久久网站热最新地址| 国产亚洲欧美激情| 国产精品你懂的| 亚洲欧美激情一区二区| 亚洲国产精品久久艾草纯爱| 亚洲电影欧美电影有声小说| 日韩福利电影在线观看| 老司机精品视频线观看86| 韩国av一区二区三区四区 | 国产精品人人做人人爽人人添 | 亚洲综合精品自拍| 偷拍日韩校园综合在线| 免费一级片91| 丰满放荡岳乱妇91ww| av成人动漫在线观看| 日本乱人伦aⅴ精品| 欧美午夜一区二区三区| 欧美一区中文字幕| 欧美精品一区二区三区在线播放| 欧美国产成人在线| 亚洲成人精品一区二区| 另类专区欧美蜜桃臀第一页| 国产91精品精华液一区二区三区| 成人av片在线观看| 717成人午夜免费福利电影| 精品国产一区二区三区忘忧草| 国产精品欧美久久久久无广告| 亚洲精品乱码久久久久久黑人| 视频一区国产视频| 国产999精品久久| 欧美精品vⅰdeose4hd| 亚洲国产精品ⅴa在线观看| 亚洲高清一区二区三区| 粉嫩av一区二区三区粉嫩| 欧美日韩综合在线免费观看| 久久久久久久久99精品| 香蕉加勒比综合久久| 99久久久国产精品| 日韩美女一区二区三区四区|