![]() |
發布時間: 2022-8-10 12:29
正文摘要:/*---------------------------- 扇區擦除 ----------------------------*/ void IapEraseSector(WORD addr) { IAP_CONTR = ENABLE_IAP; //使能IAP ... |
188610329 發表于 2022-8-10 20:39 謝謝,就是硬件不同而不同。 |
yzwzfyz 發表于 2022-8-10 16:42 已明白,謝謝! |
188610329 發表于 2022-8-10 20:45 明白了,就是頭文件里沒定義想用都沒得用 ![]() |
我感覺沒有必要糾結什么的吧 數據手冊上有什么,就用什么 如果想知道,可以對比一下擦除時間之類的區別 |
liyago 發表于 2022-8-10 18:46 你用不用 頭文件的? 你打開 STC15.H 這個頭文件 你只能找到: sfr IAP_CONTR = 0xC7; 而找不到: sfr ISP_CONTR = ???? 反過來,你打開 STC89C5xRC.H 這個頭文件 你只能找到: sfr ISP_CONTR = 0xE7; 而找不到: sfr IAP_CONTR = ???? 這就是 STC的改版,地址不一樣了,名字也不一樣,明白了?? 沒有哪個更好,因為 一個單片機里 只有其中一個。 |
STC手冊 89系列 第 270 頁。 http://www.zg4o1577.cn/bbs/dpj-82368-1.html 看到如下圖: ![]() 注意,紅框位置的 地址。 STC15 系列手冊 第 841 頁。 看到如下圖: ![]() 注意,紅框位置的 地址。 由于,地址本身不同,所以 一個用 ISP 命名, 一個用 IAP命名, 防止因為用錯頭文件,而出了問題也不知道問題在哪里。 即,雖然是同一個操作方式,但是,由于寄存器地址不同,所以給了不同的名字。目的是為了區分 版本差別。 同理, T2 定時器, 89系列名字 叫 TL2, TH2, 15系列里面叫 T2L, T2H, 都是 定時器 初值定義, 但是寄存器地址 變了,所以,名字就要變。 |
188610329 發表于 2022-8-10 14:18 什么不同的地址呢?是不是說這兩個只是兩種不同的方法,用哪種都行? 型號 大小 扇區數 開始地址 結束地址 MOVC讀偏移地址 STC15F/L2K32S2 29K 58扇區 0x0000 ~ 0x73FF 0x8000 比如要讀寫STC15F2k32s2,用哪種方法都一樣是吧 |
188610329 發表于 2022-8-10 15:45 ??? ![]() ![]() |
以51單片機為例:其存儲器分為三塊。 1、程序存儲器:可尋址空間64K,用于存放用戶的程序,CPU取指令只能在此空間。 2、外部分擴展存儲器:可尋址空間64K,用于存放數據,CPU無法在此空間取指令。 3、內部分RAM:256字節。這里略去功能介紹。 問題來了:如果用戶弄了2K的EEPROM,如何讓它能被CPU尋址(訪問)到呢? 有兩種方案: 1、程序一般用不了64K的全部空間,于是在【程序存儲器】中挖出2K的空間,將它做成EEPROM。這是STC一種做法。例如:IAP15Fxxxx型號芯片。 由于程序存儲器通常只能在燒錄時寫入,而EEPROM卻需要在程序運行中,由程序讀、寫或擦除,為此STC又特意開發了一套寫、擦它的方式。但讀取仍可以用通用的指令進行,如:MOVC A, @A+DPTR。 這種方案好處是:無需單獨再做EEPROM,直接利用【程序存儲器】的FLASH空間當作EEPROM用,且大小空間比較自由靈活,用不完的FALSH空間可以隨便用。 這里有一個風險:比如:0000-11FFH放的是程序,如果你把此區域當作是EEPROM,對它進行寫、擦操作,則程序就被破壞掉了。所以這個方案需要你知道程度占多長?哪些區域是程序用不到的地方。 不過風險中,也有一個重要的好處:可以用程序,修改自己的程序!例如,程序在運行中就能進行自我升級:擦除原來的程序重新寫入新的程序!這是高級用法,就不在此介紹了。 2、在【外部分擴展存儲器】中挖出2K的空間,將它做成EEPROM,這是常用的方式,不多介紹了。 樓主用C語言寫程序,兩種方式無所謂好壞之分。但必須知道EEPROM的數據是在哪個區域,因為你在定義一個EEPROM中的數據變量時,需要用到。 如果不考慮在線或遠程升級程序,建議用第2種方式的EEPROM芯片,需要考慮的問題少,不易出錯。 |
lkc8210 發表于 2022-8-10 15:12 89的手冊,寄存器是ISP_????,頭文件也是,89,90的寄存器是ISP_xxxx,15,8的頭文件是iapxxxx,指向的地址是不同的。 |
在STC-ISP的EEPROM范例程序里從89看到8H 全都是用IAP ISP的程序從哪來的? |
ISP和iap,對應的sfr寄存器地址不同,不是哪個好,而是為了區別不同的地址。 |