麻煩技術大哥,給我看看程序

我用的ch375+msp430f149,做設備用,接口是: p40~7 d7~0 RD P1.0 WR P1.1 CS P1.2 A0 P1.3 INT P1.4 硬件V3已經(jīng)接到3.3V電源,申請了2片樣片,以為第一片壞了,就又重新焊了片,還是不行啊,極度郁悶,望技術大哥指點阿 下面是測試程序

#include #include #include "CH375INC.H" //#define CH375_CMD_PORT 0xBDF1 /* CH375命令端口的I/O地址 */ //#define CH375_DAT_PORT 0xBCF0 /* CH375數(shù)據(jù)端口的I/O地址 */ void delay2us( ) { unsigned char i; for ( i = 2; i != 0; i -- ); /* 根據(jù)單片機的時鐘選擇初值 */ }

void CH375_WR_CMD_PORT( unsigned char mCmd ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫命令 */ { _NOP( ); _NOP( ); _NOP( ); /* 至少延時2uS,實際由于模擬I/O較慢而只需少量延時 */ P1DIR |= 0x0F; /* 設置P1口A0,CS,WR,RD為輸出控制信號 */ P4OUT = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P1OUT |= 0x0F; /* 指向CH375芯片的命令端口, A0(P1.3)=1; */ P1OUT &= 0xF9; /* 輸出有效寫控制信號, 寫CH375芯片的命令端口, A0(P1.3)=1; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( ); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度為100nS */ P1OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0(P1.3)=1; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P1OUT &= 0xF7; /* 輸出A0(P1.3)=0; 可選操作 */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( ); _NOP( ); _NOP( ); _NOP( ); /* 至少延時2uS,實際由于模擬I/O較慢而只需少量延時 */ }

void CH375_WR_DAT_PORT(unsigned char mData ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫數(shù)據(jù) */ { P4OUT = mData; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P1OUT &= 0xF1; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( ); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度為100nS */ P1OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( );/* 至少延時1uS,實際由于模擬I/O較慢而不一定有必要 */ }

unsigned char CH375_RD_DAT_PORT( void ) /* 外部定義的被CH375程序庫調用的子程序,從CH375讀數(shù)據(jù) */ { unsigned char mData; _NOP( ); /* 至少延時1uS,實際由于模擬I/O較慢而不一定有必要 */ P4DIR = 0; /* 讀操作所以數(shù)據(jù)輸入 */ P1OUT &= 0xF2; /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=1; RD(P1.0)=0; */ _NOP( ); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度為100nS */ mData = P4IN; /* 從CH375的并口輸入數(shù)據(jù) */ P1OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ return( mData ); }

void Delay50ms( ) { unsigned char i, j; for ( i=200; i!=0; i-- ) for ( j=250; j!=0; j-- ); } void CH375_Init( ) { unsigned char i; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x0F ); /* 寫入測試數(shù)據(jù) */ i = ~ 0x55; /* 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 */ P2OUT=CH375_RD_DAT_PORT( ); //if( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ //for ( i=80; i!=0; i-- ) { //CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重復發(fā)命令,執(zhí)行硬件復位 */ //CH375_RD_DAT_PORT( ); //} //CH375_WR_CMD_PORT( 0 ); //Delay50ms( ); /* 延時50ms */ //} /* 設置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT(2); /* 設置為使用內置固件的USB設備方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } P1IE|=0x10; P1IES|=0x10; P1IFG&=~0x10; } #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { unsigned char InterruptStatus; unsigned char i, length; unsigned char databuffer[ 64 ]; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 獲取中斷狀態(tài) */ switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點下傳成功 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = CH375_RD_DAT_PORT( ); /* 首先讀取后續(xù)數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) databuffer[ i ] = CH375_RD_DAT_PORT( ); /* 接收數(shù)據(jù)包 */ /* 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( length ); /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ databuffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ break; } } //P1IFG&=~0x10; }

void main(void ) { unsigned int i1; WDTCTL = WDTPW + WDTHOLD; BCSCTL1 &= ~XT2OFF; //XT2 = HF XTAL do{ IFG1 &= ~OFIFG; //Clear OSCFault flag for (i1=0x01;i1>0;i1--); //Time for flag to set }while ((IFG1 & OFIFG)); //OSCFault flag still set? BCSCTL2 |= (SELM1 + SELS); //MCLK = XT2,SMCLK = XT2 P1OUT = ( P1OUT | 0x07 ) & 0xF7; /* 設置A0為低電平,CS,WR,RD默認為高電平 */ P1DIR = ( P1DIR | 0x0F ) & 0xEF; /* 設置INT#為輸入,設置CS,WR,RD,A0為輸出 */ P4DIR = 0; /* 設置8位并口輸入 */ P2DIR|=0XFF; CH375_Init( ); /* 初始 化CH375 */ Delay50ms( ); /* 延時等待CH375初始化完成,如果單片機由CH375提供復位信號則不必延時 */ _BIS_SR(GIE); while ( 1 ) {;} }

測試做了阿,返回不對


晶振是工作的


用下面的時序試試 void CH375_WR_CMD_PORT( unsigned char mCmd ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫命令 */ { P4OUT = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */

P1DIR |= 0x0F; /* 設置P1口A0,CS,WR,RD為輸出控制信號 */

P1OUT |= 0x01;

P1OUT |= 0x08; /* 指向CH375芯片的命令端口, A0(P1.3)=1; */ P1OUT &= 0xFB; /* cs = 0 */ P1OUT &= 0xFD; /* wr = 0 */ /* 添加延時,至少大于60ns */ P1OUT |= 0x02; /* wr = 1 */ P1OUT |= 0x04; /* cs = 1 */ P1OUT &= 0xF7; /* 指向CH375芯片的命令端口, A0(P1.3)=0; */

P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ /* 添加延時,至少1.5uS, */ }

void CH375_WR_DAT_PORT(unsigned char mData ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫數(shù)據(jù) */ { #if 0 P4OUT = mData; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P1OUT &= 0xF1; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( ); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度為100nS */ P1OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( );/* 至少延時1uS,實際由于模擬I/O較慢而不一定有必要 */ #else P4OUT = mData; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */

P1DIR |= 0x0F; /* 設置P1口A0,CS,WR,RD為輸出控制信號 */

P1OUT |= 0x01;

P1OUT &= 0xF7; /* 指向CH375芯片的命令端口, A0(P1.3)=0; */ P1OUT &= 0xFB; /* cs = 0 */ P1OUT &= 0xFD; /* wr = 0 */ /* 添加延時,至少大于60ns */ P1OUT |= 0x02; /* wr = 1 */ P1OUT |= 0x04; /* cs = 1 */

P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ /* 添加延時,至少1.5uS, */ #endif }

unsigned char CH375_RD_DAT_PORT( void ) /* 外部定義的被CH375程序庫調用的子程序,從CH375讀數(shù)據(jù) */ { unsigned char mData;

#if 0 _NOP( ); /* 至少延時1uS,實際由于模擬I/O較慢而不一定有必要 */ P4DIR = 0; /* 讀操作所以數(shù)據(jù)輸入 */ P1OUT &= 0xF2; /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=1; RD(P1.0)=0; */ _NOP( ); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度為100nS */ mData = P4IN; /* 從CH375的并口輸入數(shù)據(jù) */ P1OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */

#else

P4DIR = 0; /* 輸入 */

P1DIR |= 0x0F; /* 設置P1口A0,CS,WR,RD為輸出控制信號 */

P1OUT |= 0x02;

P1OUT &= 0xF7; /* 指向CH375芯片的命令端口, A0(P1.3)=0; */ P1OUT &= 0xFB; /* cs = 0 */ P1OUT &= 0xFE; /* rd = 0 */ /* 添加延時,至少大于60ns */ mData = P4IN; P1OUT |= 0x01; /* rd = 1 */ P1OUT |= 0x04; /* cs = 1 */ /* 添加延時,至少1.5uS, */ #endif return( mData ) }


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

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