關(guān)于CH372的中斷

想問一下,CH372在發(fā)送完一組數(shù)據(jù)后是自動將INT#置為低電平嗎? 為什么。.我在做的時候,發(fā)完一組數(shù)據(jù)那個INT#的電平仍然為高,根本不能觸發(fā)單片機(jī)的中斷啊.這是什么原因,我的程序如下,希望大家能告訴我怎么樣才能使CH372的INT#腳為低電平,觸發(fā)單片機(jī)的中斷? /* MCS-51單片機(jī)C語言的示例程序 */

#include #include #include #include "CH375INC.H" #define CH372_INT_WIRE INT0 typedef unsigned char UINT8; typedef unsigned char *PUINT8; UINT8 Len; UINT8 IntStatus; int i,j; unsigned char b[10]={0,0,0,0,0,0,0,0,0,0}; unsigned char a[10]={1,1,1,1,1,1,1,1,1,1};

typedef struct _COMMAND_PACKET { /* 自定義的命令包結(jié)構(gòu) */ unsigned char mCommandCode; /* 命令請求碼,見下面的定義 */ unsigned char mCommandCodeNot; /* 命令碼的反碼,用于校驗(yàn)命令包 */ union { unsigned char mParameter[5]; /* 參數(shù) */ struct { unsigned char mBufferID; /* 緩沖區(qū)識別碼,本程序針對MCS51單片機(jī)定義: 1-專用功能寄存器SFR, 2-內(nèi)部RAM, 3-外部RAM, 不過本程序?qū)嶋H只演示內(nèi)部RAM */ unsigned int mBufferAddr; /* 讀寫操作的起始地址,尋址范圍是0000H-0FFFFH,低字節(jié)在前 */ unsigned int mLength; /* 數(shù)據(jù)塊總長度,低字節(jié)在前 */ } buf; } u; } mCOMMAND_PACKET, *mpCOMMAND_PACKET;

#define CONST_CMD_LEN 0x07 /* 命令塊的長度 */ /* 由于命令與數(shù)據(jù)都是通過數(shù)據(jù)下傳管道(USB端點(diǎn)2的OUT)下傳, 為了防止兩者混淆, 我們可以在計(jì)算機(jī)應(yīng)用程序與單片機(jī)程序之間約定, 命令塊的長度總是7, 而數(shù)據(jù)塊的長度肯定不是7, 例如64,32等 另外, 可以約定, 命令塊的首字節(jié)是命令碼, 等等 本程序約定命令碼: 80H-0FFH是通用命令,適用于各種應(yīng)用 00H-7FH是專用命令,針對各種應(yīng)用特別定義 */ /* 通用命令 */ #define DEF_CMD_GET_INFORM 0x90 /* 獲取下位機(jī)的說明信息,長度不超過64個字符,字符串以00H結(jié)束 */ #define DEF_CMD_TEST_DATA 0x91 /* 測試命令,下位機(jī)將PC機(jī)發(fā)來的命令包的所有數(shù)據(jù)取反后返回 */ #define DEF_CMD_CLEAR_UP 0xA0 /* 在上傳數(shù)據(jù)塊之前進(jìn)行同步,實(shí)際是讓下位機(jī)清除上傳緩沖區(qū)的已有內(nèi)容 */ #define DEF_CMD_UP_DATA 0xA1 /* 從下位機(jī)的指定地址的緩沖區(qū)中讀取數(shù)據(jù)塊(上傳數(shù)據(jù)塊) */ #define DEF_CMD_DOWN_DATA 0xA2 /* 向下位機(jī)的指定地址的緩沖區(qū)中寫入數(shù)據(jù)塊(下傳數(shù)據(jù)塊) */ /* 專用命令 */

/* 對于MCS51單片機(jī)在使用通用命令時,還需要指定緩沖區(qū)識別碼 */ #define ACCESS_MCS51_SFR 1 /* 讀寫51單片機(jī)的SFR */ #define ACCESS_MCS51_IRAM 2 /* 讀寫51單片機(jī)的內(nèi)部RAM */ #define ACCESS_MCS51_XRAM 3 /* 讀寫51單片機(jī)的外部RAM */

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地址 */

/* 延時2微秒,不精確 */ void Delay2us( ) { unsigned char i; #define DELAY_START_VALUE 1 /* 根據(jù)單片機(jī)的時鐘選擇初值,20MHz以下為0,30MHz以上為2 */ for ( i=DELAY_START_VALUE; i!=0; i-- ); }

/* 延時50毫秒,不精確 */ /*void Delay50ms( ) { unsigned char i, j; for ( i=200; i!=0; i-- ) for ( j=250; j!=0; j-- ); }*/

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

/* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ void CH372_WR_DAT_PORT( UINT8 dat ) { CH375_DAT_PORT=dat; //Delay2us(); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無需延時 */ }

/* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時 */ UINT8 CH372_RD_DAT_PORT( void ) { //Delay2us(); return(CH375_DAT_PORT); }

void CH372_WR_DATA(PUINT8 buf,UINT8 len) { CH372_WR_CMD_PORT(CMD_WR_USB_DATA7); CH372_WR_DAT_PORT(len); if (len) { do { CH372_WR_DAT_PORT(*buf); buf++; } while (--len); } }

/* CH375初始化子程序 */ void CH372_Init( ) { int k; /* 設(shè)置USB工作模式, 必要操作 */ CH375_CMD_PORT = CMD_SET_USB_MODE; Delay2us( ); /* 如果時鐘頻率低于16MHz則無需該指令延時 */ CH375_DAT_PORT = 2; /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ for (k=100; k!=0; k--) { /* 等待操作成功,通常需要等待10uS-20uS */ if (CH375_DAT_PORT==CMD_RET_SUCCESS) break; } /* 下述啟用中斷,假定CH372連接在INT0 */ IT0 = 0; /* 置外部信號為低電平觸發(fā) */ IE0 = 0; /* 清中斷標(biāo)志 */ EX0 = 1; /* 允許CH375中斷 */ EA = 1; /* 允許中斷 */ }

/*CH375中斷服務(wù)程序INT0,使用寄存器組1 */ void mCH375Interrupt( ) interrupt 0 using 1 { CH372_WR_CMD_PORT(CMD_GET_STATUS); IntStatus = CH372_RD_DAT_PORT( ); switch(IntStatus) { case USB_INT_EP2_IN: CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); break; } }

main( ) { CH372_Init( ); /* 初始化CH375 */ while(1) { CH372_WR_DATA(b,10); } }

初始話CH372有沒有成功,正確找到USB設(shè)備,程序沒問題


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频