久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1485|回復: 3
打印 上一主題 下一主題
收起左側

關于stm32 內存地址和位帶別名計算

[復制鏈接]
跳轉到指定樓層
樓主

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:883242 發表于 2023-5-3 14:59 | 只看該作者
位帶就是個雞肋,食之無味棄之可惜。8051體系太落后了,RAM太小,一個字節要掰成8個位來用。ARM的位帶,為了節約1個字節的7個位,只操作1個位,需要32個位地址空間,實在是沒意義。
回復

使用道具 舉報

板凳
ID:73992 發表于 2023-5-4 16:34 | 只看該作者
Hephaestus 發表于 2023-5-3 14:59
位帶就是個雞肋,食之無味棄之可惜。8051體系太落后了,RAM太小,一個字節要掰成8個位來用。ARM的位帶,為 ...

51單片機子程序以  loop......  ........ ret 或者 reti 結束   stm32有的 以 MOV PC,LR結束, 但多個子程序編譯時候會警告。還有以PROC ENDP 結尾的。還有BX LR 結尾的。
請問有沒有標準的通用格式。上圖是12864仿真,程序在箭頭的位置死循環,以下是代碼。

  1. *************12864亮屏程序 stm32f103c8t6*************************
  2. *************************************************************************
  3. *12864_RS位A10,ODR位帶別名                0X422101A8                              
  4. *12864_RW位A09,ODR位帶別名                0X422101A4
  5. *12864_EN位A08,ODR位帶別名                0X422101A0
  6. *12864_BUSY_BIT        位GPIOA_IDR07  別名        0X4221011C        忙標志位
  7. *RCC_APB2ENR地址 0X40021018
  8. *GPIOA_CRL地址        0X40010800
  9. *GPIOA_CRH地址        0X40010804
  10. *GPIOA_ODR地址        0X4001080C
  11. *GPIOA_IDR地址        0X40010808
  12. *GPIOA_00地址        0X42210180
  13. *
  14. *
  15. *************************************************************************
  16. RCC_APB2ENR        EQU        0X40021018
  17. GPIOA_CRL        EQU        0X40010800
  18. GPIOA_CRH        EQU        0X40010804
  19. GPIOA_ODR        EQU        0X4001080C
  20. LCD12864_RS        EQU        0X422101A8
  21. LCD12864_RW        EQU        0X422101A4
  22. LCD12864_EN        EQU        0X422101A0      
  23. LCD12864_BUSY_BIT        EQU                0X4221011C
  24. GPIOA_00        EQU        0X42210180
  25.         AREA        ICODE,CODE
  26.         ENTRY
  27.         EXPORT        __main
  28. __main
  29.         BL        SYSTEM_BIOS                        ;調用系統設置
  30.         BL        LCD12864INIT                ;調用屏幕初始化
  31.         MOV        R3,#0X80                        ;12864第一格
  32.         BL        LCD12864WRITE_CMD        ;
  33.         MOV        R4,#0X41                        ;顯示字符A


  34. LOOP        B        LOOP




  35. *************系統設置子程序********************
  36. SYSTEM_BIOS      
  37.         LDR        R0,=RCC_APB2ENR                ;打開RCC_APB2ENR
  38.         MOV        R1,#0X0000000C                ;打開GPIOA時鐘
  39.         STR        R1,[R0]                              
  40.       
  41.         LDR        R0,=GPIOA_CRL                ;設置GPIOA低8位為輸出
  42.         MOV        R1,#0X33333333               
  43.         STR        R1,[R0]
  44.       
  45.         LDR        R0,=GPIOA_CRH                ;設置GPIOA_08_09_10為輸出
  46.         MOV        R1,#0X00000333               
  47.         STR        R1,[R0]
  48.       
  49.         LDR        R0,=LCD12864_EN                ;設置12864_EN為0
  50.         MOV        R1,#0               
  51.         STR        R1,[R0]
  52.       
  53.         BX LR                        ;子程序返回語句
  54. SYSTEM_BIOS_END                                ;返回




  55. *************LCD12864初始化子程序********************
  56. LCD12864INIT      
  57.         MOV        R3,#0X38
  58.         BL        LCD12864WRITE_CMD
  59.         MOV        R3,#0X38
  60.         BL        LCD12864WRITE_CMD
  61.         MOV        R3,#0X0C
  62.         BL        LCD12864WRITE_CMD
  63.         MOV        R3,#0X06
  64.         BL        LCD12864WRITE_CMD
  65.         MOV        R3,#0X01
  66.         BL        LCD12864WRITE_CMD
  67.         BX LR
  68. LCD12864INIT_END


  69. *************LCD12864讀狀態孫程序********************
  70. LCD12864_BUSY      


  71.         LDR        R0,=LCD12864_EN                ;EN=0
  72.         MOV        R1,#0               
  73.         STR        R1,[R0]
  74.       
  75.         LDR        R0,=LCD12864_RS                ;RS=0
  76.         MOV        R1,#0               
  77.         STR        R1,[R0]


  78.         LDR        R0,=LCD12864_RW                ;RW=1
  79.         MOV        R1,#1               
  80.         STR        R1,[R0]
  81.       
  82.         LDR        R0,=LCD12864_EN                ;EN=1
  83.         MOV        R1,#1               
  84.         STR        R1,[R0]
  85.       
  86. LCD12864_BUSY1


  87.         LDR        R0,=LCD12864_BUSY_BIT               
  88.         LDR        R1,[R0]                                ;讀標志
  89.       
  90.         MOVS        R0,R1                        ;顯示標志到APSR
  91.         BNE        LCD12864_BUSY1                ;標志判斷,為0重新則讀取
  92.       
  93.         LDR        R0,=LCD12864_EN                ;EN=0
  94.         MOV        R1,#0               
  95.         STR        R1,[R0]
  96.       
  97.         ;LDR        R0,=GPIOA_00                ;GPIOA00=1
  98.         ;MOV        R1,#1               
  99.         ;STR        R1,[R0]
  100.       
  101.         BX LR                ;子程序返回語句               
  102. LCD12864__BUSY_END      




  103. *************LCD12864寫指令子程序********************
  104. LCD12864WRITE_CMD                        ;R3作為指令傳遞      
  105.         LDR        R0,=LCD12864_EN                ;EN=0
  106.         MOV        R1,#0               
  107.         STR        R1,[R0]
  108.       
  109.         BL        LCD12864_BUSY                ;調用判忙程序
  110.       
  111.         LDR        R0,=LCD12864_RS                ;RS=0
  112.         MOV        R1,#0               
  113.         STR        R1,[R0]


  114.         LDR        R0,=LCD12864_RW                ;RW=0
  115.         MOV        R1,#0               
  116.         STR        R1,[R0]
  117.       
  118.         LDR        R0,=LCD12864_EN                ;EN=1
  119.         MOV        R1,#1               
  120.         STR        R1,[R0]
  121.       
  122.         LDR        R0,=GPIOA_ODR                ;
  123.         LDR        R1,[R0]                                ;取出ODR值
  124.         LDR        R2,=0X0000FF00
  125.         AND        R1,R2                                ;ODR低八位置0
  126.         ORR        R3,R1                                ;GPIOA高八位寫入R3
  127.         STR        R3,[R0]                                ;指令寫入顯示屏
  128.       
  129.         LDR        R0,=LCD12864_EN                ;EN=0
  130.         MOV        R1,#0               
  131.         STR        R1,[R0]
  132.       
  133.         BX LR;子程序返回語句
  134. LCD12864WRITE_CMD_END      
  135.       
  136. *************LCD12864寫數據孫程序********************
  137. LCD12864WRITE_DAT                        ;R4作為數據傳遞
  138.         LDR        R0,=LCD12864_EN                ;EN=0
  139.         MOV        R1,#0               
  140.         STR        R1,[R0]
  141.       
  142.         BL        LCD12864_BUSY                ;調用判忙
  143.       
  144.         LDR        R0,=LCD12864_RS                ;RS=1
  145.         MOV        R1,#1               
  146.         STR        R1,[R0]


  147.         LDR        R0,=LCD12864_RW                ;RW=0
  148.         MOV        R1,#0               
  149.         STR        R1,[R0]
  150.       
  151.         LDR        R0,=LCD12864_EN                ;EN=1
  152.         MOV        R1,#1               
  153.         STR        R1,[R0]
  154.       
  155.         LDR        R0,=GPIOA_ODR                ;
  156.         LDR        R1,[R0]                                ;取出ODR值
  157.         LDR        R2,=0X0000FF00
  158.         AND        R1,R2                                ;ODR低八位置0
  159.         ORR        R4,R1                                ;GPIOA高八位寫入R3
  160.         STR        R4,[R0]                                ;數據寫入顯示屏
  161.       
  162.         LDR        R0,=LCD12864_EN                ;EN=0
  163.         MOV        R1,#0               
  164.         STR        R1,[R0]
  165.       
  166.         BX LR                                ;子程序返回語句
  167. LCD12864WRITE_DAT_END      
  168.         END
  169.                
復制代碼


回復

使用道具 舉報

地板
ID:883242 發表于 2023-5-5 17:16 | 只看該作者
知道你什么意思了,你以為匯編語言是一門“語言”,學會了一門就可以融會貫通學會別的了,你的理解完全錯誤。

匯編只是機器碼助記符的匯集、組合。在不同平臺上面,二進制機器碼完全不一樣,自然匯編也就完全不一樣。你天真的以為學了51匯編就能整ARM匯編,事實卻是,你學的51匯編對你學ARM匯編不但沒有任何幫助,反而會起到反作用。正確的做法是完全忘掉以前你學的匯編,從頭開始虛心的學習新的一個指令體系。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品色 | 九九爱这里只有精品 | 色综合桃花网 | 欧美日韩国产精品一区 | 亚洲人人舔人人 | 91精品国产91久久综合桃花 | 午夜免费视频 | 亚洲成人自拍 | 亚洲精品中文字幕 | 亚洲欧美日韩精品久久亚洲区 | 国产亚洲欧美在线视频 | 欧美视频xxx | 国产高清视频 | 91精品国产91久久综合桃花 | 国产精品久久久乱弄 | 久久99精品视频 | 日本精品一区二区三区在线观看 | 日本不卡一区二区三区 | 日本不卡免费新一二三区 | 欧美美女爱爱视频 | 欧美一区二区三区在线观看视频 | 久久久久九九九九 | 国产美女在线观看 | 欧美日韩在线观看一区 | 精品国产欧美一区二区三区不卡 | av毛片| 美女黄视频网站 | av网站在线看 | 欧美精品一区三区 | 国产精品久久久久久久久污网站 | 成人国产精品色哟哟 | 美女爽到呻吟久久久久 | 亚洲精品久久久一区二区三区 | 香蕉大人久久国产成人av | 三级在线观看 | 欧美日韩精品免费 | 日操操| 黄色国产 | 国产成人一区二区三区精 | 国产一区二区在线播放 | 日韩精品区 |