![]() |
用的竟然是匯編?我也是匯編搞定eeprom讀寫,我沒碰到這種障礙,我的習慣不用 仿真,其實我也不會用仿真,我在開發(fā)板po口接八個指示燈,需要讀取數(shù)據(jù)驗證 發(fā)送到p0口看一下數(shù)值,這種實際方法讓我掃除了很多編程路上的障礙 |
9#說的很對。的確如此。也意識到此點了。后期仿真時規(guī)避掉此了。謝謝。 |
yzwzfyz 發(fā)表于 2016-11-8 01:11 你這個問題,最后,解決了么? 如果解決了,可跳過后續(xù)內(nèi)容。 你這個單片機,正式名稱應(yīng)該是 IAP15W4K61S 吧。 STC 的 IAP系列,都是程序和Eeprom 共用空間的,即程序空間 = Eeprom空間 (物理上)。 那么,帶來一個問題,對于,KEIL來講,你是只有程序空間,沒有Eeprom空間的。下面比較拗口,不知道我這樣描述,你是否能理解,盡我最大努力吧。 在ICE仿真的時候,你的程序,其實是在電腦上的,電腦上單步運行,然后,把需要執(zhí)行的指令,通過串口傳給單片機,然后,單片機收到后在單片機運行,如果有返回值,則把返回值返回給電腦。即,程序在電腦,運行在單片機。 那么,(重點)問題來了,你寫一個數(shù)值到Eeprom, 指令傳輸給單片機后,單片機運行后,他確確實實把這個值寫到了單片機上的指定位置。此時,有沒有返回值?有,寫成功這個值回傳到電腦了,但是,沒有其他的返回值了。因為事實上,Eeprom操作時,也不會有其他的返回值,所以,你電腦端(Keil),根本不會知道,你單片機的某個地址,發(fā)生了內(nèi)容變更。 而,你電腦上Memory 1 看到的,其實是你電腦上的為了執(zhí)行ICE仿真而做出來的“程序區(qū)”的內(nèi)容。和實際上單片機上的程序區(qū)內(nèi)容,是完全沒有任何關(guān)系的。事實上,你單片機上燒錄了仿真程序后,會占用6K容量,這一點,你在仿真的時候,也無法在Keil的 地址區(qū)看到。 所以,這就是一個信息不對稱問題,而實際上,你只要多寫一個 IAP_CMD = 1 的讀程序,讀你寫入的地址,存到一個變量,你就能發(fā)現(xiàn),IAP操作,其實是成功了。 不知道這么描述,是否能把我想表達的意思傳遞給你,如果能,就太好了。如果不能,我只能說抱歉了,我已經(jīng)盡力了。 |
5樓:先謝過。我停一下中斷試試。 |
ahshmj 發(fā)表于 2016-11-7 19:01 您所列的不在我求助之列! 比如光標停在第10條,我要跳過11-19不運行,將其拖到第20條開始運行,就辦不到;蛘咄系降9條再運行一次,就辦不到。 |
前幾天剛做過STC的EEPROM,發(fā)現(xiàn)有兩個要點 1.寫5A和A5之后(15F104為例)要相應(yīng)延時給程序操作,否則會中斷造成不成功 2.一定要停中斷和定時,如果是定時器的我建議放到定時器里面 我也是找了好多天才發(fā)現(xiàn),手冊之中只是說了要延時,沒說停中斷 |
只能說明你對Keil uVision4不熟悉。 運行、運行至光標、插入斷點等功能。 用stc的eeprom讀寫程序試一試? |
程序是用“Keil uVision4”調(diào)試的。 另外發(fā)現(xiàn): “Keil uVision4”的debug,其調(diào)試運行指針,無法自由定位。即如果要將運行位置移動至另一個地方運行是辦不到的。它只能按照程序的既定序列運行。這很不方便。而偉福的仿真程序是能辦到的。 誰有這個問題(對于STC的仿真)的解決方法?這里請教了。 |
另外,將 MOV IAP_CMD, #3 ;擦除 改為: MOV IAP_CMD, #2 ;寫入 發(fā)現(xiàn)寫入數(shù)據(jù),也未成功。 |
Powered by 單片機教程網(wǎng)