簡介
單片機 是一種集成電路芯片,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器、顯示驅動電路、脈寬調製電路、模擬多路轉換器、A/D轉換器等功能集成到一塊硅片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。單片機的發展先後經歷了4位、8位、16位和32位等階段。8位單片機由於功能強,被廣泛用於工業控制、智能接口、儀器儀表等各個領域,8位單片機在中、小規模應用場合仍佔主流地位,代表了單片機的發展方向,在單片機應用領域發揮著越來越大的作用。
![單片機入門-要從彙編開始](http://p2.ttnews.xyz/loading.gif)
51單片機
單片機的開發主要包括CPU開發、程序開發、 存儲器開發、計算機開發及C語言程序開發,同時得到開發能夠保證單片機在十分複雜的計算機與控制環境中可以正常有序的進行。程序開發嵌入式系統的合理應用得到了大力推廣,對程序進行開發時要求能夠自動執行各種指令,這樣可以快速準確地採集外部數據,提高單片機的應用效率。
為啥選彙編入門
很多電子愛好者都想學習單片機這門技術,初學者入門從底層硬件入手基於彙編和c兩種語言,詳細的介紹了單片機的原理,指令,寄存器,以及接口等,後面還為你準備了一些小的設計。都是從單片機最基本的東西講起,相信你一定能看懂,並且學會單片機這門有意思的技術,有什麼問題可在文章後面的評論留言。
初學單片機彙編有利於深入結構的瞭解,但是真正工作的時候,用的是C語言;彙編語言一般只在處理器啟動的時候用一下,或C語言插入彙編的調用,之後就全是C語言,彙編移植性太差,但是它的效率高,時間精度能控制好。一般彙編都不需要你自己寫,拿來用就行,主要還是C語言。可以肯定的告訴 你,99%用C語言。
![單片機入門-要從彙編開始](http://p2.ttnews.xyz/loading.gif)
51單片機開發板
現在單片機的編程大多 是C語言完成
但有時代碼中必須嵌入彙編語言解決某些特定的問題
對於程序調試 彙編語言更是不可或缺。
直接使用匯編指令編寫單片機程序,對硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高級的語言(如:C語言)對硬件的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。C語言只是為了方便編寫,與機器打交道的其實都是2進製得代碼,彙編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。
單片機
單片機最小系統
包括電源電路、時鐘晶振電路、復位電路。
時鐘晶振電路、復位電路
程序存儲器中有七個特設的地址,其功能分別是用於:
0000H 復位時ROM的地址;
0003H 外部中斷0入口地址;
000BH 定時器計數器0溢出中斷入口地址;
0013H 外部中斷1入口地址;
001BH 定時器計數器1溢出中斷入口地址;
0023H串行口中斷入口地址;
002BH 定時/計數器2溢出中斷入口地址。
0000H地址是單片機復位時的PC地址,從0000H開始執行程序。
其他6個地址是單片機相應不同的中斷時,所跳向對應的入口地址。
該表也叫中斷向量表或稱中斷向量,在寫程序時,這些地址不要佔用。
使用時一般在這6個地址寫跳轉指令,如AJMP,LMJP等等。
單片機彙編指令
為解決某些特定的問題代碼中必須嵌入彙編語言以代替C語言完成的單片機的編程,彙編語言對於程序調試是不可或缺的。它包括:算術操作類指令,布爾變量操作類指令,邏輯操作數指令,控制轉移類指令。
常用單片機彙編指令:
1 .MOV A,Rn 寄存器內容送入累加器
2 .MOV A,direct 直接地址單元中的數據送入累加器
3 .MOV A,@Ri (i=0,1)間接RAM 中的數據送入累加器
4 .MOV A,#data 立即數送入累加器
5 .MOV Rn,A 累加器內容送入寄存器
6 .MOV Rn,direct 直接地址單元中的數據送入寄存器
7 .MOV Rn,#data 立即數送入寄存器
8 .MOV direct,A 累加器內容送入直接地址單元
9 .MOV direct,Rn 寄存器內容送入直接地址單元
布爾變量操作類指令:
1. CLR C 清進位位
2 .CLR bit 清直接地址位
3 .SETB C 置進位位
4 .SETB bit 置直接地址位
控制轉移類指令
1. ACALL addr11 絕對(短)調用子程序
2 .LCALL addr16 長調用子程序
3 .RET 子程序返回
4 .RETI 中斷返回
5 .AJMP addr11 絕對(短)轉移
6 .LJMP addr16 長轉移
7 .SJMP rel 相對轉移
8 .JMP @A+DPTR 相對於DPTR 的間接轉移
9. JZ rel 累加器為零轉移
10. JNZ rel 累加器非零轉移
11. CJNE A,direct,rel 累加器與直接地址單元比較,不相等則轉移
12 .CJNE A,#data,rel 累加器與立即數比較,不相等則轉移
13 .CJNE Rn,#data,rel 寄存器與立即數比較,不相等則轉移
14 .CJNE @Ri,#data,rel 間接RAM 單元與立即數比較,不相等則轉移
15 .DJNZ Rn,rel 寄存器減1,非零轉移
16 .DJNZ direct,rel 直接地址單元減1,非零轉移
17 .NOP 空操作
閃爍燈彙編代碼
流程圖
閃爍燈彙編代碼:
ORG 0000H ;初始地址
LJMP A0A0 ;跳轉至I/O初始化
ORG 002BH
A0A0:MOV P0,#0FFH ;P0口初始化
MOV P1,#0FFH ;P1口初始化
MOV P2,#0FFH ;P2口初始化
MOV P3,#0FFH ;P3口初始化
A0A1:SETB P1.5 ;P1.5置1(高電平)
LCALL DELA0 ;調用延時
CLR P1.5 ;P1.5清0(低電平)
LCALL DELA0 ;調用延時
LJMP A0A1 ;跳轉至開頭循環
DELA0:MOV 68H,#5 ;延時
DELA1:MOV 67H,#248
DELA2:MOV 66H,#250
DJNZ 66H,$
DJNZ 67H,DELA2
DJNZ 68H,DELA1
RET
END
閃爍燈電路_亮
閃爍燈電路_滅
閱讀更多 Qi朱哥說 的文章