MPLAB-IDE Workshop

Download Report

Transcript MPLAB-IDE Workshop

MPLAB-IDE
Workshop
Microchip Taiwan
MPLAB-IDE Workshop
Slide 1
MPLAB-IDE 1 Day Workshop









Microchip Taiwan
MPLAB-IDE 的介紹與安裝
本文編輯器撰寫原始程式
建立 Project 與組譯原始程式
組合語言的基本介紹
MPLAB-IDE 輸入、輸出模擬
MPLAB-IDE 軟體除錯功能
MPLAB-ICD 介紹
程式的載入與執行
撰寫一程式
MPLAB-IDE Workshop
Slide 2
介紹 MPLAB-IDE









Microchip Taiwan
高整合度的微處理器軟體/硬體
研發及偵錯平台
採用專案管理模式 ( Project )
多視窗原始程式編輯、修改
直接組譯 / 編譯原始程式
軟體模擬
具有輸入模擬功能
支援原始程式偵錯
支援 MPASM、 MPLINK
支援 C Compiler
MPLAB-IDE Workshop

硬體除錯工具 :





MPLAB-ICE 2000
PICMASTER
ICEPIC
MPLAB-ICD
程式燒錄工具 :
 PRO MATE - II
 PICSTART Plus
 MPLAB-ICD
Slide 3
MPLAB
整合式的發展環境
內含多功能
程式編輯器
語言工具
MPASM
編譯器
原始檔案程式
偵錯功能
單一系統專案
管理模式
軟體模擬
硬體模擬器
程式燒錄器
MPLAB-SIM
軟體模擬器
MPLAB-ICE
2000
PICSTART
Plus
MPLINK
連結器
PICMASTER
C
編譯器
MPLAB-ICD
Microchip Taiwan
PRO MATE
MPLAB-IDE Workshop
Slide 4
MPLAB-IDE 畫面
工具圖示區
原始程式
暫存器顯示
反組繹除錯
堆疊指示
變數區
狀態顯示列
Microchip Taiwan
MPLAB-IDE Workshop
Slide 5
練習一 :安裝 MPLAB-IDE
 CD-ROM 是否可執行 AutoRun ?
 否,則請執行 “ Index.htm ”
 MPLAB-IDE 在 :
 Development Tools
 MPLAB-IDE
 MPLAB Version 4.12.00
 MPLAB ( Disks 1 to 7 )
 選擇 “從檔案目前所在位置開啟這個檔案”
 Select Components --- ALL
 Select Language Components --- ALL
 Select Destination Directory
 C:\ Program Files\ MPLAB
Microchip Taiwan
MPLAB-IDE Workshop
Slide 6
了解相關檔案位置
 C:\Program Files\MPLAB
 ..\Examples ( 次目錄 )
 16F84A MPLINK 示範程式
 ..\Template ( 次目錄 )
 F877temp.asm Microchip 提供全系列 PIC標準書寫範例







Microchip Taiwan
12Cxxx.lkr
16Cxxx.lkr
16Fxxx.lkr
P17Cxxx.inc
P16Cxxx.inc
Mplab.exe
Mpasmwin.exe
多檔案連結位址描述檔
Microchip 標準定義含入檔 ( Include )
MPLAB-IDE Workshop
Slide 7
本文檔的編輯 ( EDIT )







檔案管理 ( File )
開啟新檔 (New File)
開啟舊檔 (Open File)
檔案儲存同一檔名 (Save)
檔案儲存另一檔名 (Save As)
游標控制








Home - 游標移至本行起頭
End - 游標移至本行尾
Ctrl + Lift - 向左移一個字
Ctrl + Right - 向右移一個字
Ctrl + Pg Up - 移至本頁起頭
Ctrl + Pg Dn - 移至本頁尾
Ctrl +Home - 移至本檔案起頭
Ctrl + End - 移至本檔案尾
Microchip Taiwan
編輯控制














MPLAB-IDE Workshop
Ctrl +Z - 回復原狀
Ctrl +C - 複製選擇
Ctrl +V - 貼上複製
Ctrl +X - 清除選擇
Ctrl +A - 全選
Del
- 刪除
Ctrl + K -刪除本行游標右方字
Ctrl + Shift + K -刪除本行
Ctrl + G - 跳至第幾行
F3
- 尋找字元或字串
Ins
BackSpace
Tab
Mouse 右鍵按兩下 - 選擇該字
Slide 8
練習二 : 輸入一個組合語言程式
Ex1.ASM ( 第一頁 )
;**********************************************************
;* This program is for edit test, the program also display
;* a delay results on the LEDs on PORTC.
;* Please make sure that the DIP switch SW3 has all
;* switches in the ON position.
;**********************************************************
list p=16F877
#include <p16f877.inc>
; Include file locate at default directory
;
VAL_US
equ
.249
; 1ms delay valum
VAL_MS
equ
.100
count
equ
0x20
; Defined temp reg. for 1ms delay
count_ms equ
0x21
; Defined delay reg.
;
;***************************************
;*
Program start
*
;***************************************
org
0x00
; reset vector
nop
; Reserve for MPLAB-ICD
initial:
clrw
; W =0
clrf
PCLATH
banksel
TRISC
; Select to bank1
clrf
TRISC
; PORTC = Output
banksel
PORTC
; Select to bank0
clrf
PORTC
; Clear PORTC
Microchip Taiwan
MPLAB-IDE Workshop
Slide 9
練習二 : 輸入一個組合語言程式
Ex1.ASM ( 第二頁 )
;
;************ Main *********************
;
start:
incf
PORTC,f
; PORTC = PORTC + 1
call
delay_250ms
; Call delay routine
goto
start
;
;-------- 250 ms delay routine ---------delay_250ms:
movlw
VAL_MS
movwf
count_ms
loop_ms
call
delay_1ms
decfsz
count_ms,f
goto
loop_ms
return
;
;-------- 1 ms delay routine ----------delay_1ms:
movlw
VAL_US
movwf
count
dec_loop nop
decfsz
count,f
goto
dec_loop
return
;
Microchip Taiwan
end
MPLAB-IDE Workshop
Slide 10
專案管理 ( Project Management )
 MPLAB-IDE 是採用專案管理方式來完成軟體研
發與設計所以在使用 MPLAB-IDE 時,就必需建
立一個 Project。
 Project 的附加檔案名稱是 xx.pjt,最好與原始檔
案放在同一個目錄以便程式的管理。
 一個 Project 可記錄眾多資訊 :




視窗位置、大小、個數
相關檔案的名稱、位置
相關偵錯訊息的設定值
組譯器、編譯器的選擇與設定
 以 Project 觀念來保持一個完整的軟體設計,以
便日後程式的維護、修改。
Microchip Taiwan
MPLAB-IDE Workshop
Slide 11
設定 MPLAB-IDE 工作環境
 第一步 : 設定 MPLAB-IDE 的工作環境
 在主目錄選 Options
Development Mode
 Tools 選項
 MPLAB-SIM Simulator
 Processor = PIC16F877
 Clock 選項
 Oscillator Type
: XT
 Desired Frequency : 4 MHz
 Configuration 選項
 Watch Dog Timer : None
 Break Options 選項
 Clear Breakpoints on Download : Enable
 Global Break Enable
: Enable
 Stack Overflow Break Enable : Enable
 Freeze Peripherals on Holt
: Enable
Microchip Taiwan
MPLAB-IDE Workshop
Slide 12
練習三 : 建立、修改 Project

利用練習二所輸入的原始程式 EX1.ASM 來建立一個新的以
EX1.PJT 為名的 Project。





New Project : 名稱為 “ ex1.pjt”
Double Click “ex1.hex”
設定 “Node” 的內容
加入你的原始程式 ( ex1.asm ) 於目前的 Project 中
檢查 Project (ex1.pjt) 的相關檔案
 在 Window 目錄下,開啟 “ Project”
Source File
Include File
Microchip Taiwan
MPLAB-IDE Workshop
Slide 13
MPASM組譯流程
● 單一原始組合語言檔 ( .ASM FILE → .HEX FILE )
Code.asm
Code.inc
MPASM
Code.hex
燒錄器 ( PRO MATE - II )
軟體模擬 ( MPLAB-SIM )
軟體模擬器 ( ICE-2000 )
● 多原始組合語言檔 ( .ASM FILE → .OBJ →.HEX FILE )
Main.asm MPASM
Main.O
Sub.asm MPASM
Sub.O
More.asm MPASM
More.O
Microchip Taiwan
.LIB
MPLINK
MPLAB-IDE Workshop
.LKR
Main.hex
燒錄器
軟體模擬
軟體模擬器
Slide 14
練習四 : 組譯原始程式
 在 Project 視窗 :





什麼是 Make Project ?
什麼是 Build All ?
組譯的結果是 “Build Failed” 或 “ Build completed successfully” ?
組譯的結果有 “Message”、 “Warning”、 “Error” 怎麼辦?
組譯成功後,會有那些檔案產生 ?
Microchip Taiwan
MPLAB-IDE Workshop
Slide 15
14-Bits Core 指令集 ( 35個 )
位元組操作指令
NOP
MOVWF
CLRW
CLRF
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
carry
RLF
SWAPF
INCFSZ
位元操作指令
f
f
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
No Operation
Move W to f
Clear W
Clear f
Subtract W from f
Decrement f
Inclusive OR W and f
AND W and f
Exclusive OR W and f
Add W and f
Move f
Complement f
Increment f
Decrement f, skip if zero
Rotate right f through
f,d
f,d
f,d
Rotate left f through carry
Swap nibbles of f
Increment f, skip if zero
BCF
BSF
BTFSC
BTFSS
f,b
f,b
f,b
f,b
常數操作及控制指令
SLEEP
CLRWDT
RETLW
RETFIE
RETURN
CALL
GOTO
MOVLW
IORLW
ADDLW
SUBLW
ANDLW
XORLW
f = 暫存器或記憶位址, k = 常數值 (8-bit), b = 第幾位元 <0,7>,
Microchip Taiwan
Bit clear f
Bit set f
Bit test f, skip if clear
Bit test f, skip if set
MPLAB-IDE Workshop
k
k
k
k
k
k
k
k
k
Go into standby mode
Clear watchdog timer
Return, place literal in W
Return from interrupt
Return from subroutine
Call subroutine
Go to address (k is 9-bit)
Move literal to W
Inclusive OR literal with W
Add literal with W
Subtract W from literal
AND literal with W
Exclusive OR literal with W
d = 運算後資料目的地 (0=f, 1=W)
Slide 16
正確的語法表達 (一)
數值、數字(字元)表示法


十進制表示(Decimal):
D’<十進制數目>‘ & . <十進制數目 >

MOVLW
D’100’
; 載入常數 100(10) to W Reg.

 Const1
MOVLW
EQU
.100
D’200’
; 載入常數 100(10) to W Reg.
; Const1 = 200 (十進制)
十六進制表示(Hexadecimal): H’<十六進制數目>‘ & 0x<十六進制數目>
& <十六進制數目> h



 Const1
Microchip Taiwan
MOVLW
MOVLW
MOVLW
EQU
H’3F’
0x3F
0FEh
H’5A’
; 載入常數 3F(16) to W Reg.
; 載入常數 3F(16) to W Reg.
; 載入常數 FE(16) to W Reg.
; Const1 = 5A (十六進制)
MPLAB-IDE Workshop
Slide 17
正確的語法表達 (二)
數值、數字(字元)表示法
 二進制表示(Binary): B’<二進制數目>‘

MOVLW
B’11110000’
 Const1
EQU
B’01010101’
 字元(ASCII):
; 載入常數 0xF0 to W Reg.
; Const1 = 01010101 (二進制)
A’<字元>‘ & ’<字元>‘

MOVLW
A‘R’
; 載入字元 “R” to W Reg.

 Const1
MOVLW
EQU
‘c’
‘a’
; 載入字元 “ c” to W Reg.
; Const1 = 小寫 的字元 A
Microchip Taiwan
MPLAB-IDE Workshop
Slide 18
正確的語法表達 (三)
組合語言的語法
 指令 (虛擬指令) & 運算元
MOVF
f,d
f
d
; Move RAM/Register to Destination
暫存器 或 RAM 的位址
選擇資料移送的目的暫存器
d = 0 時,放置在 w 暫存器 ,亦可寫成 “W”
d = 1 時,放回在 f 暫存器 ,亦可寫成 “F” 或忽略不
寫
範例:
var_count
;
建議語法
Microchip Taiwan
equ
0x3f
addwf
addwf
addwf
addwf
var_count , 0
var_count , 1
var_count , F
var_count , W
MPLAB-IDE Workshop
Slide 19
資料移動指令
( MOVF , MOVWF)
MOVF


MOVWF
語法 : MOVF f , d
操作 : 將所指到的暫存器 ( f )
的內容傳送到工作暫存器 (w)


語法 : MOVWF f
操作 : 將工作暫存器 (w) 的內容
傳送所指到的暫存器 ( f )
例:
例:
movf h’3A’,W
將位址 3A(16) 的暫存器內容傳送
到工作暫存器 ( w ) 中‧。
movwf h’3B’
將工作暫存器 ( w ) 中的內容傳送到
位址為 3B(16) 的暫存器中‧。
暫存器
暫存器
39
3a
39
55h
3b
55h
3a
3b
工作暫存器
Microchip Taiwan
MPLAB-IDE Workshop
55h
aah
AAh
工作暫存器
Slide 20
資料遞減指令
( DECF , DECFSZ)
DECF


DECFSZ
語法 : DECF f , d
操作 : 將所指到的暫存器 ( f )
的內容減一後回存到 (d)


例:
decf h’3A’, F
將位址 3A(16) 的暫存器內容減一後
回存到位址為3A(16)暫存器中。
暫存器
39
3a
55h / 54h
55h - 1
= 54h
語法 : DECFSZ f , d
操作 :將所指到的暫存器 ( f ) 的
內容減一後回存到 (d),並測試
減一後的結果是不是等於零以
決定是否跳過下一個指令。
 結果不等於零:執行下一個指令
 結果等於零:忽略下一個指令而
直接執行下下一個指令
例:
3b
Microchip Taiwan
decfsz h’3A’ , F
goto 結果不等於零
call
MPLAB-IDE Workshop
結果等於零
Slide 21
位元清除、設定指令
( BCF , BSF )
BCF


BSF
語法 : BCF
f,b
操作 : 將所指到的暫存器 ( f )
中的第 (b) 個位元設定為 0。


語法 : BSF
f,b
操作 : 將所指到的暫存器 ( f )
中的第 (b) 個位元設定為 1。
例:
PORTA equ h’05’
bcf PORTA , 2
將位址 05(16) 的暫存器 ( PORTA ) 的
bit 2 清除為 “0”。
例:
PORTA equ h’05’
bsf PORTA , 2
將位址 05(16) 的暫存器 ( PORTA ) 的
bit 2 設定為 “1”。
bcf h’3a’ , 7
將位址 3a(16) 的暫存器的 bit 7 清除
為“0”。
bsf h’3a’ , 7
將位址 3a(16) 的暫存器的 bit 7
設定為 “1”。
Microchip Taiwan
MPLAB-IDE Workshop
Slide 22
位元測試指令
( BTFSC , BTFSS )
BTFSC


BTFSS
語法 : BTFSC
f,b
操作 :測試所指到的暫存器 ( f )
的第 (b) 個的位元內容是不是等
於 “0” 以決定是否跳過下一
個指令。


 Bit (b) 不等於 “0”:執行下一個
指令 ( 條件不成立 )。
 bit (b) 等於 “0”:忽略下一個指
令而直接執行下下一個指令,也
就是說其測試條件成立。
例:
btfsc
goto
goto
Microchip Taiwan
語法 : BTFSS
f,b
操作 :測試所指到的暫存器 ( f )
的第 (b) 個的位元內容是不是等
於 “1” 以決定是否跳過下一
個指令。
 Bit (b) 不等於 “1”:執行下一個
指令 ( 條件不成立 )。
 bit (b) 等於 “1”:忽略下一個指
令而直接執行下下一個指令,也
就是說其測試條件成立。
例:
h’3A’ , 5
結果不等於 “0”
結果等於 “0”
MPLAB-IDE Workshop
btfss
goto
goto
h’3A’ , 5
結果不等於 “1”
結果等於 “1”
Slide 23
常用的基本指令
( ADDWF , SUBWF , GOTO , CALL , RETURN )
ADDWF


GOTO
語法 : ADDWF
f,b
操作 :將所指到的暫存器 ( f ) 的
內容與工作暫存器 (W)的內容
相加後,放置在目地暫存器 (d )


語法 : GOTO
addr
操作 : 無條件的直接跳到所指
定位址 (addr) 執行程式。
SUBWF


CALL
語法 : SUBWF
f,b
操作 :將所指到的暫存器 ( f ) 的
內容減去工作暫存器 (W)的內
容,其差放置在目地暫存器 (d )
Microchip Taiwan


語法 : CALL
sub
操作 : 無條件的直接跳到所指
定的副程式位址 (sub) 執行該
副程式。
MPLAB-IDE Workshop
Slide 24
常數載入、運算指令
( MOVLW , ADDLW , SUBLW, IORLW , ANDLW )
MOVLW


IORLW
語法 : MOVLW H’3A’
操作 :將所指定的常數 ( 3A) 載
入到工作暫存器 (W)中。


語法 : IORLW B’11110000’
操作 :將所指定的常數 ( F0 )與
工作暫存器 (W)的內容做 OR
Gate 的運算後,放回工作暫存
器 (W ) 。
SUBLW


ANDLW
語法 : SUBLW
H’3A’
操作 :將所指定的常數 ( 3A)減
去工作暫存器 (W)的內容,其
差放回工作暫存器 (W )
Microchip Taiwan


語法 : ANDLW B’00001111’
操作 :將所指定的常數 ( 0F )與
工作暫存器 (W)的內容做 AND
Gate 的運算後,放回工作暫存
器 (W ) 。
MPLAB-IDE Workshop
Slide 25
必需要使用的虛擬指令
 LIST - 目錄控制 (Listing Control)
 list
p=PIC16F877, f=INHX8M
 #INCLUDE - 加入一原始檔、定義檔或敘述檔
 #include
<C:\MPLAB\16F877.INC>
 EQU - 宣告常數、變數 (不可重新定位)
 memory
 count
 io_set
equ
equ
equ
0x3f
.100
B’11000011’
 ORG - 設定程式組譯的起始位址
 org
 org
0x00
0x30
; 組譯位址從“00h”開始
; 組譯位址從“30h”開始
 END - 程式結束
Microchip Taiwan
MPLAB-IDE Workshop
Slide 26
虛擬指令的使用範例
list
p=16f877
; 定義使用的 MCU 為 PIC16F877
#include
<p16f877.inc>
; 使用 16F877 的標準定義檔
;***** 定義變數‘ 常數、參數區 ******
T_DELAY
EQU
D’100’
dly_count
EQU
H’70’
;**********************************************************************
ORG
0x000
; 設定程式執行位址從“0”開始 (Reset
Vector)
clrf
PCLATH
goto
main
ORG
0x004
; 中斷向量進入位址
;******* 中斷處理副程式區 ******
retfie
; 中斷返回
;
main
movlw
T_DELAY
; 主程式開始
movwf
dly_count
:
; remaining code goes here
END
; 程式結束
Microchip Taiwan
MPLAB-IDE Workshop
Slide 27
指令的執行時間
; This is delay subroutine for 1ms
; Oscillator Frequency : 4MHz
VAL_US
EQU
call
:
.249
delay_1ms
; 2us
movlw
VAL_US
; 1us
movwf
count
; 1us
該指令執行所需的時間
2us
+
delay_1ms:
dec_loop
nop
decfsz
count,f
goto
dec_loop ; 2us
return
Microchip Taiwan
; 1us
; count=0, 2us
; count>0, 1us
1us
+
1us
+
(1us+1us+2us)*248
+ (1us+2us) = 995us
+
; 2us
MPLAB-IDE Workshop
2us
--------1001us
Slide 28
MPLAB-SIM 的基本除錯功能
單部執行
執行
Step Over
停止
Make Project
Reset
Icon 切換
利用Stopwatch視窗
來量測程式執行
所需的時間
利用mouse的右鍵
來設定中斷點
Microchip Taiwan
MPLAB-IDE Workshop
Slide 29
練習五 : 寫個 Delay 的副程式
Ex5.ASM
 利用前二頁 “虛擬指令的使用範例” 來撰寫 Delay
的副程式




Delay 0.5mS 的副程式
Delay 10mS 的副程式 ( 利用 CALL Delay 0.5mS 的方式 )
Delay 200mS 的副程式 ( 利用 CALL Delay 10mS 的方式 )
建立 Reset 向量起始位置及架構整個可執行的主程式
 如何偵錯、測量 Delay 副程式
 RESET , RUN , HALT
 BREAK , STEP , STEP OVER
 STOPWATCH , Files Registers Window ( RAM )
Microchip Taiwan
MPLAB-IDE Workshop
Slide 30
基本 I/O 操作
輸出準位
栓鎖
Data Bus
(寫入I/O腳)
VDD
D Q
1 : OFF
0 : ON
Q
P
MOVWF PORTC
1 : ON
0 : OFF
Reset
N
PORTC
D Q
(寫入I/O腳)
Vss
Q
MOVWF TRISC
輸入、出控制
正反器
(讀取I/O腳)
MOVF PORTC,W
Microchip Taiwan
MPLAB-IDE Workshop
Slide 31
暫存器頁(BANK)的自動設定
BANKSEL

ADCON1
依據 BANKSEL 指令所指到的暫存器,自動加入該暫存器頁(BANK)的設
定指令,此指令會依不同的 PIC 自行判斷頁數。
以PIC16C77為例 : 共有四個暫存器頁(BANK) 就會使用到兩個換頁指令
000B
1683 1303
00049
banksel ADCON1
Message[302]: Register in operand not in bank 0. Ensure that bank
000D
019F
00050
clrf
ADCON1
Message[302]: Register in operand not in bank 0. Ensure that bank
000E
170C
00051
bsf
PIE1,ADIE
000F
1283 1303
00052
banksel ADCON0
0011
30C1
00053
movlw
h'c1'
0012
009F
00054
movwf
ADCON0
Microchip Taiwan
MPLAB-IDE Workshop
Slide 32
設定 I/O Pin
 試著將 I/O (PORT) 視為一個暫存器 (RAM)來操作
 TRISx 為 I/O 輸出或輸入的控制暫存器
 檢查一下,PORTx 與 TRISx 所在的位址有何不同 ?
 要設定 PORTx 為輸出時,則將相對應的 TRISx 設定為 “0”
 要設定 PORTx 為輸入時,則將相對應的 TRISx 設定為 “1”
例 : 將 PORTB 的 RB0-RB3為輸出腳, RB4-RB7為輸入腳
並使 RB0-RB3 送出 “1,0,1,0” 的準位。
clrf
banksel
movlw
movwf
banksel
movlw
movwf
Microchip Taiwan
PORTB
TRISB
B’11110000’
TRISB
PORTB
B’00000101’
PORTB
MPLAB-IDE Workshop
Slide 33
練習六 : 設定 I/O PORT
Ex6.ASM
 請設定下列 PORT 的輸出、入狀態
 PORTA 的 RA0 - RA5 為輸出 ; 輸出均為 “0”
 PORTB 的 RB0 - RB7 為輸出 ; 輸出為 “5A”
 PORTC 的 RC0 - RC7 為輸出 ; 輸出為 “A5”
 PORTD 的 RD0 - RD7 為輸入
 PORTE 的 RE0 - RE2 為輸入
注意 “PORTA & PORTE” 初始設定為 A/D 輸入
 將 PORTB 與 PORTC 的輸出值每隔 0.5mS 交
互輸出一次後,自動加一在PORTA顯示
 軟體模擬時遇到 Delay 副程式如何解決 ?
Microchip Taiwan
MPLAB-IDE Workshop
Slide 34
練習六參考程式流程圖
程式起始
Delay 0.5mS
PORTA,E
數位 I/O
PORTB= A5
PORTC= 5A
設定輸出
PORTA,B,C
Delay 0.5mS
PORTA= 0
PORTA=
PORTA+ 1
PORTB= 5A
PORTC= A5
Microchip Taiwan
MPLAB-IDE Workshop
Slide 35
旗號的功能
PC 值
Device
W值
旗號狀態
中斷顯示
模擬頻率
 旗號的主要功用 :




在程式中用來判斷數值、變數的比較結果
程式中的迴圈控制
狀態的判斷以決定程式執行的路徑
數學運算或數值轉換時有關進位、借位、半進位
、有號數及溢位的處理
 PIC 的旗號 :
 C - 進位旗號
 Z - 零旗號
 DC - 半進位旗號
Microchip Taiwan
MPLAB-IDE Workshop
Slide 36
C 旗號的改變
 C
- 進位旗號
 執行加法時 (結果有進位時 C=1)
例一 : 假設 W reg. = 9A 時,執行 “ADDLW
假設 W reg. = 3F 時,執行 “ADDLW
0x80“ 後, C = ??
0x80“ 後, C = ??
 執行減法時 (結果無借位時 C=1)
例二 : 假設 W reg. = 9A 時,執行 “SUBLW 0x80“ 後, C = ??
假設 W reg. = 3F 時,執行 “SUBLW 0x80“ 後, C = ??
(執行減法時,注意誰是被減數、誰是減數)
 執行旋轉指令
例三 : 假設 Reg.30的內容= AA & C = 1 時,執行 “ RLF 0x30,W “ 後,
C = ?? , W Reg.的 bit0 = ??
假設 Reg.30的內容= AA & C = 1 時,執行 “ RRF 0x30,W “ 後,
C = ?? , W Reg.的 bit0 = ??
Microchip Taiwan
MPLAB-IDE Workshop
Slide 37
Z 旗號的改變
 會影響 Z 旗號的指令共有十六個,一般而言只要會改
變運算結果的指令均可能會影響 Z 旗號
例如: 算數指令、邏輯指令、旋轉指令、清除指令
MOVF, COMF,
DECF,
INCF
 一般而言只要運算結果為零則 Z=1
例 : 假設 W reg. = 55 時,執行 “ANDLW
假設 W reg. = 3F 時,執行 “SUBLW
0xAA“ 後, Z = ??
0x3F“ 後, Z = ??
 不會影響 Z 旗號的特殊指令
例如: MOVWF, SWAPF , MOVLW
Microchip Taiwan
MPLAB-IDE Workshop
Slide 38
DC 旗號的改變
 一般稱之為 “ 半進位旗號 ” ,發生的原
因則是當做算數運算結果有發生較低的位
元組 (b3:b0) 有進位產生時,則 DC = 1。
 會影響 DC 旗號的指令
 ADDWF, SUBWF , ADDLW, SUBLW
 在普通情形下,很少會使用到半進位旗號
,只有在做十進制的運算才會使用,利用
DC旗號來決定其結果是否還需做加六的調
整以符合十進制的結果。
例 : BCD 的加、減法
Microchip Taiwan
MPLAB-IDE Workshop
Slide 39
如何運用旗號
 利用減法指令來做數值大、小的比較 :
 若 F reg. 減 W reg. ( SUBWF
F,W)
C 旗號
Z 旗號
比較結果
1
0
1
0
0
1
F>W
F<W
F=W
 若需判斷 F > = W , 可直接測試 C = 1 即可 ( Z 可忽略 )
 若要判斷 F < = W , 就必須要先可測試 C = 0 , Z=1 兩條件同時成立
 利用旋轉指令來改變 C 旗號,可執行位元的檢測
 超過 8 bit 的加、減法別忘記 C 旗號的意義
Microchip Taiwan
MPLAB-IDE Workshop
Slide 40
練習七 : 基本旗號控制
Ex7.ASM
 設計一個程式能將 “input” (RAM 0x20) 的值
先讀進來,再判斷其值是否 > = 0x30 (ASCII
“0”)
 若其值 < 0x30 , 則直接載入一值 “0x0D” 並以同部
串列的方式在 PA0, PA1 連續輸出 8 bit 的 0x0D
 若其值 >= 0x30 , 則直接該值以串列的方式在 PA0,
PA1 輸出
 輸出波形
PA1
d0
d1
d2
d3
d4
d5
d6
d7
PA0
Microchip Taiwan
MPLAB-IDE Workshop
Slide 41
練習七參考程式流程圖
Load 0x0D
Set count = 8
Initial I/O
PORTA = I/O
Rotate LSB
to C
Get Data
from “input”
C=1 ?
C=1
C=0
<30
“input”
>= 30?
>=30
Set PA1=Low
Set PA1=Hi
Process
PORTD >= 30
Set PA0=
lo ->Hi -> Lo
No
Microchip Taiwan
Count-1=0 ?
END
MPLAB-IDE Workshop
Slide 42
了解 MPLAB-IDE 的視窗
原始程式
按此方塊
反組譯顯示
Microchip Taiwan
MPLAB-IDE Workshop
程式追蹤視窗
顯示EEPROM內容視窗
程式列印檔視窗
相關位址顯示視窗
堆疊視窗
暫存器(RAM) 視窗
特殊暫存器視窗
助譯符號一覽表
馬錶量測視窗
Project視窗
變數監督、管理視窗
Slide 43
中斷點的設定
設有兩個中斷群
單次中斷點
設有Pass Count的中斷
Microchip Taiwan
MPLAB-IDE Workshop
Slide 44
活用 Watch Window
變數值顯示設定
加入要觀察的變數
按此方塊
堆疊視窗
Microchip Taiwan
MPLAB-IDE Workshop
變數視窗
Slide 45
更改暫存器的內容
按 Mouse 左邊鍵兩次
則會出現 Modify 視窗
移動游標到欲修改的位址
按 Mouse 右邊鍵一次
Microchip Taiwan
MPLAB-IDE Workshop
Slide 46
Trace Window
移動游標選取位址
按 Mouse 右邊鍵一次
Microchip Taiwan
MPLAB-IDE Workshop
Slide 47
MPLAB-SIM 問與答
 I/O Port 被設定為輸入,用 Modify 方式寫入一值到此
輸入 Port 時,該 Port 會有何變化? 再將此 Port 設成輸
出,該 Port 又會有何種變化呢 ?
 如何清除所設的中斷 (Break) 點、Trace 點 ?
 為什麼我的 MPLAB-SIM 無法執行中斷 (Break) ?
 用 Watch Window 與 File Registers Window 在觀察變
數 (RAM) 的功能上有何不同 ?
Microchip Taiwan
MPLAB-IDE Workshop
Slide 48
MPLAB-SIM 輸入模擬
 非同步激發模擬 ( Asynchronous Stimulus )
 以個自獨立的 PIN 來模擬輸入
 可隨時以 Mouse 輸入,不受時脈 的影響
 暫存器激發模擬 ( Register Stimulus )
 需建立一 “ *.reg” 的十六進制檔
 需指定欲模擬的暫存器及讀取資料的程式位址
 I/O 腳激發模擬 ( Pin Stimulus )
 需建立一 “ *.sti ” 的 Pin 腳信號描述檔 “ Cycle”與 Pin 關
係
 最好配合 “Stopwatch” 來模擬
 連續脈衝激發模擬 ( Clock Stimulus )
 模擬一連續脈衝自 I/O 腳輸入
Microchip Taiwan
MPLAB-IDE Workshop
Slide 49
MPLAB-SIM 輸入模擬 (一)
Asynchronous Stimulus
四種激發模擬方式
腳位設定給 RA0
Pulse 方式輸入
分派模擬腳位
未設定模擬腳位
Microchip Taiwan
MPLAB-IDE Workshop
Slide 50
練習八 : 輸入模擬練習 (一)
Asynchronous Stimulus (ex8a.asm)
 利用 Ex8a.asm 練習非同步激發模擬
 開啟 Ex8a.pjt
 模擬 RB0 ( PORTB,0 ) 為一般輸入腳
 開啟 “Asynchronous Stimulus” 對話視窗,
並利用 Mouse 的右鍵 來設定 “RB0”的輸入方式為 “Toggle”
 Reset 程式
 按 “ Ctrl + F9” ( Animate ) 執行
 利用 Mouse 的按鍵來輸入 “Toggle” 信號,
注意程式的變化 ! ! ! ! !
Microchip Taiwan
MPLAB-IDE Workshop
Slide 51
MPLAB-SIM 輸入模擬 (二)
Register Stimulus
 開啟暫存器激發模擬 ( Register Stimulus )
 Debug > Simulator Stimulus > Register Stimulus > Enable
 暫存器激發模擬 ( Register Stimulus ) 有何功能 ?
 模擬一 8 bit 資料的輸入,程式在執行到某特定的位址時,
會直接由特定的暫存器直接輸入一 8 bit 資料 。
 欲輸入的 16 進制值資料是從檔案順序讀取 。
 適合模擬 “串列訊號輸入” 及 A/D 轉換結果 。
此模擬只能適合有 Latch 功能的暫存器,而一般 I/O Port
並無輸入 Latch 功能,所以無法模擬。
 步驟
 建立資料檔 ( File > New > adres.reg )
 輸入Contact 程式位址的名稱或位址 ( 何時讀取檔案資料 )
 輸入模擬的暫存器的名稱或位址
Microchip Taiwan
MPLAB-IDE Workshop
Slide 52
練習八之一 : 輸入模擬練習 (二)
Register Stimulus (ex8b.asm)
欲Contact的
程式位址
欲模擬的暫存器
名稱或位址
Microchip Taiwan
MPLAB-IDE Workshop
欲輸入到 ADRESH
的 16 進制值檔案
( adres.reg )
Slide 53

MPLAB -ICD
Microchip Taiwan
MPLAB-IDE Workshop
Slide 54
MPLAB-ICD 功能









Microchip Taiwan
全速執行
單步執行
單點硬體中斷
變數觀察
工作電壓 - 3.0V to 5.5V
頻率範圍 - 32KHz to 20MHz
RS-232 to PC
價格便宜
直接使用在 MPLAB-IDE
MPLAB-IDE Workshop
Slide 55
MPLAB-ICD 配件圖
9” Modular Cable
MPLAB-ICD Header
PIC16F877
MPLAB-ICD Module
RS-232
Cable
+9V
Power Supply
Cable
MPLAB-ICD Demo Board
Microchip Taiwan
MPLAB-IDE Workshop
Slide 56
MPLAB-ICD 注意事項




只可使用七層堆疊
程式位址 (0x1F00-0x1FFF) 保留給監督程式使用
程式位址 0x0 必須填入“NOP” 指令
RB6 & RB7 保留給 ICD 做除錯用
 MCLR pin 會出現 13V 的電壓 (thru a 1kohm resistor)
Microchip Taiwan
MPLAB-IDE Workshop
Slide 57
VR 類比輸入
ICD 實驗板線路
DIP-SW
XT/RC 選擇
Microchip Taiwan
RB0 按鍵
MPLAB-IDE Workshop
將 DIP-SW 設為 ON 以便
將 LED接地
Slide 58
啟動 MPLAB-ICD
 連接 MPLAB-ICD , 並接上 9V DC Adapter
 在 “Options”> “Development Mode”> “Tools”
 選擇 “MPLAB-ICD Debugger” 及 Processor 為
“16F877”
 試著將 “練習二”的程式 Download 到 ICD 並執行
 將 “Debug Mode” 關閉後,並將 “Module
Cable”移開,以測試 16F877 是否可獨立執行 ?
Microchip Taiwan
MPLAB-IDE Workshop
Slide 59
ICD 視窗
目前狀態顯示
重新連接 ICD
所要更新的視窗選擇
Config. 設定選項
必須確定清楚
程式燒錄區域設定選項
必須確定清楚
Microchip Taiwan
MPLAB-IDE Workshop
Slide 60
練習九 : 設計一跑馬燈
Ex9.ASM
 設定 PORTB 的 RB0 為輸入腳,其餘 PORT 均
為輸出 (避免輸入腳浮接)
注意 “PORTA & PORTE” 初始設定為 A/D 輸入
 將顯示值 “b’00000111” 輸出到 PORTC,若
RB0 = 1 ( 按鍵放開 ) 則每隔 0.1SEC 向左移一
位 ( 一次移 8 個位元 ),RB0 = 0 ( 按鍵按下 ) 則
每隔 0.1SEC 向右移一位 。
注意 : Carry 旗號 是否受其它程式影響而消失 ?
Microchip Taiwan
MPLAB-IDE Workshop
Slide 61
練習十 : 以 VR 來控制跑馬燈
旋轉的速度 ( Ex10.ASM )
進階題 : 是否可在加入 VR (可變電阻)來控制
跑馬燈移動的速度 ?
 按鍵仍控制 LED 左、右旋轉
 VR 接在 A/D的 CH0 (RA0)
 注意 BANK 的切換
 可利用 “Ex8b.asm” 的 A/D 轉換副程式
Microchip Taiwan
MPLAB-IDE Workshop
Slide 62