PIC系列單片機(jī)程序設(shè)計基礎(chǔ)二
http://f9 ??;c=0相減結(jié)果為負(fù),f9
┋
4) 循環(huán)n次的程序
如果要使某段程序循環(huán)執(zhí)行n次,可以用一個寄存器作計數(shù)器。下例以f10做計數(shù)器,使程序循環(huán)8次。
count equ 10 ;定義f10名稱為count(計數(shù)器)
┋
movlw 8
movwf count loop ??;循環(huán)體
loop
┋
decfsz count,1 ??;count減1,結(jié)果為零則跳
goto loop ;結(jié)果不為零,繼續(xù)循環(huán)
┋ ??;結(jié)果為零,跳出循環(huán)
5)“if……then……”格式的程序
下面以“if x=y then goto next”格式為例。
movf x,0 ??;x→w
subwf y,0 ??;y—w(x)→w
btfsc status,z ??;x=y 否
goto next ??;x=y,跳到next去執(zhí)行。
┋ ;x≠y
6)“for……next”格式的程序
“for……next”程序使循環(huán)在某個范圍內(nèi)進(jìn)行。下例是“for x=0 to 5”格式的程序。f10放x的初值,f11放x的終值。
start equ 10
daend equ 11
┋
movlw 0
movwf start ; 0→start(f10)
movlw 5
movwf daend ;5→daend(f11)
loop
┋
incf start,1 ??;start值加1
movf start,0
subwf daend,0 ?。籹tart=daend ?(x=5否)
btfss status,z
goto loop ;x<5,繼續(xù)循環(huán)
┋ ?。粁=5,結(jié)束循環(huán)
7)“do while……end”格式的程序
“do while……end”程序是在符合條件下執(zhí)行循環(huán)。下例是“do while x=1”格式的程序。f10放x的值。
x equ 10
┋
movlw 1
movwf x ?。?→x(f10),作為初值
loop
┋
movlw 1
subwf x,0
btfss status,z ??;x=1否?
goto loop ?。粁=1繼續(xù)循環(huán)
┋ ?。粁≠1跳出循環(huán)
8) pic單片機(jī)查表程序
查表是程序中經(jīng)常用到的一種操作。下例是將十進(jìn)制0~9轉(zhuǎn)換成7段led數(shù)字顯示值。
設(shè)led為共陽,則0~9數(shù)字對應(yīng)的線段值如下表:十進(jìn)數(shù) 線段值 十進(jìn)數(shù) 線段值 0 c0h 5 92h 1 c9h 6 82h 2 a4h 7 f8h 3 b0h 8 80h 4 99h 9 90h
pic單片機(jī)的查表程序可以利用子程序帶值返回的特點來實現(xiàn)。具體是在主程序中先取表數(shù)據(jù)地址放入w,接著調(diào)用子程序,子程序的第一條指令將w置入pc,則程序跳到數(shù)據(jù)地址的地方,再由“retlw”指令將數(shù)據(jù)放入w返回到主