文件我用了沁恒公司提供的原程序CH375HFT.C 和庫(kù)6,只修改了CH375地址和RAM區(qū)長(zhǎng)度。 CH375A 初始化沒問(wèn)題,接下來(lái)的 CH375DiskConnect( ),CH375DiskReady( ) 第一次就通過(guò)了,再接下來(lái)的i = CH375FileOpen( ); /* 打開文件 */總是返回A1 在RAM(首地址0X8000,長(zhǎng)度16K) 地址區(qū)0X8000--0X8003的4個(gè)數(shù)據(jù)總是變成了00,00,00,20H 用CH375EV4.C這個(gè)程又可正確讀出指定文件的數(shù)據(jù)到指定的RAM中,也不出現(xiàn)RAM數(shù)據(jù)變了現(xiàn)象。真是怪。這問(wèn)題困我很久了。RAM用多種數(shù)據(jù)多次讀寫測(cè)試也沒問(wèn)題。我真不知道是我的仿真器有問(wèn)題,還是編譯器有問(wèn)題?。╓AVE6000.EXE H51/S)[Emot]4[/Emot][Emot]4[/Emot][Emot]4[/Emot][Emot]6[/Emot]
那你將程序燒到單片機(jī)里面試下看會(huì)出現(xiàn)你這樣的問(wèn)題嗎?
早試過(guò)的,寫芯片也一樣啊,用P1口接8個(gè)LED顯示返回字,執(zhí)行完i = CH375FileOpen();就讓它停下來(lái),LED 顯示值為A1。
A1H錯(cuò)誤,基本是都是RAM問(wèn)題,包括RAM地址錯(cuò)誤,DISK_BASE_BUF指向空的地址無(wú)物理RAM,與別的器件地址沖突,pDISK_BASE_BUF初值不正確等
圖是我后加上的。仔細(xì)看圖會(huì)發(fā)現(xiàn)編譯后的內(nèi)碼有錯(cuò)誤。絕對(duì)不是硬件有問(wèn)題!而是你們的封裝有問(wèn)題:RAM只能適應(yīng)以地址0000開始的地址。
RAM起始地址可以0到0FE00H之間的任意地址,并且也可以是動(dòng)態(tài)的,用程序測(cè)試一下RAM,看MAP文件.M51中的地址分配到底是多少
這樣看來(lái),可能是編譯器沒能正確編譯?0000H這樣的地址在程序中是沒有定義的。
遇到同樣的問(wèn)題。 外擴(kuò)64K SRAM ,使用CPLD譯碼,將CH375映射到32K以上的地址(映射地址將使SRAM 的片選無(wú)效)
目前使用的是SST89C58MCU,使用MCU內(nèi)部自帶1K SRAM,EXAM3例子運(yùn)行正常,禁止使用MCU自帶1K SRAM后,也運(yùn)行,至少說(shuō)明外擴(kuò)的SRAM的低端1K部分正常。
將下面語(yǔ)句修改后就出現(xiàn)返回A1 錯(cuò)誤碼 原文件語(yǔ)句: #define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0000 #define FILE_DATA_BUF_LEN 0x0200
修改后語(yǔ)句: #define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0200 #define FILE_DATA_BUF_LEN 0x7800
你確定你的外部RAM的地址是從0X0000開始的?還有就是地址有沒有錯(cuò)誤和沖突?
看編譯后的M51或MAP文件,看有沒有哪個(gè)變量的地址超過(guò)實(shí)際的RAM地址范圍, 庫(kù)除了DISK-BASE-BUF之外,還需要幾個(gè)字節(jié)的XDATA作為變量,所以你分配RAM時(shí)不要將XRAM全部用完, SIZEOF(DISK_BASE_BUF)+SIZEOF(FILE_DATA_BUF)+N < SIZEOF(XDATA RAM TOTAL SIZE) 其中N要看庫(kù)的版本,庫(kù)6需要約20個(gè)字節(jié),庫(kù)C需要約80個(gè)字節(jié)
我的硬件和地址定義肯定是沒問(wèn)題的,這一點(diǎn)不需要異議,HCN 你可以定義一個(gè)不是以0000H開始的XRAM,用WAVE6000.EXE H51/S 編譯CH375HFT.C 和庫(kù)6,然后去看disassembly窗口,肯定會(huì)看到有許多地方出現(xiàn)訪問(wèn)0000H XRAM的語(yǔ)句。就像我發(fā)的圖。