--- title: 單晶片応用-電路&組合語言指令解釋 tags: 單晶片応用 --- # 單晶片応用-電路&組合語言指令解釋 ## LED亮法 ### 電路 - LED動作 | 電位 | LED | |:----:|:---:| | 0 | 亮 | | 1 | 暗 | ### 指令 1. 全亮 - P2.0~2.4都接在一起 => 不太能用位元定址法 - LED動作 * 全亮: `MOV A,#00000000B` * 全暗: `MOV A,#11111111B` ![](https://i.imgur.com/Ldj6RUi.png) 2. 控制單独亮/暗 - 單暗: `SETB P3.5 ; set=1` - 單亮: `CLR P3.6 ; clear=0` ![](https://i.imgur.com/RCyf3xv.png) --- ## 開関 ### 電路 ![](https://i.imgur.com/MZn5JGX.png) - 開関狀態 | 電位 | Status | |:----:|:------:| | 0 | ON | | 1 | OFF | --- ## BUZZER(喇叭) ### 電路 ![](https://i.imgur.com/FYOiTkq.png) - 喇叭運行 | 電位 | 喇叭 | |:----:|:---:| | 0 | 関 | | 1 | 開 | ### 指令 - 関掉(位元定址): `MOV P3,#1110111B ; P3.4=関` --- ## 其它指令 ### 延遲時間 - 指令 * `#(值)`: 延遲時間 ``` MOV DL_REG,#40 ``` - 公式: $20ms * 40 = 800ms$ ### 位元移転 - 左旋 * 指令: RL * A= 111111110 ==> 11111101 - 右旋 * 指令: RR * A= 111111110 ==> 01111110 ### 邏輯運算 - AND * 11111110 * 8051 => `ANL` * 課本: 2-41 - OR * 00000001 * 8051 => `ORL` * 課本: 2-44 - EXOR * 11100000 XOR 00011111 = 11111111 * 8051 => `XRL` * 課本: 2-47 - NOT * 11100000 NOT 00011111 = 00000000 * 8051 => `CPL` * 課本: 2-50 ### 跳轉指令 #### 控制轉移類 * DJNZ(Decrement and Jump if Not Zero) * 功能: 把指定的位址或暫存器的值減1,若不為0則進行跳躍 * 程式: ``` DJNZ DL_REG,NEXT1 ``` #### 布林位元處理 * JNB(jump when not below) * 功能: 當指定bit的值不為1時進行跳躍的動作 * 程式: ``` JNB bit,rel ; 若bit=0跳至rel ``` * JB(jump when below) * 功能: 當指定bit的值為1時進行跳躍的動作 * 程式: ``` JB bit,rel ; 若bit=1跳至rel ``` ### 定義變數 ``` DL_REG BQU 30H ; DL_REG=30H BZ_REG1 BQU 31H ; BZ_REG1=31H BZ_REG2 BQU 32H ; BZ_REG2=32H ``` ### 符號 * `$`: 如果達到指定的值,則無窮的運行迴圈(類似while迴圈) ``` DJNZ R1,$ ;如果是0則無窮的運行直到值是1 ``` --- ## source * https://blog.xuite.net/weslyyen0704/twblog1/125522381 * https://morosedog.gitlab.io/x86-20190703-x86-3/ * http://www.chipware.com.tw/chinese/8051/8051-04.pdf