郁悶死了,頭都要炸了,CH375主機(jī)+ATmega32,幫忙分析一下?。?!

大蝦們,用CH375主機(jī)+ATmega32,并口方式,哥們兒爬著整了兩天了,為什么我的庫(kù)初始化 i = CH375LibInit( )總是通不過???我看了好多以前的帖子大家都說是硬件連接可能有問題,我都查了好長(zhǎng)時(shí)間了,對(duì)著PCB和我的電路板挨個(gè)引腳量過去都沒問題啊。電源管理用的是我們這邊常用的片子應(yīng)當(dāng)不會(huì)有什么問題,上電后25為低,26為高,復(fù)位正常,晶振我量過了工作正常。保險(xiǎn)起見,我的CH375V是焊在轉(zhuǎn)DIP的板子上的,這是公司設(shè)計(jì)的應(yīng)當(dāng)說不會(huì)出現(xiàn)干擾過大的情況。咳,真不知道問題在哪里了。 以下是我的引腳分配: /* 單片機(jī)的引腳 CH375芯片的引腳 PINB.4 INT# PORTB.3 A0 PORTB.2 CS# PORTB.1 WR# PORTB.0 RD# PORTA(8位端口) XD7-XD0 PORTC(8位端口) D7-D0 */ PORTA我是暫時(shí)沒用,PORTC用來同CH375V的數(shù)據(jù)口相連,xWriteCH375Cmd; xWriteCH375Data; xReadCH375Data這三個(gè)函數(shù)已經(jīng)做了相應(yīng)修改。 最恐怖的是我對(duì)CH375V做了測(cè)試也不行,我試著用如下程序執(zhí)行了按位取反指令:CHECK——EXIST(代碼06H): xWriteCH375Cmd(6); xWriteCH375Data(170);/*10101010*/ mDelay1uS( ); if (85==xReadCH375Data())/*如果結(jié)果為01010101則操作成功*/ { i = CH375LibInit( ); /* 初始化CH375程序庫(kù)和CH375芯片,操作成功返回0 */ mStopIfError( i ); } else LED_OUT_CON( );/*不成功LED被點(diǎn)亮*/ 結(jié)果我的燈是一直亮著的,小弟愚笨,請(qǐng)大家?guī)兔纯词悄睦锏膯栴}?。坎粍俑屑ぐ。?/p>

你用的是什么編譯器?還有就是你的庫(kù)是怎么添加的?


大哥,您終于發(fā)話了,我用的是ICCAVR6.31版!我也是一直懷疑我的庫(kù)添加的不對(duì),或者是程序編譯有什么問題。我原來發(fā)帖子問過您,我的.hex文件編譯過后有44k,在燒寫界面下看非FF的有效地址為8K多(我先寫了個(gè)比較簡(jiǎn)單的測(cè)試程序,但這個(gè)界面下打開了只顯示了16K),拿到Ultra_Edit13.0下來看問題就來了,整個(gè)44K都不是FF,好像都是有效代碼似的。是不是ATmega32的FLASH只有32K,所以燒進(jìn)去的文件不完全啊?(但是單片機(jī)掛的燈卻又反應(yīng)正常,就是庫(kù)初始化不能完成)真是暈死,庫(kù)CH375HFB.A我是在工程根目錄Files文件夾下通過點(diǎn)擊右鍵Add Files...添加的,頭文件CH375HFB.H則是以相同的辦法在Headers目錄下添加的。原來這兩個(gè)文件都沒在該工程文件夾下,后來想了想就又把這兩個(gè)文件拷貝過來,重新編譯但還是不行,大哥,給出出主意吧,多謝?。≡俚侥暇┝苏?qǐng)你吃飯?。?!


你測(cè)試命令都沒有通過,可能你的硬件連接還有問題,仔細(xì)檢查硬件連接,如txd有沒接地等;還有你將你的xWriteCH375Cmd; xWriteCH375Data; xReadCH375Data這三個(gè)子函數(shù)貼出來看一下,是不是時(shí)序上的問題。


還有就是你看下你讀出來的數(shù)據(jù)是不是你寫進(jìn)去的數(shù)據(jù)的取反,如果不是的話,那你就需要檢查你的硬件,包括三個(gè)讀寫子函數(shù)的時(shí)序,還有就是會(huì)不會(huì)存在什么硬件上面的沖突等等。


添加庫(kù)文件和頭文件不能直接拷貝的,要點(diǎn)擊右鍵Add Files...添加的,你重新打開工程再添加一次看看.


我硬件都查過了,應(yīng)該沒什么問題,就那么幾條線嘛!測(cè)試命令未成功,初始化庫(kù)返回是0x81。兩位大蝦請(qǐng)看一下我的程序,我再檢查一下硬件。我平時(shí)就是做硬件比較多的,不該出什么弱智錯(cuò)誤吧! #include #include #include #include /*#include /* 以下定義的詳細(xì)說明請(qǐng)看CH375HF9.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */

/* 單片機(jī)的RAM有限,其中CH375子程序用512字節(jié),剩余RAM部分可以用于文件讀寫緩沖 */ #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長(zhǎng)度不小于一次讀寫的數(shù)據(jù)長(zhǎng)度 */ /* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫,那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */

#define CH375_INT_WIRE ( PINB & 0x10 ) /* PINB.4, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */

#include "CH375HFB.H"

/* 有些AVR單片機(jī)提供開放系統(tǒng)總線,那么直接將CH375掛在其系統(tǒng)總線上,以8位I/O方式進(jìn)行讀寫 */ /* 雖然Atmega128提供系統(tǒng)總線,不過本例假定不開放系統(tǒng)總線,所以用I/O引腳模擬產(chǎn)生CH375的并口讀寫時(shí)序 */ /* 本例中的硬件連接方式如下(實(shí)際應(yīng)用電路可以參照修改下述3個(gè)并口讀寫子程序) */ /* 單片機(jī)的引腳 CH375芯片的引腳 PINB.4 INT# PORTB.3 A0 PORTB.2 CS# PORTB.1 WR# PORTB.0 RD# PORTA(8位端口) XD7-XD0 暫時(shí)沒用 PORTC(8位端口) D7-D0 */

void mDelay1uS( ) /* 至少延時(shí)1mS,根據(jù)單片機(jī)主頻調(diào)整 */ { UINT8 i; for ( i = 20; i != 0; i -- ); }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { PORTD = 0x0F; /*設(shè)置8位D口輸出為低,D口低4位沒用,高4位接了4個(gè)不同的指示燈*/ DDRD = 0xFF; /* 設(shè)置8位D口為輸出 */ PORTA = 0x00; DDRA = 0xFF; /* 設(shè)置8位A口為輸出 */ DDRC = 0x00; /* 設(shè)置8位C口為輸入 */ PORTB = 0x07; /* 設(shè)置CS,WR,RD默認(rèn)為高電平 */ DDRB = 0x0F; /* 設(shè)置CS,WR,RD,A0為輸出,設(shè)置INT#為輸入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫命令 */ { mDelay1uS( ); /* 至少延時(shí)1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTB |= 0x08; /* 輸出A0=1 */ PORTC = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ DDRC = 0xFF; /* 并口D0-D7輸出 */ PORTB &= 0xF9; /* 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRC = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ PORTB |= 0x07; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ DDRC = 0x00; /* 禁止數(shù)據(jù)輸出 */ PORTB &= 0xF7; /* 輸出A0=0; 可選操作 */ mDelay1uS( ); /* 至少延時(shí)2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */ PORTC = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRC = 0xFF; /* 并口D0-D7輸出 */ PORTB &= 0xF1; /* 輸出有效寫控制信號(hào), 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ DDRC = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ PORTB |= 0x07; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ DDRC = 0x00; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時(shí)1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); /* 至少延時(shí)1.2uS */ DDRC = 0x00; /* 數(shù)據(jù)輸入 */ PORTB &= 0xF2; /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ DDRC = 0x00; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ mData = PINC; /* 從CH375的并口PC輸入數(shù)據(jù) */ PORTB |= 0x07; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); }

/* 延時(shí)指定毫秒時(shí)間,根據(jù)單片機(jī)主頻調(diào)整,不精確 */ void mDelaymS( UINT8 ms ) { UINT16 i; while ( ms -- ) for ( i = 2500; i != 0; i -- ); }

#define LED_OUT_ERR( ) { PORTD |= 0x10;} /* PORTD.4 高電平為輸出方向RED */ #define LED_OUT_INT( ) { PORTD |= 0x80; } /* PORTD.7 低電平驅(qū)動(dòng)LED顯示YELLOW*/ #define LED_OUT_CON( ) { PORTD |= 0x40; } /* PORTD.6 低電平驅(qū)動(dòng)LED顯示BLUE*/ #define LED_OUT_OK( ) {PORTD |= 0x20;} /*PORTD.5 成功GREEN*/ #define LED_OUT_CLR( ) {PORTD = 0x00;} /*PORTD.X 成功CLEAR*/ /* 檢查操作狀態(tài),如果錯(cuò)誤則顯示錯(cuò)誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ while ( 1 ) { LED_OUT_ERR( ); /* 紅色LED常亮 */ mDelaymS( 20 ); LED_OUT_CLR( ); mDelaymS( 20 ); } }

void main( ) { UINT8 i, c, SecCount; UINT16 NewSize, count; /* 因?yàn)镽AM容量有限,所以NewSize限制為16位,實(shí)際上如果文件較大,應(yīng)該分幾次讀寫并且將NewSize改為UINT32以便累計(jì) */ UINT8 *pCodeStr; mDelaymS( 100 );/*開機(jī)延時(shí)等待初始化*/ CH375_PORT_INIT( ); LED_OUT_INT( ); mDelaymS( 200 ); /*初始化通過后黃燈亮1秒*/ LED_OUT_CLR( ); /* xWriteCH375Cmd(CMD_CHECK_EXIST); xWriteCH375Data(170); mDelay1uS( ); if (ERR_CH375_ERROR==xReadCH375Data()) {*/ i = CH375LibInit( ); /* 初始化CH375程序庫(kù)和CH375芯片,操作成功返回0 */ while (0x82==i) LED_OUT_CON( ); mStopIfError(i);/*目前錯(cuò)誤代碼0x81,指示為硬件連接錯(cuò)誤*/

}


測(cè)試命令不成功,那庫(kù)初始化當(dāng)然不會(huì)成功了,你看下你測(cè)試命令返回的是什么數(shù)據(jù),仔細(xì)檢查你的硬件,這個(gè)是你硬件的問題


蒙大家指導(dǎo),經(jīng)過3天奮戰(zhàn)問題解決了。庫(kù)的初始化和識(shí)別U盤的插拔都沒有問題了,這個(gè)帖子也該收了,呵呵!說來問題出的很簡(jiǎn)單,我用的ATmega32出廠的時(shí)候JTEG熔絲位都是被使能了的,而這里我用的是PC口做數(shù)據(jù)端口,因此導(dǎo)致此口數(shù)據(jù)不正常。燒寫程序的過程中取消對(duì)該熔絲位的選擇就可以了。可能也是我太笨了,呵呵,但希望其他剛開始用ATmega系列的朋友能夠引起注意。 另外,要開始往U盤里寫數(shù)據(jù)了,希望公司可以提供有一些有關(guān)磁盤文件格式的資料,呵呵,怕把U盤寫壞呢,還得好好研究研究。


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

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