




免费预览已结束,剩余70页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Scream8051andtool Microprocessor 微處理機系統為控制 監視或輔助某個設備 機器或甚至工廠運作的裝置 微處理器名稱的由來 因為當初各大晶片廠之製程 已經進入了1微米的階段 用微米製程所產製出來的處理器晶片 廠商就會在產品名稱上用 微 字 在1971年 由Intel公司推出有史以來第一顆四位元微處理器4004 圖片來源 Intel官方網頁 一般簡單的微處理器架構包含三個主要元件 輸入 輸出單元 中央處理單元 記憶體 輸入單元 InputUnit 透過外部裝置將的資料送到CPU作運算 輸出單元 OutputUnit 將CPU運算的結果送往外部裝置 中央處理單元 CenterProcessingUnit 簡稱CPU 籠統來說是一個可以執行程式的邏輯機器 包含ALU和CU 算術邏輯單元 ArithmeticLogicUnit 簡稱ALU 在CPU中用於執行算術運算和邏輯運算 控制單元 ControlUnit 簡稱CU 在CPU中負責指揮各元件的運作 解碼指令後執行該指令 使微電腦可以依照指令完成工作 記憶體單元 MemoryUnit 儲存輸入單元傳來的資料 或者CPU處理完的資料 而記憶體根據存取的方式不同可分為唯讀記憶體 ReadOnlyMemory 簡稱ROM 和隨機存取記憶體 RandomAccessMemory 簡稱RAM ROM由名稱可知只能被讀取但不能寫入 但不會因為斷電關機而導致資料流失 RAM可被讀取和寫入 但裡面儲存的資料會因為關機斷電而流失 8051介紹 8051為Intel公司所推出的微處理器 八位元的單晶片微電腦 屬於MCS 51單晶片的一種 圖片來源 wikihttp zh wikipedia org wiki Intel 8051 8051microarchitecture 圖片來源 wikihttp zh wikipedia org wiki Intel 8051 8051Importantfeatures 80518 bitALU 累加器 accumulator 暫存器 16 bitprogramcounter PC datapointer DPTR 8 bitprogramstatusword PSW stackpointer SP 4KB程式記憶體 可擴充至64KB 128Bytes資料記憶體 可擴充至64KB 四個8 bitport組成的32 bitI OpinsP0 32組16 bit計時器T0 T15個中斷源INT0 INT1 T0 T1 RXD TXD 1組全雙工串列埠 UART 8051BasicRegisters 以下是針對幾個比較簡單且常用到的8051暫存器作介紹 Accumulator A 8 bit 所有8051的暫存器裡最常被用到的 A正如其名 累計多個指令執行完後的結果 例如5 8 其結果13最後會存到A裡 程式設計者之後可以再拿去做其他運算或者存到別的位值 B8 bit B的作用和A有點類似 不過只會出現在兩個指令 MULAB和DIVAB 對A做乘除 將乘數或除數存到B再執行以上的指令 例如A 0 x80 B 0 x70 相乘結果為0 x3800 但是之前提到AB皆為8 bit暫存器 所以結果分成upper byteB和lower byteA B 0 x38 A 0 x00 除法也是類似 只是結果商存在A 餘數存在B Rn也有人直接稱為R 一共八個 分別為R0 R1 R7 每個皆為8 bit 可以把它想成輔助A的暫存器 譬如之前提到的例子 5 8 原本的數字5可能存在A裡 這需要另一個暫存器保存8 假設用R6 則整個指令可以寫成 ADDA R6 Rx也是用來暫時存放資料的 接下來舉一個更複雜的例子會更容易看出Rx暫存器的重要性 R1 R2 R3 R4 其8051指令如下 MOVA R3 先處理R3 R4這部分 把R3放到AADDA R4 運算A R4 結果存在AMOVR5 A 將R3 R4的結果先暫存到R5MOVA R1 再來處理R1 R2的部分 把R1存到AADDA R2 運算A R2 結果存在ASUBA R5 最後運算A R5 結果存在A從範例可以看出 用了R5作為暫時存放R3 R4的結果 運算 R1 R2 R3 R4 或許有更有效的指令可以表示 但此範例主要是表示利用Rx作為暫時存放資料的變數 DataPointer DPTR 唯一一個使用者可以自由存取的16 bit暫存器 用來指向一筆資料的位值 通常是用於存取ExternalMemory數值 8051要存取ExternalMemory時會先去查看DPTR 再根據DPTR指向的位子前去ExternalMemory作存取 StackPointer SP 指向stack中下一筆要被移除的資料的位子 用更明確的方式來說 當8051push一筆資料到stack SP會先 1再將資料存到SP指到的地方 當8051從stackpop一筆資料 先回傳SP指向的資料再使SP 1 SP會直接被以下指令改變 PUSH POP ACALL LCALL RET RETI ProgramCounter PC 16 bit 指向下一個指令的位值 也就是ProgramMemory的位值 初始化時為零 並隨著指令的執行而增加 不過並不是每執行完一個指令就加1 因為有些指令需要2 3Byte 在那情況下PC會加2 3而不是1 PC並不是一個公開的暫存器 所以無法直接對其作存取 8051Memory 對於撰寫8051程式而言 了解其記憶體架構可以讓程式執行的更有效率 8051的記憶體是Harvard架構 也就是程式和資料是用相同位值 address 但位於不同記憶體類別裡 8051裡主要區分成以下記憶體類別 Programmemory on chipmemory Externaldatamemory 圖片來源 8051ProgramMemory Programmemory 也稱為Codememory 存放binarycode和constants的空間 所以通常是唯讀的記憶體 ROM Programmemory的大小可能只有on chipROM4KB 也可以外加ExternalROM延伸到64KB 或者完全為off chipExternalROM64KB 裡面的參數可以透過指令MOVC來取得 8051On chipMemory on chipmemory 256Bytes 包含register Bitmemory等 位於on chip的揮發性記體 所以存取速度也是最快的 8051reset後其儲存的資料也會被清空 主要存放常用的變數和指標 compiler一般用於基本的資料運算和stack存放的區域 on chipmemory是由InternalRAM和SFR兩部分組成的 8051InternalRAM InternalRAM 位於on chipmemory的前128Bytes 位值0 x00 0 x7F 包含四組registerbank 剩下的可被使用者直接使用 或者被compiler安排為stack的空間 Registerbank0 3可以藉由PSW暫存器的RB0和RB1選擇使用哪一組 同一時間只有一組為啟動狀態 由下圖可知每組registerbank皆包含8個8 bit暫存器 R0 R7 也就是之前介紹的Rn 8051reset時預設使用bank0 由PWS和暫存器編號就可以找到對應的位值 例如指定bank0時ADDA R4就等於ADDA 04h 指定bank2時就是ADDA 14h 8051SFR SFR SpecialFunctionRegister 位於on chipmemory的後128Bytes 位值0 x80 0 xFF 8051裡除了之前提到的register0 7以外還有其他register 譬如說registerA和B主要是被用於算數邏輯運算 SP儲存stack的指標等 而這些register在SFR裡都會有一個對應的位值 換一個角度來說SFR儲存的數值主要是用來控制8051指令的行為 會因為8051指令而改變 也可以和InternalRAM一樣被使用者直接存取 不過並非所有位值皆有定義一個SFR 對未定義的SFR位值做存取會導致無法預測的結果 圖片來源 8051xRAM Externaldatamemory 64KB的off chipmemory 和前面on chipmemory相比存取速度較慢 不過空間大的多 在高階程式中如果需求的memory過大 compiler就會使用到 8051AddressingMode CPU可以存取資料的方式有很多種 資料可能在暫存器 記憶體 或者直接指定 存取資料的方式就是定址模式 8051有以下幾個定址模式 ImmediateAddressingMOVA 20hDirectAddressingMOVA 30hIndirectAddressingMOVA R0RegisterAddressingMOVA R0 ImmediateAddressing ImmediateAddressing指定資料最簡單的方式就是直接塞在執行碼 operationcode 後面 在執行碼後面直接指定所要存取的數值 也就是說要存取的數值已經寫在整個指令裡了 例如 MOVA 20h8051讀到opcode時解讀到此為immediatedatamov 所以自動將PC值加1 再將PC值指到的1byte資料 也就是0 x20存到A 其中 表示此為資料而不是記憶體位值 和接下來的DirectAddressing有所區隔 20h表示十六進位0 x20 此指令執行完後 暫存器A裡的數值就是0 x20 DirectAddressing DirectAddressing用於存取128Byte的RAM和SFRs裡的資料 指定記憶體位值接在執行碼 operationcode 後面 也就是說存取的數值的來源用一個數字或者名子表示 例如 MOVA 20h將RAM位值0 x20的儲存值複製到暫存器A 20h表示十六進位0 x20 此指令執行完後 暫存器A裡的數值和RAM位值0 x20的數值是一樣的 IndirectAddressing IndirectAddressing指令所要存取的數值之位值從一個暫存器裡取得 指向目標位值的暫存器 pointingregister 前面會加上一個 符號 表示 at 例如 MOVA R08051分析R0存的數值作為on chipmemory位值 將此on chipmemory位值存放的數值複製到暫存器A 用一個更直接的範例 R0存放的值為40h on chipmemory位值40h存放的值為67h 8051先分析R0的數值得到40h 再去尋找on chipmemory位值40h存放的數值 最後得到67h這筆資料並存到暫存器A RegisterAddressingMode RegisterAddressingMode指令所要存取的數值在暫存器中 執行碼 operationcode 存取的目標是暫存器裡的資料 例如 MOVA R0 8051解讀完此執行碼後直接從暫存器R0將資料複製到暫存器A 圖片來源 文件8051 Microcontroller Architecture Programming and Applications 8051programflow 當8051初始化時 PC會設為零 從ProgramROM位值0 x0000開始讀取指令並執行 除非遇到改變PC值的指令 不然8051指令會連續的 sequential 一行行執行下去 改變PC值的指令有以下類別 ConditionalBranchDirectJumpDirectCallReturnsInterrupt ConditionalBranch 類似於 IF THEN 的架構 分析當下的condition判斷是否使PC跳 jump 到指定位值 DirectJump 類似於 GoTo 指定PC從一指定位值開始執行 DirectCall 類似於呼叫subroutines 先把目前的PC值推到stack中 在jumpPC到指定位值 Returns 既然會呼叫subroutines 那工作結束後應該要回傳到原來位值 將PC值改變成之前存在stack的數值 Interrupt 想像成事件 event 來解釋會比較容易了解 當Interrupt被對應的事件觸發 8051會停住當下的工作並使PC跳到稱之為InterruptHandler的程式區塊 InterruptHandler裡除了包含事件所需的程式 還有恢復之前停下的工作 彷彿不曾發生Interrupt一樣 8051InstructionSet 8051的指令集主要可以粗分成五大項 以下會一一列出並大略講解 ArithmeticOperationsLogicalOperationsDataTransferOperationsSingleBit BooleanVariable OperationsProgramFlowControl ArithmeticOperations LogicalOperations DataTransferOperations SingleBit BooleanVariable Operations ProgramFlowControl Notefortheaboveinstructionset Byte instruction的大小 Byte數 Cycle instruction執行完所需要的instructioncycle數Rn registerR0 R7來源 wiki http en wikipedia org wiki Intel 8051 Detailsforinstructions 以上只是大略的講解所有8051的指令 詳細的8051教學文件在網路上皆容易取得 其中也包含著8051的指令集 以下列了幾個指令集的網址供參考 8051toolchain toolchain是指整套工具列包含編譯器 compiler 連結器 linker 組譯器 assembler 偵錯 debug 等 最後能產生執行檔下載到硬體上執行 關於8051的工具列網路上有不少免費的軟體可以下載來使用 比較著名的有SDCC和KeilC51EvaluationSoftware KeilC51 以下用Keil公司的C51來介紹 C51EvaluationSoftware和其範例檔案可以到Keil的官方網站 KeilC51newproject 1 安裝完後開啟一個新的project 指定此project儲存的路徑 產生一個 Uv2檔 下圖我是用test Uv2作為範例 KeilC51newproject 2 device選擇Intel的8051AH 這樣就簡單的產生一個C51project 但是project裡面沒有任何東西 接下來講解如何加入一個C程式並成功編譯 KeilC51compileccode 1 這是我範例C程式test c裡的內容 根據一個變數是否為零做上數 累加 與下數 累減 的動作 變數count up宣告在ExternalRAM的位值0 x0上 用來判斷上數或下數的依據 初始化為一 變數counter宣告在ExternalRAM的位值0 x10上 判斷count up是否為零執行上數或者下數 初始化為零 charxdatacount up at 0 x0 intxdatacounter at 0 x10 intmain count up 1 counter 0 while 1 if count up 0 counter elsecounter KeilC51compileccode 2 projectworkspace的視窗裡 裡面有預設的Target1 SourceGroup1 在底下新增自己要加入的C程式 下圖我是用test c作為範例 KeilC51compileccode 3 在sourcegroup裡除了加入的test c外還有一個STARTUP A51 那是project產生時自動加上的 內容主要是8051啟動前要做的動作 例如清除記憶體 初始化C的全域變數 設定stackpointer等 接下來的範例並不會更動到這檔案 所以不會再多做講解 對此設定上有興趣可以參考 KeilC51compileccode 4 接下來開始編譯 編譯的選項在project Rebuildalltargetfiles 或者直接尋找工具列上的按鈕 就是下圖紅色框框住的按鈕 編譯成功與否 下面的outputwindow會顯示 接下來講解simulation 也就是Keil提供的debugger KeilC51Debugging 1 編譯成功後 Debug Start StopDebugSession進入debug介面 Debugging的工具列類似於VisualStudio 有stepinto stepover等 利用這些工具可以看到單步執行C程式時 暫存器和記憶體的變化 觀看方式接下來會說明 Debugger工具列 KeilC51Debugging 2 在debug介面裡view DisassemblyWindow可以叫出編譯完成的8051組語 KeilC51Debugging 3 在projectworkspace底下有很多觀看模式 其中Regs那一頁可以觀看8051所有暫存器的數值 KeilC51Debugging 4 Memroy 1 4可以選擇觀看不同記憶體 在Address欄位輸入記憶體類別和位值即可 例如c 0 x100表示codememory位值0 x100開始列出 i iRAM x xRAM KeilC51Debugging 5 以test c為例 目前預設為上數的動作 test c裡指定了counter這變數的位值 intxdatacounter at 0 x10 可以看到counter在xRAM的0 x10位值隨著程式的執行而增加 現在臨時想改成下數的動作 必須修改變數count up為零 KeilC51Debugging 6 test c裡指定了count up這變數的位值 charxdatacount up at 0 x0 將count up的數值由01改成00 滑鼠點兩下紅框的位子即可輸入修改 繼續執行下去 觀察counter的數值就會隨著程式的執行而減少 8051HardwareSimulator Scream8051硬體是用verilog程式模擬8051的行為透過XilinxISE編譯成 bit映像檔燒入至FPGA中 目標FPGA為XilinxVIRTEX 4XC4VLX60 安裝完驅動程式 FPGA附贈的光碟裡 就可以利用SIMIS提供的VeriEnterpriseUSBV2介面控制FPGA AboutUSBInterface 簡略介紹VeriEnterpriseUSB介面 使用者可自 設計電 處 使用者應用程式 透過USB送過 的資 或是準備好資 等待 使用者應用程式 抓取回去 資 的傳輸使用 FIFO 的介面 主要構成的訊號群組有 Write Read DataInput DataOutput等 這也就意味著 使用者FPGA 把自己本身看成是 FIFO 讓PC端 存取資 整個硬體模擬器架構如下圖 主要可以分成Software端和Hardware端 8051 圖片來源 文件SMIMSEngineSoftwareDevelopmentKitsUserGuide Software端也就是PC x86的平台 這裡application是用C寫成的 開發環境是用VisualStudio透過USB介面與FPGA溝通 Hardware端就是FPGA 初始化時Software端要先指定FPGA初始化時要燒入的映像檔 也就是透過XilinxISE編譯成 bit映像檔的位值 還有FPGA的序號 8051Circuit Hardware端裡有兩個FIFO的buffer 大小皆為4096個WORD 2Byte 一個做寫入 一個做讀取 PC端要給8051控制訊號和讀寫資料都是透過這兩個buffer 在設計電路 Verilogcode 裡 8051會透過一個介面 ez if 負責存取這兩個buffer PC WriteBuffer ReadBuffer 8051 R W R W Ez if Software端控制Hardware端的方式就是呼叫SIMIS提供的介面對兩個buffer作存取 介面ez if預設每個WORD其lowerbyte為資料 upperbyte為控制訊號 所以每個WORD都當成一筆資料 Software端對ez if的控制訊號方面已經包成一個個function所以使用者無須深入理解就可以直接下達參數和呼叫 但是仍然可以看到原始程式碼 接下來會講解如何將一個8051執行檔燒入FPGA並順利執行 8051executablefile 8051的執行檔為IntelHexformat 格式如下 llaaaatt dd cc IntelHEXrecord的開頭 ll表示這行記錄了多少byte的data aaaa開始的addressttHEXrecordtype 00表示datarecord 01表示end of file dd 就是程式碼了 但是長度不一 ccchecksum 將所有hexnumber兩兩一組相加 256 舉個例子 10246200464C5549442050524F46494C4500464C33表示有0 x10byte的data data用綠色的標起來了 起始位值0 x2462 0 x00是為datarecord checksum 0 x33 KeilC51可以產生hexformat的執行檔 只是不是預設 由之前的範例延續 Project OptionsForTarget Target1 在Output頁面 CreateHEXFile打勾 Rebuildalltargetfile 編譯成功即可在project目錄下找到 hex Downloadtohardware 1 以下用一範例講解如何下載8051程式到硬體模擬 許多複雜的溝通方式包成function以方便解釋 不過有興趣仍可以去看function裡的程式碼 下載8051程式到FPGA執行需要兩樣東西 8051電路 由XilinxISE編譯出來的映像檔 bit 這裡的範例用top bit8051執行檔 由KeilC51編譯出來的執行檔 hex 沿用之前介紹的範例test hex環境方面FPGA序號與USB驅動程式 X86環境 windowOS 用VisualStudio開發 Downloadtohardware 2 這是整個main 的程式碼 底下會在更細部的講解 範例的內容和之前在KeilC51Debugger裡的範例一樣 先觀察其上數的情況 再改變count up變數使程式行為改為下數 Downloadtohardware 3 Software端的準備工作就是指定top bit test hex的路徑和FPGA的序號 我將這些設定提到全域變數以方便修改 之前已經提到FPGA是透過兩個FIFOBuffer和Hardware端溝通的 所以宣告兩個Buffer Downloadtohardware 4 FPGA工作前需要初始化 裡面包含下載top bit和序號註冊等 FPGA初始化已經包含在functionAppStart 裡 直接呼叫即可 FPGA和8051電路透過AppStart 都已經準備好了 接下來要下載8051執行檔 Downloadtohardware 5 透過functionOpenIntelCode 將test hex的內容解讀並放置到WriteBuffer 透過functionWriteMemory 將WriteBuffer的資料寫入FPGA 目標記憶體為ROM 大小為0 x200Byte 其實整的test hex沒到0 x200Byte這麼大 只是個大概值以防少寫 8051開始執行前要下達reset的指令 functionP51 reset Downloadtohardware 6 一切都準備好了 可以叫8051開工了 呼叫functionP51 run開始執行 P51 stop停下來 由於FPGA的特性 在執行和停止間並不知道中間已經執行了多少指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省渭南市韩城市2022-2023学年九年级上学期期中化学试题(含答案)
- 电票相关知识培训内容课件
- 电瓶报警知识培训内容课件
- 高空作业安全知识培训课件教程
- 北京商务楼宇考试题目及答案
- Trimethylamine-N-oxide-Standard-生命科学试剂-MCE
- Tiglyl-Glycine-13C2-15N-生命科学试剂-MCE
- 职业素养考试题及答案
- 幼师舞蹈考试题及答案
- 雅安中考试题及答案
- 房子过户给子女的合同模板
- 奶山羊饲养管理课件讲解
- 初中英语比较级和最高级专项练习题含答案
- SYT 6966-2013 输油气管道工程安全仪表系统设计规范
- 质量通病案例课件
- 2024新课标《义务教育数学课程标准(2022年版)》测试题(含答案)
- 防火巡查记录表防火检查记录表
- 青岛版(六三制)小学科学四年级上册全册教学课件
- 通信工作危险源辨识预控
- 《如何做好研究生》课件
- 企业信息化项目建设进度和成果汇报课件
评论
0/150
提交评论