當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 問:我想使用AVR單片機中的Mega 系列,有哪些開發(fā)工具支持這種單片機?答AVR 單片機 中的Mega 系列有一套完善的開發(fā)工具評估/編程板,ATMEL 的STK500(980 元/套)起步工具包是適用于開發(fā)Atmega103 芯片的對

問:我想使用AVR單片機中的Mega 系列,有哪些開發(fā)工具支持這種單片機?
答AVR 單片機 中的Mega 系列有一套完善的開發(fā)工具評估/編程板,
ATMEL 的STK500(980 元/套)起步工具包是適用于開發(fā)Atmega103 芯片的對芯片的編程是通過在系統(tǒng)編程(ISP)接口完成的
仿真器
ATMEL 的ATICE30 可適用于實時仿真
C 編譯器:

所有的C 編譯器均已在ATMEL 網(wǎng)站上有關(guān)第三方工具供應(yīng)商的網(wǎng)頁上列出;ATMEL 公司在它的網(wǎng)站:http://www.atmel.com 上還提供了許多自由軟件它們可用于對AVR 單片機 的程序進行匯編和模擬這些軟件可以自由下載,上述產(chǎn)品也可通過ATMEL 授權(quán)的地區(qū)分銷商和銷售代理獲得。
問:有哪些支持AVR 的起步工具包
答STK100,SL-AVR,SL-OKAVR,SL-AVRL 支持AVR 的Tiny 系列 單片機
STK200,SL-AVR,SL-OKAVR,SL-AVRL 支持AVR 單片機 即AT90S 系列
STK300,SL-AVR,SL-OKAVR,SL-AVRL 還支持AVR 的Mega103 單片機 .
STK500,SL-AVR,SL-OKAVR,SL-AVRL 還支持AVR 的Mega103 單片機
所有的起步工具包都包括按鈕LED指示燈RS232 通信接口I/O 口通過分布在PCB板邊沿的連接插頭可以使用STK200/300 起步工具包還有一條在線編程ISP 電纜它可用以對AVR芯片編程STK300 還提供了AVR 應(yīng)用程序生成器可用來生成外圍設(shè)備的初始化代碼

問: 即使看門狗沒有使用我也有時在AVR Studio 調(diào)試軟件的狀態(tài)欄中看到“WDT reset” WDT 復(fù)位的信息這是為什么?答當(dāng)目標(biāo)器件運行在較高的頻率大于6 MHz)時來自扁平電纜FPC 電纜的噪聲信號可能錯誤地觸發(fā)WDT 復(fù)位檢測電路這對程序的仿真和執(zhí)行沒有影響它們不會由于噪聲的原因而產(chǎn)生復(fù)位噪聲僅僅影響AVR Studio 調(diào)試軟件的信息處理在這種情況下不要理睬這個信息當(dāng)目標(biāo)器件運行在較低的頻率小于或等于4 MHZ 時應(yīng)該不會出現(xiàn)這個問題
問: 我剛買了一臺ICE 200 仿真器在使用不同的芯片和不同的時間運行診斷程序時都是失敗的而其它一切正常這是什么原因?
答在ICE200 仿真器的第一批產(chǎn)品中是一個固件監(jiān)控程序的問題而導(dǎo)致這個現(xiàn)象這個現(xiàn)象可以通過升級新版本的監(jiān)控程序來修正當(dāng)使用2.02 版或更高版本的AVR Studio 軟件時AVRStudio 將讀取固件版本并檢查這個問題如果你的ICE200 需要升級它會引導(dǎo)你完成升級處理這個檢查工作只有在裝載應(yīng)用程序時才能被執(zhí)行而當(dāng)運行診斷程序時是不被啟動的如果你首先嘗試運行診斷程序診斷仿真器診斷程序不會檢查固件版本并且可能診斷失敗如果你碰巧有這種情況不要理睬診斷失敗而直接去裝載應(yīng)用程序這時你將可以升級ICE200 的監(jiān)控程序在升級后再回過來運行診斷程序診斷結(jié)果應(yīng)該全部是正確了(注現(xiàn)在銷售的ICE200 已沒有這個問題了)
問:如何檢查我的AVR 仿真器的版本號?
答在仿真器被連接的時候打開AVR Studio 程序選擇菜單中Help->About->Info 來獲得你的仿真器的有關(guān)信息AT90ICEPRO 在1.20 之前的版本和ATmegaICE 在1.11 之前的版本是不能被AVR Studio 軟件檢測到的較新的版本已經(jīng)有了而且可以從Atmel 網(wǎng)站自由下載.
問:程序在仿真器或 單片機 中不工作,而在模擬器中看來工作很正常這是什么原因?
答這是堆棧指針設(shè)置中的常見問題對所有帶SRAM 的AVR 單片機 堆棧指針必須設(shè)置在SRAM最后的地址
在匯編程序中這樣做是正確的
ldi R16 low(RAMEND) 裝載堆棧指針的低字節(jié)到R16
out SPL R16 輸出這個數(shù)值到堆棧指針寄存器
ldi R16 high(RAMEND) 裝載堆棧指針的高字節(jié)到R16
out SPH R16 如果AVR 的SRAM 小于256 字節(jié)就將這行注釋掉
在C 程序中堆棧指針是在啟動代碼中自動設(shè)置的注意鏈接文件(XCL 文件)定義了堆棧指針的位置請參考應(yīng)用筆記AVR032 ---- C 編譯器的鏈接文件”
問:從哪里我能找到完整的AVR 指令集?
答指令集在Atmel 的網(wǎng)站的Products->AVR 8 bit RISC->Datasheets 下面的網(wǎng)頁上或者直接連接http://www. atmel.com/atmel/products/prod200.htm網(wǎng)頁; <>附錄
3 AVR 指令速查表
問:當(dāng)開始做一個使用AVR 單片機 的新項目時最常見最共同問題有哪些?
答最常見最共同的錯誤是忘記對不帶硬件堆棧的芯片設(shè)置堆棧指針對AT90S8515 單片機 上這樣做是妥當(dāng)?shù)?br /> LDI R16 low(RAMEND)
OUT SPL R16
LDI R16 high(RAMEND)
OUT SPH R16
注在ATMEL 的匯編語言源程序中經(jīng)常將R16 寄存器用temp 符號來代替
另一個常見的錯誤是將端口作為輸出使用時忘記設(shè)置端口在AVR 單片機 中設(shè)置端口作為輸出使用是通過寫一個1 到數(shù)據(jù)方向寄存器(DDR)中完成的比如設(shè)置端口PORTB輸出高電平
LDI R16 0xFF 裝載十六進制數(shù)FF 到寄存器R16
OUT DDRB R16 設(shè)置端口PORTB作為輸出使用
OUT PORTB R16 設(shè)置端口PORTB輸出高電平
使用AVR 匯編器時第三個常見的錯誤是在使用裝載程序存儲器(LPM)指令時指向了程序存貯器中錯誤的地址AVR 的程序存貯器是組織成字16 bit 的形式而LPM 指令是讀取字節(jié)8bit LPM 指令可以讀16 位字的高位字節(jié)或低位字節(jié)中的任意一個因為這個原因必須將16 位的程序存貯器地址分解成兩個指向你所希望裝入的字節(jié)的地址

問:我在AT90ICEPRO 中使用回溯(Trace 功能選項感覺很困難好象每次都不能啟動回溯功能為什么?
答: 讓我們假設(shè)你在地址0x20 處停止仿真如果你現(xiàn)在設(shè)置啟動回溯功能的觸發(fā)地址是同一個地址即也是0x20 那么在程序重新到達0x20 之前的回溯功能是無效的原因是觸發(fā)條件與斷點信息應(yīng)該在指令之前裝入AVR 核中所以盡管指令和觸發(fā)條件在0x20 地址但對在這之前裝入AVR核中的指令沒有任何效果如果你設(shè)置觸發(fā)條件為一個程序還沒有到達的地址應(yīng)該不會有任何問題
問: Mega103/603 微控制器的哪些引腳用于在線編程(ISP)?
答Mega103/603 微控制器用于在線編程界面的引腳如下列
SCK- SCK (PB1PIN11)
MISO - PDO (PE1 pin 3)
MOSI - PDI (PE0 pin 2)
RESET- RESET (RESET pin 20)
PEN(編程使能)引腳和RESET 引腳可以選擇其中一個使用這兩個引腳有同樣的功能它們都激活內(nèi)部iRESET 信號) 但PEN 引腳只有在上電時(VCC大約1.2V)被讀取如果PEN 引腳不使用推薦將此引腳接VCC 所有其它型號的AVR 單片機 都是使用RESET 引腳來允許使能串行編程的
問:我不能使用AVR 仿真器正確地驅(qū)動外部負載當(dāng)我使用電壓表來測量仿真器POD 上的引腳時好象引腳不能驅(qū)動負載這是什么錯誤?
答這是1.21 版的ICEPRPO 和1.10 版的MegaICE 存在的問題,可用于仿真器升級的新版本軟件可以從http://www.atmel.com網(wǎng)站的products->AVR 8bit RISC->SOFtware 網(wǎng)頁中下載
為升級ICEPRPO 的版本到1.22 版請下載UPGRD122.ZIP 文件
為升級MegaICE 的版本到1.11 版請下載M111UPGR.ZIP 文件
這些文件是壓縮文件它包括了一個適用于仿真器的新的程序文件和一個PC 程序PC 程序可以用來對代碼檢查和對仿真器自動升級
問:我使用了帶A/D轉(zhuǎn)換器的AVR 單片機 單片機工作非常好我也喜歡AVR 的速度但我有一個問題當(dāng)我改變A/D 轉(zhuǎn)換器的輸入通道時好象A/D 轉(zhuǎn)換器讀取的數(shù)據(jù)仍然是上一個通道的,如果我第二次讀我又得到正確的數(shù)值為什么會出現(xiàn)這件事?
答A/D 控制和狀態(tài)寄存器ADCSR 中有兩個位是用來檢測A/D 轉(zhuǎn)換的結(jié)束的當(dāng)一個新的轉(zhuǎn)換啟動時ADSC 啟動轉(zhuǎn)換控制位是用于測試的不管是否準(zhǔn)備就緒前一次的轉(zhuǎn)換結(jié)果仍然被送入A/D 數(shù)據(jù)寄存器當(dāng)讀取A/D 數(shù)據(jù)寄存器時讀到的自然仍是上一次的轉(zhuǎn)換結(jié)果
為了得到最近的轉(zhuǎn)換結(jié)果應(yīng)該測試A/D 中斷標(biāo)志位ADIF 或使能全局中斷并且在中斷服務(wù)程序中讀取
例子代碼
ldi R16 1 選擇通道
out ADMUX R16
sbi ADCSR adif 復(fù)位中斷標(biāo)識
sbi ADCSR adsc 開始A/D 轉(zhuǎn)換
wait sbis ADCSR adif 等待直到ADIF 已經(jīng)置位
rjmp wait
問:當(dāng)將一個文件裝入AVR STUDIO 時它始終使用我第一次使用過的文件工作這是什么錯誤?
答AVD 文件包含了有關(guān)窗口設(shè)置和當(dāng)前目標(biāo)文件的信息有時由AVR STUDIO 創(chuàng)建的AVD文件可能被破壞根據(jù)文件破壞部位的不同會出現(xiàn)不同的現(xiàn)象當(dāng)運行AVR STUDIO 過程中出現(xiàn)奇怪問題時首先應(yīng)嘗試刪除位于存放源代碼的文件夾中護展名為avd 的文件
問:在AVR 系列中如AT90S2313 單片機 全部數(shù)據(jù)存儲器不超過256 字節(jié)而且它不能訪問外部存儲器能否忽略X Y 和Z 指針的高位字節(jié)而僅使用指針的低位字節(jié)來訪問可以使用的存儲器?
答在全部數(shù)據(jù)存儲器寄存器I/O 寄存器和SRAM 少于256 字節(jié)的AVR 單片機 中當(dāng)使用
LD/ST 指令訪問數(shù)據(jù)存儲器時CPU 將忽略指針的高位字節(jié)這時允許每個指針的高位字節(jié)(R27、R29 和R31)用于普通的儲存用途自增和預(yù)減指令(如LD -Z Rd)不會影響高位字節(jié)注意當(dāng)使用Z 指針訪問FLASH 程序存儲器和使用ADIW/SBIW 指令時將影響使用的Z 指針的高位字節(jié)
問在IAR C 編譯器中怎樣才能訪問AVR 內(nèi)部的EEPROM 數(shù)據(jù)存儲器
答AVR 內(nèi)部的EEPROM 是AVR 微控制器I/O 存貯器的一部分以I/O 接口形式訪問不能使用普通變量進行訪問IAR 在標(biāo)準(zhǔn)庫例程“ina90.h”中定義了特殊的宏來讀寫EEPROM
讀寫EEPROM 的宏有下列原形
_EEGET(VAR ADR) /* 從EERPOM 的地址ADR 讀取數(shù)值*/
_EEPUT(ADR VAL) /* 寫VAL 到EERPOM 的地址ADR *
IAR C 編譯器不支持將常量定義到EEPROM 中不能生成EEPROM 的初始化數(shù)據(jù)文件
用AVR 匯編器來做這件事是很容易的先寫一些定義EEPROM 中常量的代碼
.ESEG
.org 0x50
datatable: .db $01,$02,$03,$04,$05
dtableend: .db $00
當(dāng)這段代碼被匯編后它產(chǎn)生一個.EEP 文件這個文件可以被下載到微控制器MCU 或仿真器中這個.org 聲明給出數(shù)據(jù)的地址這個變量在C 編繹器中可以用_EEGET()和_EEPUT()進行訪問
問:我無法使MCU 在掉電模式時消耗的電流下降到數(shù)據(jù)簿中的值我應(yīng)該怎么做?
答當(dāng)AVR 進入掉電模式時I/O 引腳的狀態(tài)應(yīng)該是不變化的如果你有一些未連接引腳是三態(tài)輸入并且沒有上拉這些引腳的電平是浮動的并且很可能引起振蕩從而導(dǎo)致額外的電流消耗為解決這種問題應(yīng)該激活所有未連接的輸入引腳的上拉電阻這會使這些引腳具有一個明確的邏輯電平在由于引腳振蕩而產(chǎn)生這個問題的例子中在活動模式非休眠狀態(tài)打開未使用引腳的上拉是一個好方法
其次你再查看一下連接到輸出引腳的接線任何輸出引腳上的負載都會在掉電模式時消耗額外的電流
問:我觀察到我現(xiàn)有的微控制器在上電過程中I/O 端口是活動的在我的應(yīng)用中有一個問題系統(tǒng)一旦設(shè)定I/O 引腳中的一個為高電平MCU 可以關(guān)閉電源而即使用一個電阻把該引腳電平拉低在上電過程中它有時仍然出現(xiàn)高電平因此當(dāng)電源打開時系統(tǒng)立刻關(guān)閉在使用者看來系統(tǒng)不能工作如果我換成AVR 我猜想會有一些同樣的問題?
答大多數(shù)微控制器是同步復(fù)位比如在RESET 尚未完全完成時MCU 需要一定數(shù)量的有效時鐘在上電過程中當(dāng)VCC 上升到啟動晶體振蕩器的數(shù)值之前上電復(fù)位是有效的但不能影響I/O引腳的數(shù)值而且I/O 引腳是處于隨機狀態(tài)AVR 的I/O 端口與復(fù)位是異步的而且保證在整個上電過程中是處于三態(tài)換成AVR 單片機 將可以解決你的問題
問:怎樣處理AVR 微控制器的NC 引腳空引腳?
答不要將任何線路連接到NC 引腳NC 引腳是為將來的需用而保留的
問:在AVR 匯編器中怎樣定義字符串常量
答字符串可以作為常量定義在FLASH 存儲器或EEPROM 數(shù)據(jù)存儲器中
例如在FLASH 中定義一個字符串常量
.CSEG
fstring .db "This is a string in flash" 0x00
在EEPROM 中規(guī)定一串常量:
.ESEG
eestring .db "This is a string in EEPROM" 0x00
問:我正在編寫一個很大的匯編程序當(dāng)我往程序中加入新的行時文件末尾的字符好象消失了我怎樣才能防止這種現(xiàn)象?
答: 匯編器的編輯器有30K 字節(jié)的文件尺寸限制如果要克服這個限制文件必須被分成幾個模塊并用“.include”鏈接還有一種方法使用其它編輯器如NotePad UltraEdit 程序等和命令行方式工作的匯編器(DOS 版本)
問:AT90S8515 有8KB 的程序存儲器由于RJMP 和RCALL 指令只能在2K 的相對范圍內(nèi)跳轉(zhuǎn)而這個部件的指令集沒有JMP 或CALL 指令我怎樣做才能跳轉(zhuǎn)到全部的程序存儲器中
答程序存儲器是組織成4Kx16 的形式的所以只有4K 的程序存儲器地址空間在匯編器中選擇“Options >> Wrap Relative Jumps”選項這時將允許你跳過程序存儲器的邊界例如如果你從$FFE至$00A 做一個相對跳轉(zhuǎn)程序計數(shù)器將被增加12 并且隱藏了程序存儲器的邊界這個功能只能用在8K 的 單片機 4K 的單片機不需要隱藏邊界16K 的單片機需要使用JUMP 和CALL 指令.
問:當(dāng)我使用UART時定時/計數(shù)器的任意一個是否都可用于產(chǎn)生波特率?
答不對有一個專用的定時器被UART 用來產(chǎn)生波特率所有定時/計數(shù)器只可以用作普通用途
問:怎樣才能從外部將AT90S1200 從掉電模式下喚醒?
答要從掉電模式喚醒AT90S1200 你必須使能外部INT0 中斷并且是低電平觸發(fā)中斷當(dāng)你以掉電模式進入休眠狀態(tài)時如果INT0 引腳上低電平的保持時間大于16384 個內(nèi)部RC 振蕩周期時AT90S1200 將被喚醒內(nèi)部RC 振蕩器是用于延時MCU 的啟動直到XTAL 振蕩器工作穩(wěn)定參考AT90S1200 數(shù)據(jù)簿RC 振蕩器的頻率是受VCC 電壓影響的
問:當(dāng)我使用SBI 和CBI 指令來設(shè)置或清除I/O 端口的一個信號位時是否會影響同一端口的其它位?
答不會不像多數(shù) 單片機 那樣在AVR 單片機中允許你100%安全地操作I/O 端口的信號位這也適用于整個端口的操作有疑問可參考每個I/O 端口的三個地址
問:為什么每個I/O 端口有三個地址?
答為使你能建立100%安全的系統(tǒng)AVR 支持真正的讀-修改-寫I/O 端口如果你希望讀取I/O引腳的物理電平讀PIN 寄存器當(dāng)你希望改變輸出時讀PORT 鎖存能確保正確的數(shù)據(jù)寫回到端口保證全部輸出這種方式始終能給出你所希望的結(jié)果而不依賴于引腳的物理電平這個特點使你省去了為建立一個安全的系統(tǒng)而拷貝你的端口數(shù)據(jù)進入存貯器的所有工作這個工作使用了許多指令當(dāng)你使用SBI 和CBI 指令來設(shè)置/清除I/O 端口的信號位時必須始終使用PORT 的地址
問:為什么SBI 和CBI 指令只能對$00 -$1F的I/O 寄存器進行操作?
答所有AVR 指令中除少數(shù)外都為兩個字節(jié)長度這也意味著只有65,536(64K)種可能的組合來安排指令集當(dāng)我們指定AVR 指令集時采取一些折衷的辦法是為了盡可能充分地利用這64K 種組合不像CISC 微控制器指令可以是一個兩個三個或更多個字節(jié)在AVR 結(jié)構(gòu)上我們不能實現(xiàn)全部指令都象這樣作為例子在一個立即尋址而且包含全部32 個寄存器地址的指令中常數(shù)需要8 位而寄存器地址需要另外的5 位這種指令將占用全部指令組合空間中的8K 換句話講我們只能安排八個這樣的指令而沒有更多的指令能夠?qū)崿F(xiàn)如果做一個17 位長度的指令是不經(jīng)濟和不方便的方案不會被考慮在設(shè)計AVR 指令集的過程中設(shè)置我們聽取了許多建義我們請教了C 編譯器專家他們在如何調(diào)整指令集來適應(yīng)C 編譯器方面提出了許多意見作為例子編譯器專家建議我們?yōu)镾BCI 帶進位的立即數(shù)減法犧牲ADDI 指令
對那些缺少的指令操作也是方便的AVR 的代碼效率應(yīng)該能證明我們已經(jīng)找到一種在實現(xiàn)的指令和省略的指令之間進行折衷的好辦法
問:為什么立即尋址指令在寄存器R0-R15 中不能工作?
答所有AVR 指令中除少數(shù)外都為兩個字節(jié)長度這也意味著只有65,536(64K)種可能的組合來安排指令集當(dāng)我們指定AVR 指令集時采取一些折衷的辦法是為了盡可能充分地利用這64K 種組合不像CISC 微控制器指令可以是一個兩個三個或更多個字節(jié)在AVR 結(jié)構(gòu)上我們不能實現(xiàn)全部指令都象這樣作為例子在一個立即尋址而且包含全部32 個寄存器地址的指令中常數(shù)需要8 位而寄存器地址需要另外的5 位這種指令將占用全部指令組合空間中的8K 換句話講我們只能安排八個這樣的指令而沒有更多的指令能夠?qū)崿F(xiàn)而做一個17 位長度的指令是不經(jīng)濟和不方便的方案不會被考慮在設(shè)計AVR 指令集的過程中設(shè)置我們聽取了許多建義我們請教了C 編譯器專家他們在如何調(diào)整指令集來適應(yīng)C 編譯器方面提出了許多意見作為例子編譯器專家建議我們?yōu)镾BCI 帶進位的立即數(shù)減法犧牲ADDI 指令
對那些缺少的指令操作也是方便的AVR 的代碼效率應(yīng)該能證明我們已經(jīng)找到一種在實現(xiàn)的指令和省略的指令之間進行折衷的好辦法
問:為什么沒有EORI 指令?
答所有AVR 指令中除少數(shù)外都為兩個字節(jié)長度這也意味著只有65,536(64K)種可能的組合來安排指令集當(dāng)我們指定AVR 指令集時采取一些折衷的辦法是為了盡可能充分地利用這64K 種組合不像CISC 微控制器指令可以是一個兩個三個或更多個字節(jié)在AVR 結(jié)構(gòu)上我們不能實現(xiàn)全部指令都象這樣作為例子在一個立即尋址而且包含全部32 個寄存器地址的指令中常數(shù)需要8 位而寄存器地址需要另外的5 位這種指令將占用全部指令組合空間中的8K 換句話講我們只能安排八個這樣的指令而沒有更多的指令能夠?qū)崿F(xiàn)而做一個17 位長度的指令是不經(jīng)濟和不方便的方案不會被考慮在設(shè)計AVR 指令集的過程中設(shè)置我們聽取了許多建義我們請教了C 編譯器專家他們在如何調(diào)整指令集來適應(yīng)C 編譯器方面提出了許多意見作為例子編譯器專家建議我們?yōu)镾BCI 帶進位的立即數(shù)減法犧牲ADDI 指令
對那些缺少的指令操作也是方便的AVR 的代碼效率應(yīng)該能證明我們已經(jīng)找到一種在實現(xiàn)的指令和省略的指令之間進行折衷的好辦法
問:我用"sbr r30,3"指令在寄存器30 中設(shè)置D3 位好象對D3 位不起作用但D0 位與D1 位可以被設(shè)置我的做法在哪里有錯誤?
答“SBR” 可以用來在一個寄存器中同時設(shè)置多位(象“CBR”可以用來同時清除寄存器中的多位)指令的第二個參數(shù)不是指定位號而是用來與寄存器中的數(shù)作邏輯或運算在這個例子中$03 與R30 的內(nèi)容相或所以導(dǎo)致最低的兩位置位為了只設(shè)置D3 位應(yīng)嘗試下列方法的一種
sbr r30 $08
sbr r30 0b00001000
sbr r30 (1<<3)
上面三行都會產(chǎn)生同樣的結(jié)果你可以選擇一個你最習(xí)慣的用法
問:在我的多任務(wù)系統(tǒng)中除了中斷標(biāo)志以外我還需要定義可以設(shè)置和清除的標(biāo)志我應(yīng)該怎樣做?
答每個標(biāo)志使用一個寄存器為了設(shè)置標(biāo)志用
ldi flag 01
或者如果你想使用低位的寄存器(R0-R15) 在復(fù)位后先清除它然后用
inc flag
來設(shè)置標(biāo)志
當(dāng)檢查和清除標(biāo)志時這樣做
lsr flag 移動標(biāo)志到進位標(biāo)志位(標(biāo)志清除)
brne flag_was_set 如果標(biāo)志被設(shè)置就跳轉(zhuǎn)
象在你所有的中斷例程中一樣在退出之前要恢復(fù)狀態(tài)寄存器這種方式十分安全
問:在AT90S1200 中如何實現(xiàn)常數(shù)表功能?
答由于AT90S1200 沒有LPM 指令比較有效的方法是將一個較小的常數(shù)表放置在EEPROM 中你可以使用EEPROM 地址寄存器和EEPROM 數(shù)據(jù)寄存器有效地直接訪問常數(shù)表如
.ESEG 定義EEPROM 段
.db my_var00=$45
.db my_var01=$4c
.db my_var02=$5f
.CSEG 定義通用代碼段
如果你的表不適合于放置在EEPROM 中你可以象下面這樣放置在FLASH 中
.def tp =r16 表指針表索引
.def output=r17 輸出表的中常數(shù)
table
ldi output,$45
cpi tp,01
breq end
ldi output,$4c
cpi tp,02
breq end
ldi output,$5f
cpi tp,03
breq end
end
ret
為了訪問表中的2 號元素可以這樣做
ldi tp 2
rcall table
當(dāng)從表格子程序返回時“output”將包括“$4c”
問:在沒有ADDI 指令的情況下怎樣將一個常數(shù)立即數(shù)和寄存器的內(nèi)容相加?
答一個較簡單的方法是減去一個負數(shù)下面的代碼是將寄存器R20 中和5 的相加的例子
subi r20 -5
注意無論如何在這種情況下進位標(biāo)志位不能用于檢測溢出如果你已經(jīng)將常數(shù)放入另一個寄存器你可以使用通用的ADD 指令如果常量是1 你能使用INC 指令來增加寄存器的值16 位的加法是同樣的下列代碼是將r17 r16 和$0b3c 相加的例子
subi r16 low(-$0b3c) 減去低位字節(jié)
sbci r17 high(-$0b3c) 減去高位字節(jié)
問:為實現(xiàn)指令的單周期運行是否對外部時鐘倍頻?
答沒有這個時鐘是MCU 真正使用的沒有使用時鐘分頻或倍頻電路
問: AVR 的一個指令周期使用了多少個時鐘周期?
答只有一個時鐘周期例如在寄存器中加入兩個數(shù)全部執(zhí)行時間等于在XTAL1 引腳上的時鐘信號正半周加負半周的時間
問:為什么AT90S8515 稱8K 的MCU?
答大多數(shù)CISC 微控制器的指令是變長度的一些指令由單字節(jié)組成其它的指令也可以是四個字節(jié)長度大多數(shù)AVR 指令是兩個字節(jié)長度只有很少也是四個字節(jié)所以CPU 在啟動運行時不能每次只讀取和解釋一個字節(jié)而我們的代碼尺寸基準(zhǔn)始終是和字節(jié)相比較的因此在80C51上填滿8K 的一個C 程序肯定也適合的8K 的AVR
問:我從哪里能找到數(shù)據(jù)簿?
答你可以從網(wǎng)站www.atmel.com有選擇地下載它們你也可從當(dāng)?shù)胤咒N商和ATMEL 辦事處得到數(shù)據(jù)簿你還可以發(fā)電子郵件到literature@atmel.com索取
問:AVR 有哪些超過我現(xiàn)有MCU 的附加性能?
答十分緊湊的代碼, 特別是對C 程序4-10 倍的高速度可編程FLASH 存儲器可在系統(tǒng)編程芯片內(nèi)含EEPROM 存貯器可在系統(tǒng)編程低功耗

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉