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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ch375prt.c

?? usb375打印機(jī)驅(qū)動(dòng)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 2004.03.05, 2004.8.18, 2005.12.29
****************************************
**  Copyright  (C)  W.ch  1999-2005   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB 1.1 Host Examples for CH375   **
**  KC7.0@MCS-51                      **
****************************************
*/
/* 單片機(jī)通過CH375控制USB打印機(jī) */
/* 程序示例,C語言,CH375中斷為查詢方式,只負(fù)責(zé)數(shù)據(jù)傳輸,不涉及打印格式及打印描述語言 */
/* 另可提供多臺計(jì)算機(jī)共享一臺USB打印機(jī)的方案 */

/* 以下定義適用于MCS-51單片機(jī),其它單片機(jī)參照修改,為了提供C語言的速度需要對本程序進(jìn)行優(yōu)化 */
#include <reg51.h>
unsigned char volatile xdata	CH375_CMD_PORT _at_ 0xBDF1;	/* CH375命令端口的I/O地址 */
unsigned char volatile xdata	CH375_DAT_PORT _at_ 0xBCF0;	/* CH375數(shù)據(jù)端口的I/O地址 */
sbit	CH375_INT_WIRE	=		0xB0^2;	/* P3.2, INT0, 連接CH375的INT#引腳,用于查詢中斷狀態(tài) */
typedef	unsigned char BOOL1;  /* typedef	bit	BOOL1; */

/* 以下為通用的單片機(jī)C程序 */
#include <string.h>
#include <stdio.h>

/* 定義CH375命令代碼及返回狀態(tài) */
#include "CH375INC.H"

typedef unsigned char	UCHAR;
typedef unsigned short	USHORT;

typedef struct _USB_DEVICE_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT bcdUSB;
    UCHAR bDeviceClass;
    UCHAR bDeviceSubClass;
    UCHAR bDeviceProtocol;
    UCHAR bMaxPacketSize0;
    USHORT idVendor;
    USHORT idProduct;
    USHORT bcdDevice;
    UCHAR iManufacturer;
    UCHAR iProduct;
    UCHAR iSerialNumber;
    UCHAR bNumConfigurations;
} USB_DEV_DESCR, *PUSB_DEV_DESCR;

typedef struct _USB_CONFIG_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT wTotalLength;
    UCHAR bNumInterfaces;
    UCHAR bConfigurationValue;
    UCHAR iConfiguration;
    UCHAR bmAttributes;
    UCHAR MaxPower;
} USB_CFG_DESCR, *PUSB_CFG_DESCR;

typedef struct _USB_INTERF_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bInterfaceNumber;
    UCHAR bAlternateSetting;
    UCHAR bNumEndpoints;
    UCHAR bInterfaceClass;
    UCHAR bInterfaceSubClass;
    UCHAR bInterfaceProtocol;
    UCHAR iInterface;
} USB_ITF_DESCR, *PUSB_ITF_DESCR;

typedef struct _USB_ENDPOINT_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bEndpointAddress;
    UCHAR bmAttributes;
    UCHAR wMaxPacketSize;
    UCHAR wMaxPacketSize1;
    UCHAR bInterval;
} USB_ENDP_DESCR, *PUSB_ENDP_DESCR;

typedef struct _USB_CONFIG_DESCRIPTOR_LONG {
	USB_CFG_DESCR	cfg_descr;
	USB_ITF_DESCR	itf_descr;
	USB_ENDP_DESCR	endp_descr[4];
} USB_CFG_DESCR_LONG, *PUSB_CFG_DESCR_LONG;

unsigned char buffer[64];		/* 公用緩沖區(qū) */

/* 延時(shí)2微秒,不精確 */
void	delay2us( )
{
	unsigned char i;
	for ( i = 2; i != 0; i -- );
}

/* 延時(shí)1微秒,不精確 */
void	delay1us( )
{
	unsigned char i;
	for ( i = 1; i != 0; i -- );
}

/* 以毫秒為單位延時(shí),不精確,適用于24MHz時(shí)鐘 */
void	mDelaymS( unsigned char delay )
{
	unsigned char	i, j, c;
	for ( i = delay; i != 0; i -- ) {
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時(shí)鐘下延時(shí)500uS */
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時(shí)鐘下延時(shí)500uS */
	}
}

/* 基本操作 */

void CH375_WR_CMD_PORT( unsigned char cmd ) {  /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */
	delay2us();
	CH375_CMD_PORT=cmd;
	delay2us();
}

void CH375_WR_DAT_PORT( unsigned char dat ) {  /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */
	CH375_DAT_PORT=dat;
	delay1us();  /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時(shí) */
}

unsigned char CH375_RD_DAT_PORT() {  /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */
	delay1us();  /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時(shí) */
	return( CH375_DAT_PORT );
}

unsigned char wait_interrupt() {  /* 主機(jī)端等待操作完成, 返回操作狀態(tài) */
	unsigned short i;
//	while( CH375_INT_WIRE );  /* 查詢等待CH375操作完成中斷(INT#低電平) */
	for ( i = 0; CH375_INT_WIRE != 0; i ++ ) {  /* 如果CH375的中斷引腳輸出高電平則等待,通過計(jì)數(shù)防止超時(shí) */
		delay1us();
		if ( i == 0xF000 ) CH375_WR_CMD_PORT( CMD_ABORT_NAK );  /* 如果超時(shí)達(dá)61mS以上則強(qiáng)行終止NAK重試,中斷返回USB_INT_RET_NAK */
	}

	CH375_WR_CMD_PORT( CMD_GET_STATUS );  /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */
	return( CH375_RD_DAT_PORT() );
}

#define	TRUE	1
#define	FALSE	0
unsigned char set_usb_mode( unsigned char mode ) {  /* 設(shè)置CH375的工作模式 */
	unsigned char i;
	CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
	CH375_WR_DAT_PORT( mode );
	for( i=0; i!=100; i++ ) {  /* 等待設(shè)置模式操作完成,不超過30uS */
		if ( CH375_RD_DAT_PORT()==CMD_RET_SUCCESS ) return( TRUE );  /* 成功 */
	}
	return( FALSE );  /* CH375出錯(cuò),例如芯片型號錯(cuò)或者處于串口方式或者不支持 */
}

/* 數(shù)據(jù)同步 */
/* USB的數(shù)據(jù)同步通過切換DATA0和DATA1實(shí)現(xiàn): 在設(shè)備端, USB打印機(jī)可以自動(dòng)切換;
   在主機(jī)端, 必須由SET_ENDP6和SET_ENDP7命令控制CH375切換DATA0與DATA1.
   主機(jī)端的程序處理方法是為設(shè)備端的各個(gè)端點(diǎn)分別提供一個(gè)全局變量,
   初始值均為DATA0, 每執(zhí)行一次成功事務(wù)后取反, 每執(zhí)行一次失敗事務(wù)后將其復(fù)位為DATA1 */

void toggle_recv( BOOL1 tog ) {  /* 主機(jī)接收同步控制:0=DATA0,1=DATA1 */
	CH375_WR_CMD_PORT( CMD_SET_ENDP6 );
	CH375_WR_DAT_PORT( tog ? 0xC0 : 0x80 );
	delay2us();
}

void toggle_send( BOOL1 tog ) {  /* 主機(jī)發(fā)送同步控制:0=DATA0,1=DATA1 */
	CH375_WR_CMD_PORT( CMD_SET_ENDP7 );
	CH375_WR_DAT_PORT( tog ? 0xC0 : 0x80 );
	delay2us();
}

unsigned char clr_stall( unsigned char endp_addr ) {  /* USB通訊失敗后,復(fù)位設(shè)備端的指定端點(diǎn)到DATA0 */
	CH375_WR_CMD_PORT( CMD_CLR_STALL );
	CH375_WR_DAT_PORT( endp_addr );
	return( wait_interrupt() );
}

/* 數(shù)據(jù)讀寫, 單片機(jī)讀寫CH375芯片中的數(shù)據(jù)緩沖區(qū) */

unsigned char rd_usb_data( unsigned char *buf ) {  /* 從CH37X讀出數(shù)據(jù)塊 */
	unsigned char i, len;
	CH375_WR_CMD_PORT( CMD_RD_USB_DATA );  /* 從CH375的端點(diǎn)緩沖區(qū)讀取接收到的數(shù)據(jù) */
	len=CH375_RD_DAT_PORT();  /* 后續(xù)數(shù)據(jù)長度 */
	for ( i=0; i!=len; i++ ) *buf++=CH375_RD_DAT_PORT();
	return( len );
}

void wr_usb_data( unsigned char len, unsigned char *buf ) {  /* 向CH37X寫入數(shù)據(jù)塊 */
	CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  /* 向CH375的端點(diǎn)緩沖區(qū)寫入準(zhǔn)備發(fā)送的數(shù)據(jù) */
	CH375_WR_DAT_PORT( len );  /* 后續(xù)數(shù)據(jù)長度, len不能大于64 */
	while( len-- ) CH375_WR_DAT_PORT( *buf++ );
}

/* 主機(jī)操作 */
unsigned char endp_out_addr;	/* 打印機(jī)數(shù)據(jù)接收端點(diǎn)的端點(diǎn)地址 */
unsigned char endp_out_size;	/* 打印機(jī)數(shù)據(jù)接收端點(diǎn)的端點(diǎn)尺寸 */
BOOL1	tog_send;				/* 打印機(jī)數(shù)據(jù)接收端點(diǎn)的同步標(biāo)志 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩你懂的在线观看| 国产日韩精品一区二区浪潮av| 另类小说欧美激情| 综合久久久久综合| 欧美大白屁股肥臀xxxxxx| av网站免费线看精品| 美女视频一区二区| 五月婷婷久久综合| 亚洲欧美国产毛片在线| 久久综合九色综合欧美98| 欧美日韩一区二区三区四区五区| 国产精品影音先锋| 日韩精品一级二级| 亚洲狠狠爱一区二区三区| 日本一区二区三区国色天香| 日韩欧美国产一区二区在线播放| 欧洲av一区二区嗯嗯嗯啊| 成人动漫一区二区| 国产精品一区二区不卡| 免费观看在线综合色| 亚洲网友自拍偷拍| 一区二区三区四区国产精品| 中文字幕免费不卡| 久久久久久黄色| 日韩午夜激情电影| 制服.丝袜.亚洲.中文.综合| 91国在线观看| 一本到一区二区三区| 99在线精品一区二区三区| 成人app在线| 国产成人av电影在线观看| 久久se精品一区精品二区| 蜜桃久久av一区| 舔着乳尖日韩一区| 亚洲成人动漫在线免费观看| 亚洲影视资源网| 一区二区三区在线视频观看| 亚洲欧美日韩系列| 亚洲免费观看高清完整版在线| 中文字幕一区不卡| 综合精品久久久| 亚洲欧美欧美一区二区三区| 亚洲日本一区二区| 亚洲一线二线三线视频| 亚洲一区二区三区四区中文字幕| 亚洲一区视频在线| 午夜精品福利一区二区蜜股av| 日本一不卡视频| 裸体歌舞表演一区二区| 国产在线视频精品一区| 国产成a人亚洲精品| 91一区一区三区| 欧美综合欧美视频| 欧美精品一卡两卡| 欧美不卡激情三级在线观看| 久久久国产综合精品女国产盗摄| 国产偷国产偷亚洲高清人白洁| 国产精品私人影院| 亚洲色图制服诱惑| 偷拍自拍另类欧美| 老司机精品视频导航| 国产精品一区二区不卡| 播五月开心婷婷综合| 欧美在线免费播放| 日韩亚洲欧美中文三级| 国产日产欧美一区| 亚洲欧美电影院| 久久精品久久99精品久久| 国产suv精品一区二区6| 欧洲色大大久久| 日韩精品一区二区三区中文不卡 | 国产精品国产三级国产普通话蜜臀| 日本一区二区三区四区在线视频 | 69堂亚洲精品首页| 精品国产百合女同互慰| 国产精品第13页| 亚洲成人激情av| 国产91富婆露脸刺激对白| 91久久精品一区二区三区| 欧美v日韩v国产v| 中文字幕一区av| 理论片日本一区| 97久久精品人人澡人人爽| 日韩小视频在线观看专区| 国产精品日产欧美久久久久| 亚洲国产精品嫩草影院| 国产在线不卡一区| 欧美在线综合视频| 欧美变态凌虐bdsm| 亚洲成人午夜电影| 国产91精品免费| 欧美一区二区免费观在线| 国产精品女主播在线观看| 日产欧产美韩系列久久99| 成人免费黄色大片| 欧美成人精品高清在线播放| 亚洲精品国久久99热| 国产精品99久| 日韩一区二区三区观看| 亚洲综合免费观看高清完整版在线| 久色婷婷小香蕉久久| 91久久香蕉国产日韩欧美9色| 久久综合色综合88| 五月婷婷欧美视频| 一本一道综合狠狠老| 国产精品网曝门| 精品一区二区在线观看| 欧美久久久一区| 亚洲免费在线看| 盗摄精品av一区二区三区| 日韩三级中文字幕| 亚洲不卡在线观看| 在线免费不卡视频| 18成人在线观看| 国产成人av一区二区三区在线 | 国产欧美一区二区三区在线看蜜臀 | 在线一区二区三区做爰视频网站| 欧美精品一区二区蜜臀亚洲| 人人精品人人爱| 欧美日韩你懂得| 亚洲图片欧美一区| 欧美视频一区在线观看| 亚洲美女屁股眼交3| 97久久超碰国产精品电影| 国产精品久久综合| 成人自拍视频在线观看| 久久久三级国产网站| 国产一区高清在线| 精品国产成人系列| 国模套图日韩精品一区二区| 欧美tickle裸体挠脚心vk| 久久精品久久精品| 精品成人一区二区三区| 九九视频精品免费| 26uuu欧美| 国产成人综合在线观看| 久久一日本道色综合| 久久66热re国产| 2023国产精华国产精品| 国产综合久久久久久鬼色| 久久蜜桃av一区二区天堂| 国产综合久久久久影院| 久久精品夜夜夜夜久久| 国产成人亚洲综合色影视| 国产精品女同一区二区三区| 成人黄色a**站在线观看| 亚洲欧美另类久久久精品| 欧美中文字幕一区二区三区| 婷婷综合久久一区二区三区| 日韩写真欧美这视频| 国产精品99精品久久免费| 一色桃子久久精品亚洲| 色吧成人激情小说| 日韩在线一二三区| 久久久久久麻豆| 色综合天天综合色综合av| 亚洲自拍偷拍麻豆| 日韩欧美第一区| 成人免费观看男女羞羞视频| 亚洲综合999| 欧美sm美女调教| 99re66热这里只有精品3直播 | 欧美一区日韩一区| 国产麻豆视频精品| 亚洲视频香蕉人妖| 欧美一区二区视频在线观看2020 | 国产一区二区在线观看免费 | 国产精品欧美精品| 欧美视频一区二区三区四区 | 性做久久久久久久免费看| 精品日韩在线一区| 91亚洲永久精品| 美女精品自拍一二三四| 欧美激情在线一区二区| 欧美中文字幕一区二区三区亚洲| 久久99蜜桃精品| 日韩美女视频19| 日韩欧美久久久| 99国产精品一区| 蜜桃一区二区三区在线| 国产精品无人区| 欧美一区二区三区在| 国产黄人亚洲片| 午夜欧美在线一二页| 日韩欧美资源站| 99久久99久久综合| 九九精品一区二区| 亚洲精品视频在线| 久久亚洲精品小早川怜子| 日本道免费精品一区二区三区| 国产在线视频一区二区| 亚洲综合在线免费观看| 国产调教视频一区| 91精品午夜视频| 91丝袜美女网| 国产精品1区2区| 日韩电影在线观看网站| 亚洲欧洲成人精品av97| 精品免费视频一区二区| 欧美色综合天天久久综合精品|