AVR單片機問世以來,獲得廣泛關注。它是一種采用精簡指令集、以時鐘周期為機器周期的高速單片機。它采用快速寄存器文件(共有32個寄存器 R0~R31,其中R16~R31具有較強通用功能)、快速單周期指令。另外在存儲器技術(Flash存儲器、EEPROM)、低功耗、系統(tǒng)可靠性、定時 /計數(shù)器功能多樣化等方面也都具特色。但由于采用精簡指令集,它沒有一般8位機的DAA指令。因BCD碼加減法運算及定點數(shù)制轉換都要用到DAA功能,故給使用匯編語言研發(fā)帶來不便。本文重點介紹用軟件實現(xiàn)DAA的方法。
計算機采用的十進制操作數(shù)一般都為壓縮型8421 BCD碼,每個BCD碼表示1位十進制數(shù)。每2位BCD碼共存于同一字節(jié)單元中,故BCD運算涉及狀態(tài)寄存器SREG的進位C(第0位)和半進位H(第5 位)。它們分別為高、低位BCD的進(借)位。在進行BCD碼加減運算時,計算機是按二進制數(shù)對待的,因此會產生與十進制運算規(guī)則不相符合的情況:一是當產生進(借)位(C=1或H=1)時,該進(借)位等于16(對所涉及的1位BCD碼而言),而在十進制運算中應等于10;二是可能產生非法BCD碼(值大于9)。軟件DAA即為糾正以上錯誤而設的。
1 軟件DAA的實現(xiàn)方法
1.1 實現(xiàn)加法DAA功能子程序ADAA和ADAA1的設計方法
經實踐考查,BCD碼加法運算,可產生以下3種情況:
① 不須調整,特點是既不產生進位,也不產生非法BCD碼。如$22+$11=$33。
② 產生非法BCD碼,必須加6調整。特點是BCD碼相加后不產生進位,但加6調整后產生進位。如
$36+$37=$6D(產生非法BCD),加6調整后變?yōu)?73(產生半進位H)。$68+$87=$EF,加$66調整后變?yōu)?155(產生進位C和半進位H)等。
③ 產生進位,必須加6調整。特點是BCD碼相加只產生進位,不會同時產生非法BCD碼;而加6調整后既不會再產生進位/半進位(而是清除了原來的進位/半進位),也不會產生非法BCD碼。例:
$99+$88=$121,進位C和半進H位都置位,故加$66來調整:$21+$66=$87,并要恢復進位C。
綜合以上3種情況,得出下面加法DAA之實現(xiàn)方法:首先保存BCD碼相加后的狀態(tài)寄存器SREG(保存其中的進位C和半進位H,稱為Co和Ho)。再將 BCD碼之和加上$66,產生出新的進位Cn及半進位Hn。若Co、Cn中有1個置位(只能有1個!),說明高位BCD滿足調整條件并調整完畢,否則為不夠調整條件,應減$60恢復;若Ho、Hn中有1個(只能有1個!)置位,說明低位BCD滿足調整條件并調整完畢,否則為不夠調整條件,應減6恢復。程序中是將新、舊進位和半進位對應"或"起來,只對"或"結果進行判斷。注意,軟件DAA功能既要保證本字節(jié)壓縮BCD碼相加值的正確性,又要保證對高位 BCD產生進位的正確性,故要將Co∨Cn的結果返還給SREG,以使下一步能正確實現(xiàn)高位BCD帶進位加。
ADAA為BCD碼相加調整子程序,使用寄存器R20作為工作單元(使用R22、R11、R10等3個寄存器作為輔助工作單元),所有調整工作都在此單元內進行。
ADAA1為數(shù)制轉換程序中實現(xiàn)BCD碼左移調整的子程序,為加法DAA之特例:它在R20工作單元內實施BCD碼帶進位位自加并完成對和的調整。
1.2 實現(xiàn)減法DAA功能子程序SDAA的設計方法
由實踐可知,減法DAA要比加法來得簡單:只須對產生借位的BCD碼進行調整。BCD碼減法運算,只有以下2種情況:
① 不產生借位,不須調整,如 $22-$11=$11。
② 產生借位,此時不論有否非法BCD碼產生,一律對產生借位的BCD碼加$A調整。但AVR單片機沒有加字節(jié)型立即數(shù)指令,改為減6調整,要注意加原和減補對進位的影響是相反的。為保證多字節(jié)壓縮BCD碼運算的正確性,若調整后清除了借位C,必須將其恢復。例如$22-$54=$CE,因C、H皆置位,用減去$66來調整$CE-$66=$68,調整后清除了借位C,故子程序中還要加SEC 指令來恢復借位C。
注:MCS-51單片機減法DAA子程序很容易按此移植(半進位為AC)。
1.3 實現(xiàn)右移DAA功能子程序RDAA的設計方法
見"3 定點數(shù)制轉換子程序"中對BCD碼右移調整的說明。
2 定點運算子程序
(1)多字節(jié)壓縮BCD碼加法子程序ADBCD
加法在寄存器內直接完成,以R20為DAA工作單元。BCD碼相加后,將和送到R20,調用ADAA子程序,實現(xiàn)對和的調整(返回主程序后再回送調整結果)。
(2)多字節(jié)壓縮BCD碼減法子程序SUBCD
減法在寄存器內直接完成,以R20為DAA工作單元。BCD碼相減后,將差送至R20,調用SDAA子程序,實現(xiàn)對差的調整(返回主程序后再回送調整結果)。
(3)乘法子程序MUL16
操作:(R13,R12)×(R15,R14)→ R17,R16,R15,R14
采用字乘字無符號數(shù)運算。采取逐次右移部分積和乘數(shù),當乘數(shù)移出位等于1時將被乘數(shù)加入部分積的方法完成計算。可視為16位整數(shù)×16位整數(shù)→32位整數(shù),也可視為16位整數(shù)×16位小數(shù)→16位整數(shù),或視為16位小數(shù)×16位小數(shù)→32位小數(shù)。可加上舍入處理。
(4)除法子程序DIV16
操作:(R17,R16,R15,R14)÷(R13,R2)→R15,R14
采用雙字除以字無符號數(shù)運算。采取逐次左移被除數(shù)與除數(shù)相減、試商、記商的方法完成計算。可視為雙字型整數(shù)÷字型整數(shù)→字型整數(shù),也可視為小數(shù)÷小數(shù)→ 小數(shù)。要求 (R17,R16)<(R13,R12)。可加上舍入處理,但要注意可能產生舍入溢出(例如$7FFFC000÷$8000=$FFFF.8,舍入取整即產生溢出)。
(5)開平方子程序SQR
操作:(R17,R16,R15,R14)→R14,R13,R12
可視為雙字型整數(shù)X(≤4294967295)開平方,因有舍入處理,方根最大可達$10000(如X=$FFFF0000開平方即屬此),故用3字節(jié)存儲平方根。也可視為定點小數(shù)開平方,將X自最高位起每2位進行分割,采用摸擬手算的方法(X每左移2位試出1位根)開平方。
3 定點數(shù)制轉換子程序
該組子程序由定點整數(shù)二翻十、定點整數(shù)十翻二、定點小數(shù)二翻十和定點小數(shù)十翻二等4個子程序組成,分別稱為CONV1、CONV2、CONV3和CONV4。由于AVRAT90系列單片機只有字節(jié)乘字節(jié)指令,計算功能不強,故采用移位調整法實現(xiàn)多字節(jié)數(shù)據(jù)的數(shù)制轉換。其中,整數(shù)二翻十子程序CONV1和小數(shù)十翻二子程序CONV4采取左移調整的方法,而整數(shù)十翻二子程序CONV2和小數(shù)二翻十子程序CONV3采用右移調整的方法。不論左移還是右移,調整總是對十進制數(shù)進行,其目的是使十進制數(shù)的移位規(guī)則符合于二進制數(shù)移位規(guī)則:左移1位值增倍,右移1位值折半。當某位BCD中的最高位(8)左移移入高位BCD中時,按二進制數(shù)看待應為16,而按十進制數(shù)相鄰位看待只能為10,故要做加6調整。另外,左移過程中若出現(xiàn)非法BCD碼時也要對其調整。BCD碼左移只不過是BCD碼相加的特例,故調用 BCD碼相加調整子程序ADAA1就可完全解決左移調整問題。當右移BCD碼時,若某位BCD中的1移入低位BCD最高位,按二進制數(shù)看待,1折半應為 0.5,而低位BCD中最高位值為0.8,故要做減3(即0.3)調整。因8421BCD碼其各位之權(某位上的1所代表的實際數(shù)值)分別為8、4、2和 1,若只在本碼位內部移動,則符合左移1位值增倍、右移1位值折半的規(guī)則,故不須調整。
本組定點運算及數(shù)制轉換子程序為適應大多數(shù)應用場合而設,具體使用時可加以修改。如整數(shù)二翻十時,二進制數(shù)不超過$FFFF,為提高運行速度,可將二進制數(shù)改為二字節(jié),十進制數(shù)改為3字節(jié),并將移位循環(huán)次數(shù)(R21)改為16。如數(shù)據(jù)精度不夠,可把乘法子程序改為3字節(jié)乘3字節(jié)等等。
ADAA1為左移BCD碼并對其進行調整的子程序。
RDAA為對右移后的BCD碼進行測試、實施減3調整的子程序,以R20為工作單元。
注:開平方子程序SQR說明中,請將對開平方數(shù)R17、R16、R15、R14加上完整根號。
參考文獻
1 宋建國,等. AVR單片機原理及其應用. 北京:北京航空航天大學出版社, 2000
2 張克彥. MCS-51/196單片機浮點程序和實用程序(2.2.7 2.4.1 3.1.2 3.1.3等小節(jié)). 北京:北京航空航天大學出版社, 2001
上一篇:AVR看門狗使用范例即Reset程序詳解
下一篇:典型的ATmega128的軟件USART的接口程序
推薦閱讀
史海拾趣
Amperite Co. 是一家在電子行業(yè)中知名的公司,專注于生產和銷售電子元件。以下是關于Amperite Co. 發(fā)展的五個相關故事:
成立與早期發(fā)展:Amperite Co. 成立于20世紀40年代初,總部位于美國紐約州。公司最初專注于生產和銷售電子繼電器和時間延遲器等元件,以滿足當時快速發(fā)展的電子設備市場的需求。通過不斷的技術創(chuàng)新和產品優(yōu)化,Amperite Co. 在行業(yè)內建立了良好的聲譽。
技術創(chuàng)新與產品多樣化:隨著電子行業(yè)的發(fā)展和技術的進步,Amperite Co. 不斷進行技術創(chuàng)新,擴展產品線。除了傳統(tǒng)的繼電器和時間延遲器,公司還推出了一系列新型電子元件,包括光耦合器、固態(tài)繼電器、傳感器等。這些新產品的推出使得Amperite Co. 能夠滿足不同客戶的需求,并保持競爭力。
質量控制與生產優(yōu)化:Amperite Co. 始終把質量放在首位,實施嚴格的質量控制措施。公司采用先進的生產設備和工藝,確保產品質量穩(wěn)定可靠。此外,Amperite Co. 不斷優(yōu)化生產流程,提高生產效率,降低生產成本,以提供更具競爭力的產品價格。
客戶服務與合作伙伴關系:Amperite Co. 重視客戶服務,并與客戶建立了長期穩(wěn)定的合作關系。公司為客戶提供及時的技術支持和售后服務,滿足客戶的需求。此外,Amperite Co. 還與全球各種電子設備制造商建立了合作伙伴關系,共同推動技術創(chuàng)新和產品發(fā)展。
持續(xù)發(fā)展與市場拓展:Amperite Co. 不斷追求發(fā)展和壯大,通過開拓新市場和拓展業(yè)務范圍實現(xiàn)了持續(xù)增長。公司將目光投向國際市場,擴大產品銷售網(wǎng)絡,拓展海外客戶群。同時,Amperite Co. 還積極參與行業(yè)展會和技術交流活動,加強品牌宣傳,提升市場知名度。
這些故事展示了Amperite Co. 從成立初期到如今在技術創(chuàng)新、產品多樣化、質量控制、客戶服務與合作伙伴關系以及持續(xù)發(fā)展與市場拓展等方面取得的重要進展。
FUJIKURA(株式會社藤倉)在電子及光纖通信行業(yè)中有著悠久而輝煌的發(fā)展歷程。以下是五個關于FUJIKURA公司發(fā)展起來的相關故事,每個故事均基于事實描述,并盡量保持字數(shù)在500字以上:
1. 創(chuàng)立與早期發(fā)展
FUJIKURA公司成立于1885年,由藤倉善八先生創(chuàng)立,起初專注于發(fā)電機用的絹卷線制造。這一初創(chuàng)階段為公司奠定了堅實的電線電纜制造基礎。隨著技術的不斷積累,F(xiàn)UJIKURA逐漸擴展到更廣泛的電氣和電子領域,為公司的長期發(fā)展奠定了堅實的基礎。
2. 技術創(chuàng)新與行業(yè)領導地位
在多年的發(fā)展中,F(xiàn)UJIKURA始終致力于技術創(chuàng)新,不斷推出具有行業(yè)影響力的新產品。特別是在光纖通信領域,F(xiàn)UJIKURA憑借其強大的研發(fā)能力和技術實力,成為了全球領先的光纖通信產品研發(fā)與生產商。公司不僅在光纖制造方面取得了顯著成就,還在光纖熔接、光數(shù)據(jù)傳輸?shù)阮I域擁有多項專利技術,推動了整個行業(yè)的發(fā)展。
3. 全球化戰(zhàn)略與市場拓展
隨著全球市場的不斷開放和競爭的加劇,F(xiàn)UJIKURA積極實施全球化戰(zhàn)略,通過設立海外分支機構、與當?shù)仄髽I(yè)合作等方式,不斷拓展海外市場。目前,F(xiàn)UJIKURA的商務與服務網(wǎng)絡已經覆蓋全球多個國家和地區(qū),為全球客戶提供優(yōu)質的產品和服務。這一戰(zhàn)略不僅提升了公司的國際影響力,還為公司帶來了更多的商業(yè)機會和發(fā)展空間。
4. 企業(yè)文化與團隊建設
FUJIKURA注重企業(yè)文化的建設和團隊精神的培養(yǎng)。公司秉承“向客戶提供價值”的企業(yè)理念,致力于為員工創(chuàng)造一個積極向上、團結協(xié)作的工作環(huán)境。通過定期的培訓、團隊建設活動等方式,F(xiàn)UJIKURA不斷提升員工的綜合素質和團隊協(xié)作能力,為公司的持續(xù)發(fā)展提供了有力的人才保障。
5. 應對挑戰(zhàn)與持續(xù)發(fā)展
面對全球經濟大蕭條等嚴峻挑戰(zhàn),F(xiàn)UJIKURA展現(xiàn)出了強大的韌性和適應能力。公司全體員工團結一致,以共享目標和積極態(tài)度應對挑戰(zhàn),將危機視為機遇。通過實施“第三次創(chuàng)業(yè)”和企業(yè)文化改革等措施,F(xiàn)UJIKURA不僅成功度過了難關,還實現(xiàn)了持續(xù)穩(wěn)健的發(fā)展。未來,F(xiàn)UJIKURA將繼續(xù)秉持顧客價值創(chuàng)造的理念,積極應對社會需求,為實現(xiàn)贏得客戶信賴的承諾而努力。
DART公司成立于英國的一個小城市,最初只有幾名工程師和少量的資金。然而,他們憑借著對電子技術的熱愛和對創(chuàng)新的不懈追求,逐漸在行業(yè)中嶄露頭角。公司的創(chuàng)始人是一位資深的電子工程師,他帶領團隊開發(fā)了一款具有革命性的新型傳感器,這款傳感器在精度和穩(wěn)定性上遠超當時的同類產品。這一技術突破為DART公司贏得了第一個重要的客戶,也為公司的未來發(fā)展奠定了堅實的基礎。
在快速發(fā)展的過程中,DART公司也遇到了不少挑戰(zhàn)和危機。例如,某個時期全球電子元器件供應緊張,導致公司面臨嚴重的原材料短缺問題。面對這一挑戰(zhàn),DART公司迅速調整采購策略,積極尋找新的供應商和替代品,并加強與現(xiàn)有供應商的合作和溝通。通過這些措施,公司成功度過了危機,并保持了業(yè)務的穩(wěn)定增長。
Conxall公司的創(chuàng)始人李華,是一位在電子行業(yè)摸爬滾打多年的工程師。他深感市場上電子產品同質化嚴重,缺乏真正的創(chuàng)新。于是,他毅然決定創(chuàng)立Conxall公司,致力于研發(fā)具有獨特功能和高性能的電子產品。李華帶領團隊日夜奮戰(zhàn),終于研發(fā)出了第一款具有自主知識產權的智能手機芯片,憑借其出色的性能和穩(wěn)定性,迅速在市場上獲得了認可。
Eclipse的成功離不開其強大的社區(qū)支持。Eclipse社區(qū)擁有眾多的開發(fā)者、測試者和用戶,他們共同為Eclipse的發(fā)展貢獻力量。通過舉辦開發(fā)者大會、在線論壇和郵件列表等方式,Eclipse社區(qū)為開發(fā)者們提供了一個交流學習的平臺。在這個平臺上,開發(fā)者們可以分享經驗、解決問題,共同推動Eclipse的發(fā)展。
聲卡是多媒體計算機最基本的配置硬件之一,...并以三角波信號發(fā)生器為例,詳細介紹了該信號發(fā)生器的具體實現(xiàn)方法,這對獲得難以用常規(guī)儀器設備產生的信號提供了... … 查看全部問答∨ |
在線的看的出來都來加入會員吧,我們這里有很多有用的資料. 在這里找相關的東西比在別的地方找的都快,因為我們每一個會員都會把自己用過的資料發(fā)上來的.… 查看全部問答∨ |
大家以后再LINUX上面寫程序一定要注意,無論多個文件還是單個文件,一定都要寫Makefile,剛才就是因為我沒有寫Makefile,一不小心把我的.c文件給編譯成了.c文件!~寫了幾天的程序,又要重新寫了!~ … 查看全部問答∨ |
1. 串口的基本概念 在STM32的參考手冊中,串口被描述成通用同步異步收發(fā)器(USART),它提供了一種靈活的方法與使用工業(yè)標準NRZ異步串行數(shù)據(jù)格式的外部設備之間進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供寬范圍的 ...… 查看全部問答∨ |
CAN總線控制器sja1000 基地址怎么計算? 看了好多51的,都是根據(jù)CS來確定,如:CS接的是p20腳,AD0-AD7接P0,這樣基地址就是0XFE00;但如果AD0-AD7不是接P0,而是P0口4個,P1口4個,片選接在P3.0上,那么這時基地址怎么算? 第一 ...… 查看全部問答∨ |
我今年剛畢業(yè),專業(yè)計算機科學與技術,之前一直自學Linux驅動與應用,但是現(xiàn)在工作了,經理讓我去調powerpc的Uboot,經常有客戶自己設計的板子,在演示板的基礎上硬件做了些改動就跑不起來了,也就是技術支持吧,現(xiàn)在調試的過程中發(fā)現(xiàn)自己的硬件知 ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 面壁智能端側大模型首日上線,英特爾工程師聯(lián)合優(yōu)化實現(xiàn)2.2倍推理效率躍升
- 瞄準車規(guī)級碳化硅,理想發(fā)表重要成果
- 車規(guī)級MCU國內替代提速
- 博世新獲國內頭部車企座艙域控項目定點
- 首款測量電動汽車電機溫度的傳感器問世,提升對磁鐵的保護以減少稀土的使用
- Arm開發(fā)出計算子系統(tǒng) 以加速汽車設計的下一代AI芯片的開發(fā)
- 福特汽車申請新專利 或實現(xiàn)車庫定向音樂播放
- 泊車場景一定需要超聲波嗎?
- 同星新一代TC1055 Pro開啟車載網(wǎng)絡測試新時代
- 福特汽車申請新專利 或將配備安全卡追蹤系統(tǒng)
- 免費體驗業(yè)界最快編譯速度&最好性能 Quartus II v15.0網(wǎng)頁版下載有禮!
- 看視頻贏京東卡 | PI無刷直流電機學習中心正式上線
- 免費申請 | SFH 4713B紅外LED樣片,體驗革新性IR:6技術
- 希望一月 愛上EEWORLD——論壇推廣月
- ADI 新一期《模擬對話》上線,免費下載ing!
- 有獎直播|TI Matter 解決方案助力智能家居創(chuàng)新
- 沁恒CH579M-R1開發(fā)板免費測評,豐富外設等你體驗
- 【EEWORLD第三十六屆】2012年03月社區(qū)明星人物揭曉!
- 閱讀TI工業(yè)應用方案精彩專題,開啟任意寶箱,挑戰(zhàn)答題抽好禮!
- 如何看待榮耀Play與聯(lián)想Z5懟小米?小米員工稱因為愛
- vivo NEX外觀配置全確認 就差一個價格了
- 樂鑫連續(xù)三年被 Gartner 物聯(lián)網(wǎng)酷供應商榜單引用
- 曲線救國?雅各布招“舊部”成立新公司 仍謀求私有化高通
- Parrot推出4K迷你版無人機Anafi 僅重320g
- 微軟Build 2018展示Visual Studio功能:跨系統(tǒng)云編程
- Spectrum儀器推出超高精度的獨立數(shù)字化儀系列產品
- Silicon Labs和Calnex采用經25GbE/100GbE收發(fā)器驗證時鐘解決方案
- 搭載驍龍845,“全速旗艦”一加6唯快不破
- TNT和英特爾首次以VR形式轉播NBA西部決賽
- mini 2440開發(fā)板寫流水燈的問題
- Netgear DG934G無線路由器拆解分析
- 請問學protel哪個版本好,是99還是2004啊!
- 如何用VHDL語言設計DAC0832芯片??
- 如何使用DriverLINX進行高速數(shù)據(jù)讀取以及同步數(shù)據(jù)寫入?
- 游游
- 請問LED驅動中的valley switching是什么意思啊
- EEWORLD大學堂----直播回放:模擬世界的最重要構成 - 信號鏈與電源:接口專場
- Altium Designer對于STEP格式的3D模型的支持及導入導出
- EEWORLD大學堂----直播回放: ADI 數(shù)字主動降噪耳機方案