《AVR單片機》PPT課件.ppt

上傳人:san****019 文檔編號:17253129 上傳時間:2020-11-16 格式:PPT 頁數(shù):35 大?。?58.76KB
收藏 版權申訴 舉報 下載
《AVR單片機》PPT課件.ppt_第1頁
第1頁 / 共35頁
《AVR單片機》PPT課件.ppt_第2頁
第2頁 / 共35頁
《AVR單片機》PPT課件.ppt_第3頁
第3頁 / 共35頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《AVR單片機》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《AVR單片機》PPT課件.ppt(35頁珍藏版)》請在裝配圖網上搜索。

1、 AVR單片機原理及應用 陳淵睿 Tel: 13002086301 E-mail: 華南理工大學電力學院 第四章 匯編語言程序設計 4.1 匯編語言基礎 匯編語言 源文件 是由匯編語言代碼和匯編 程序指令所組成的 ASCII 字符文件。 匯編語言源文件包括 指令助記符 、 標號 和 偽指令 。指令助記符和偽指令常帶 操作數(shù) 4.1.1 匯編 語句格式 程序輸入行有下列種形式: 【標號】偽指令【操作數(shù)】【注釋】。 【標號】指令【操作數(shù)】【注釋】。 注釋。 空行。 例子: Label: .EQU Var1=100 ;置 Var1 等于 100 偽指令

2、 .EQU Var2=200 ;置 Var2 等于 200 test: rjmp test ;無限循環(huán)指令 ;純注釋行 注意:不限制有關標號偽指令注釋或指令的 列位置 4.1.2匯編器偽指令 偽指令 并不直接轉換成操作數(shù),而是用于調整存儲 器中程序的位置,定義宏,初始化存儲器等 偽指令表 序號 偽指令 說 明 序號 偽指令 說 明 1 BYTE 在 RAM中定義預留存儲單元 10 EXIT 退出文件 2 CSEG 聲明代碼段 11 INCLUDE 包含指定的文件 3 DB 定義字節(jié)常數(shù) 12 MACRO 宏定義開始 4 DEF 定義寄存器

3、符號名 13 ENDMACRO 宏定義結束 5 DEVICE 指定為何器件生成匯編代碼 14 LISTMAC 列表宏表達式 6 DSEG 聲明數(shù)據(jù)段 15 LIST 列表文件生成允許器 7 DW 定義字常數(shù) 16 NOLIST 關閉列表文件生成 8 EQU 定義標識符常量 17 ORG 設置程序起始位置 9 ESEG 聲明 E2PROM段 18 SET 賦值給標識符 表達式 匯編器的表達式 由操作數(shù)、運算符和函數(shù)組成。 所有的表達式內部為 32位 (二進制 ) 操作數(shù) (1)用戶定義的標號,該標號給出了放置標號位置的 定位計數(shù)器 的值 (2)用戶用 SET偽指令定義的變

4、量 (3)用戶用 EQU偽指令定義的常數(shù) (4)整數(shù)常數(shù),包括下列幾種形式 十進制缺省值 10 255 十六進制數(shù)二進制表示法 0 x0a,$0a,0 xff.$ff 二進制數(shù) 0b00001010,0b11111111 (5)PC, 程序存儲器定位計數(shù)器的當前值 匯編器的函數(shù) (而非單片機內的函數(shù) ) 有 LOW、 HIGH、 BYTE2、 BYTE3 匯編器所認的運算符 部分運算符表 序 號 運算符 名 稱 優(yōu)先級 說 明 1 ! 邏輯非 14 單目運算符,表達式是 0則返回 1, 表達式是 1則返回 0 2 逐位非 14 單目運算符,將表達式的值按位取反

5、 3 - 負號 14 單目運算符,使表達式為算術負 4 * 乘法 13 雙目運算符,兩個表達式相乘 5 / 除法 13 雙目運算符,左邊表達式除以右邊表達式, 得整數(shù)的商值 6 + 加法 12 雙目運算符,兩個表達式相加 7 減法 12 雙目運算符,左邊表達式減去右邊表達式 8 < 右移 11 雙目運算符,左邊表達式值右移右邊表達式給出的次數(shù) 10 < 小于 10 雙目運算符,左邊帶符號表達式值小于 右邊帶符號表達式值,則為 1,否則為 0 11 大于 10 雙目運算符,左邊帶符號表達式值大于 右邊帶符號表達式值,則為 1,否則為 0 13 = 大于等于 10 雙目運算符,左邊帶

6、符號表達式值大于或 等于右邊帶符號表達式值,則為 1,否則為 0 14 == 等于 9 雙目運算符,左邊帶符號表達式值等于 右邊帶符號表達式值,則為 1,否則為 0 15 != 不等于 9 雙目運算符,左邊帶符號表達式值不等于 右邊帶符號表達式值,則為 1,否則為 0 16 R16 -1 RJMP DONE POSI:LDI R16,$01 DONE:STS FUNC,R16 HERE: RJMP HERE .EXIT 4.3 循環(huán)與查表程序設計 4.3.1 循環(huán)程序設計 例 4.9:已知 SRAM ADDR($0062)為起始地址的數(shù)據(jù)塊的數(shù) 據(jù)是 無符號數(shù) ,塊長在 LEN($0

7、061)單元。求最大值并存 入 MAX($0060)單元 .include “ m8def.inc” .SET LEN=$0061 .SET ADDR=$0062 .SET MAX=$0060 .ORG $000 RJMP START .ORG 0X0013 START:LDS R20,LEN CLR R16 LDI XL,LOW(ADDR) LDI XH,HIGH(ADDR) LOOP: LD R18,X+ CP R18,R16 BRCS NEXT ;BRLO MOV R16,R18 NEXT: DEC R20 BRNE LOOP STS MAX,R16 h

8、ere: rjmp here .exit 例 4.9 :已知 SRAM ADDR($0062)為起始地址的 數(shù)據(jù)塊的數(shù)據(jù)是 符號數(shù) ,塊長在 LEN($0061)單元。 求最大值并存入 MAX($0060)單元 .include “ m8def.inc” .SET LEN=$0061 .SET ADDR=$0062 .SET MAX=$0060 .ORG $000 RJMP START .ORG 0X0013 START:LDS R20,LEN LDI R16,$80 LDI XL,LOW(ADDR) LDI XH,HIGH(ADDR) LOOP: LD R18,X+

9、 CP R18,R16 BRLT NEXT MOV R16,R18 NEXT: DEC R20 BRNE LOOP STS MAX,R16 here: rjmp here .exit 4.3.2 查表程序設計 用于 不便于計算的函數(shù) (如平方、立方、三角函數(shù) )、 固定的 編碼 (如 ASCII碼、數(shù)碼管顯示 )等,表格存于 FLASH中,用 LPM指令來取出對應項的值 例:設 SRAM的 0 x60開始的 40個單元字節(jié)存放有 40個取值為 0 9的二進制整數(shù)。將它們求平方值后存放到 SRAM的 0 x100開始的存儲區(qū)。 .include “ m8def.inc”

10、 rjmp Main Tab: .db 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 Main: ldi yl, 0 x00 ;SRAM存儲基址 ldi yh, 0 x01 ldi xl, 0 x60 ;SRAM取數(shù)基址 ldi xh, 0 x00 ldi r18, 40 ;計數(shù)用 loop: ld r16, x+ ;從 SRAM取數(shù),地址增 1 ldi zl, low(Tab*2) ldi zh, high(Tab*2) clr r17 add zl, r16 adc zh,r17 lpm ;查平方值 st

11、 y+, r0 ;保存到 SRAM 并且地址增 1 dec r18 ;計數(shù)減 1 brne loop ;未查完,循環(huán) HERE: RJMP HERE .EXIT 例 4.13:已知 SRAM中起始地址為 BLOCK1的數(shù)據(jù)塊(其長 度存放在 LEN單元),每個存儲單元中高、低 4位為兩個十 六進制數(shù),將它們轉換為 ASCII碼后存放在 BLOCK2開始的 連續(xù)存儲單元。 .include “ m8def.inc” .SET LEN=$0060 .SET BLOCK1=$0061 .SET BLOCK2=$0168 .ORG $000 RJMP M

12、AIN .ORG 0X0013 MAIN: LDS R25,LEN LDI XL,LOW(BLOCK1) LDI XH,HIGH(BLOCK1) LDI YL,LOW(BLOCK2) LDI YH,HIGH(BLOCK2) LOOP: LDI ZL,LOW(ASTAB*2) LDI ZH,HIGH(ASTAB*2) CLR R18 LD R17,X ANDI R17,$0F ADD ZL,R17 ADC ZH,R18 LPM R17,Z ST Y+,R17 LD R17,X+ ANDI R17,$F0 SWAP R17 LDI ZL,LOW(ASTAB*2)

13、 LDI ZH,HIGH(ASTAB*2) ADD ZL,R17 ADC ZH,R18 LPM R17,Z ST Y+,R17 DEC R25 BRNE LOOP HERE:RJMP HERE ASCTAB:.DB $30,$31, ,$39 .DB $41,$42, ,$46 4.4 代碼轉換與子程序設計 4.4.1 子程序設計 子程序:完成確定任務、反復調用 入口地址(第一條指令地址,常用標號) 返回( RET) 狀態(tài)保護 (如 SREG等 ) 參數(shù)傳遞 (R0R31,或者堆棧方式 ) 例 4.15 SRAM中 HEX單元的兩個十六進制數(shù),分別轉 成 ASC

14、II碼存入 ASC和 ASC+1單元 .INCLUDE “ M8DEF.INC” .SET HEX=$0060 .SET ASC=$0061 LDI R17,LOW(RAMEND) OUT SPL,R17 LDI R17,HIGH(RAMEND) OUT SPH,R17 LDS R16,HEX PUSH R16 RCALL HASC POP R16 STS ASC,R16 LDS R16,HEX SWAP R16 PUSH R16 RCALL HASC POP R16 STS ASC+1,R16 HERE:RJMP HERE HASC:POP R16 PO

15、P R16 POP R16 ANDI R16,$0F LDI ZL,LOW(ASCTAB*2) LDI,ZH,HIGH(ASCTAB*2) ADD ZL,R16 LPM R16,Z PUSH R16 IN R16,SPL SBCI R16,2 OUT SPL,R16 RET ASCTAB:.DB $30,$31,,$39 .DB $41,$42,,$46 4.4.2代碼轉換子程序 BCD碼 (Binary-Coded Decimal),用二進制編碼 的十進制代碼。這種編碼形式 利用了四個位元來 儲存一個十進制的數(shù)碼 ,使二進制和十進制之間 的轉換得以快捷地進行。這

16、種編碼技巧,最常用 于會計系統(tǒng)的設計里,因為會計制度經常需要對 很長的數(shù)字串作準確的計算。相對于一般的浮點 式記數(shù)法,采用 BCD碼,既可保存數(shù)值的精確度, 又可免卻使電腦作浮點運算時所耗費的時間。此 外,對于其他需要高精確度的計算, BCD編碼亦 很常用 最常用的 BCD編碼,就是使用“ 0” 至“ 9” 這十 個數(shù)值的二進碼來表示。常稱之為“ 8421碼”。 補充知識 1、 16位二進制數(shù)轉換成 BCD碼 程序功能 : 將 (r17:r16) 中 16位二進制轉換 成 BCD 碼 , 個、十、百、千和萬位分別存 放于 r16, r17, r18, r19和 r20中 程

17、序思想 : (r17:r16) 10000 夠減 X 次 , 則 萬位為 X; 差值 1000 夠減 Y 次 ; 則千位為 Y;差值 100 夠減 Z 次 ; 則百位為 Y;差值 10 夠減 U 次 ; 則十位為 U;最后的差值為 個位 程序清單 : b16td5: ser r20 ;r20 先送 -1 loop1: inc r20 ;r20 增 1 subi r16,low(10000) ;(r17:r16) 10000 sbci r17,high(10000) brcc loop1 ;夠減則返回 lo

18、op1 subi r16,low(-10000) ;不夠減 ,加 10000 恢復余數(shù) sbci r17,high(-10000) 程序清單 : ;(Continued) ser r19 ;r19 先送 -1 loop2: inc r19 ;r19 增 1 subi r16,low(1000) ;(r17:r16) 1000 sbci r17,high(1000) brcc loop2 ;夠減則返回 loop2 subi r16,low(-1000) ;不夠減 ,加 1000 恢復余數(shù) sbci

19、 r17,high(-1000) 程序清單 : ;(Continued) ser r18 ;r18 先送 -1 loop3: inc r18 ;r18 增 1 subi r16,low(100) ;(r17:r16) 100 sbci r17,high(100) brcc loop3 ;夠減則返回 loop3 subi r16,low(-100) ;不夠減 ,加 100 恢復余數(shù) sbci r17,high(-100) 程序清單 : ;(Continued) ser r17

20、 ;r17 先送 -1 loop4: inc r17 ;r17 增 1 subi r16,10 ;(r17:r16) 10 brcc loop4 ;夠減則返回 loop4 subi r16,-10 ;不夠減 ,加 10 恢復余數(shù) ret ;至此, r16即為個位 2、 5位 BCD碼轉換成 16位二進制數(shù) 程序功能 : 將個、十、百、千和萬位分別放 在 r16, r17, r18, r19和 r20中的 5位 BCD 碼 ( r16 r20高 4位為 0000)轉換成 16位二進 制 , 存放于 (

21、r17:r16) 中 轉換公式為 : (r17:r16)= r16+10*r17+100*r18+1000*r19+10000*r20 程序清單 : d5tb16: tst r17 ;測試 r17 rjmp d5tb16_2 d5tb16_1: subi r16,-10 ;r16 加 10,不會發(fā)生進位 dec r17 ;r17 減 1 d5tb16_2: brne d5tb16_1 ;非 0 轉 d5tb16_1 程序清單 : ;(Continued) tst r18 ;測試

22、r18 rjmp d5tb16_4 d5tb16_3: subi r16,low(-100) ;(r17:r16)加 100 sbci r17,high(-100) dec r18 ;r18 減 1 d5tb16_4: brne d5tb16_3 ;非 0 轉 d5tb16_3 程序清單 : ;(Continued) tst r19 ;測試 r19 rjmp d5tb16_6 d5tb16_5: subi r16,low(-1000) ;(r17:r16)加 1000 sbci r17,high(-

23、1000) dec r19 ;r19 減 1 d5tb16_6: brne d5tb16_5 ;非 0 轉 d5tb16_5 程序清單 : ;(Continued) tst r20 ;測試 r20 rjmp d5tb16_8 d5tb16_7: subi r16,low(-10000) ;(r17:r16)加 10000 sbci r17,high(-10000) dec r20 ;r20 減 1 d5tb16_8: brne d5tb16_7 ;非 0 轉 d5

24、tb16_7 ret 3、 5位壓縮 BCD碼轉換成 16位二進制數(shù) 壓縮 BCD碼與非壓縮 BCD碼的區(qū)別:壓縮 BCD碼 的每一位用 4位二進制表示, 一個字節(jié)表示兩位十 進制數(shù) 。例如 10010110B表示十進制數(shù) 96D; 非 壓縮 BCD碼用 1個字節(jié)表示一位十進制數(shù) ,高四 位總是 0000,低 4位的 00001001表示 09.例如 00001000B表示十進制數(shù) 8 程序功能 :將五位壓縮 BCD碼轉換為 16位二進制。 五位壓縮 BCD碼存于 r18:r17:r16 (r18 高四位為 0), 二進制存放于 (r17:r16) 程序思想 : 先將壓縮

25、BCD 碼轉換為 BCD 碼 , 放 到 r16(個 )、 r17(十 )、 r18(百 )、 r19(千 )、 r20(萬 ) 5個字節(jié)中 , 再調用 d5tb16子程序即可 程序清單 : yd5tb16: mov r20,r18 ;取出萬位 mov r19,r17 ;令 r19=r17 mov r18,r17 ;令 r18=r17 mov r17,r16 ;令 r17=r16 andi r16,$0f ;取出個位 andi r17,$f0 swap r17 ;取出十位 andi r18,$0f

26、 ;取出百位 andi r19,$f0 swap r19 ;取出千位 rcall d5tb16 ;調用 d5tb16五位 BCD到 16位二進制的轉換 ret 4.5 運算程序設計 4.5.1 加減運算程序設計 1、無符號多字節(jié)加減運算程序 16位加法 add16: add r16,r18 ;r17:r16+r19:r18r17:r16 adc r17,r19 ret 16 位帶立即數(shù)加法 addi16: subi r16,low(-addi2) ;無立即數(shù) (字節(jié) )加法 ;r

27、17:r16+addi2r17:r16 sbci r17,high(-addi2) ;addi2 為 16 位立即數(shù) ret 16位減法 sub16: sub r16,r18 ; r17:r16-r19:r18r17:r16 sbc r17,r19 ret 16 位帶立即數(shù)減法 subi16: subi r16,low(subi2) ; r17:r16-subi2r17:r16 sbci r17,high(subi2) ;subi2 為 16 位立即數(shù) ret 16位比較 cp16: cp r16,r18

28、 ; r17:r16 與 r19:r18 相比較 cpc r17,r19 ret 16 位帶立即數(shù)比較 cpi16: cpi r16,low(cp2) ; r17:r16 與 16 位立即數(shù) cp2 相比較 ldi r18, high(cp2) cpc r17,r18 ret 16位取補程序 (求補碼方法:取反后再加 1) beg16: com r16 ;r17:r16 取補并回存 (先取反 ) com r17 subi r16,low(-1) ;再加 1(通過減去 -1實現(xiàn)) sbci r17,high(-1)

29、 ret 32位加法程序 ADD32: ;32 位加法程序 ADD R16,R20 ADC R17,R21 ADC R18,R22 ADC R19,R23 ret 32位帶立即數(shù)加法程序 SUBI32: ; SUBI R16,low(-data) SBCI R17,high (-data) SBCI R18,byte3 (-data) SBCI R19,byte4 (-data) ret 32位減法程序 SUB32: ;32 位減法程序 SUB R16,R20 SBC R17,R21 SBC R18,R22 SBC R19,R23 ret 2、帶符號加減運算程序 例: 16位二進制符號數(shù)(補碼表示)加法 R17:R16 + R20:R19 R18:R17:R16 思路:先擴展為 3字節(jié),再加 SADD16: TST R17 BRMI NT1 CLR R18 RJMP NEXT1 NT1:LDI R18,$FF NEXT1:TST R20 BRMI NT2 CLR R21 RJMP NEXT2 NT2: SER R21 NEXT2:ADD R16,R19 ADC R17,R20 ADC R18,R21 RET

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!