Microsoft Word - 透析8051之迴圈控制方法.doc

Similar documents
Microsoft PowerPoint - chap5.ppt

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63>

学习MSP430单片机推荐参考书

微處理機期末專題

Visual C# 2005程式設計

untitled

Microsoft PowerPoint - chap2.ppt

微處理機

DPJJX1.DOC

untitled

1 TPIS TPIS 2 2

Microsoft Word - P3.doc

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>


Excel VBA Excel Visual Basic for Application

Microsoft PowerPoint - chap4.ppt

第5章:汇编语言程序设计

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

CH559指令周期.doc

<4D F736F F D DA5BFA6A1C476C1C92DBEC7ACECB8D5A8F728B57BB35D292E646F63>

PowerPoint 簡報

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32--

四川省普通高等学校

R/W

江人发2009年第49号突发事件应对法培训.doc

Microsoft PowerPoint - STU_C_Lang_CH05

Microsoft PowerPoint - chap12.ppt

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

新 闻 学 46 7 新 闻 传 播 学 院 广 告 学 28 4 广 播 电 视 学 23 3 新 闻 学 广 告 学 ). 级 学 生 申 请 准 入 需 修 完 或 正 在 修 2 门 专 业 准 入 课 程 并 取 得 相 应 学 分 ;2). 级 学 生 申 请 准 入 需

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

标题

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

untitled

Avision

If Close[Length]!= 0 Then B Close[Length] 是 Length 日前的 Close 不是 0 的話則執行 B % Number 以 Divisor 來求取除法並傳回剩下的部份和 Divisor 具備相同的符 號 格式 :Number % Divisor Numb

Microsoft Word - 專題封面.doc

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

Microsoft Word - ISSFA-0109_B_SM59264_WDT_ APN_TC_.doc

, 000 3, 0005, ,

单片机学习教程

Microsoft Word - 小心翼翼的二十一點N.doc

CA24064B LED LED LED EL EL CCFL EL CCF /

D/A DAC ( 1us) (10~20 ) DAC0832 1

Microsoft Word - ISSFA-0237_A_SM39R_series_EEPROM_APN_TC_.doc






逢 甲 大 學

instructions.PDF

Microsoft PowerPoint - VB14.ppt

Microsoft PowerPoint - OPVB1基本VB.ppt

12232A LED LED LED EL EL CCFL EL CCF

目 录

» n ¹ú KS0108 x ÍÍÙ q n KS0108 KS KS0107 KS0108 KS *32 128*64 192*64 KS0108 KS0108 KS0107 KS =4096 RAM RAM LCD 2 KS

Microsoft PowerPoint - VB3

大 綱 最 有 利 標 目 的 及 類 型 最 有 利 標 之 辦 理 方 式 準 用 最 有 利 標 取 最 有 利 標 精 神 最 有 利 標 之 類 型 及 其 相 關 規 定 適 用 最 有 利 標 準 用 最 有 利 標 及 取 最 有 利 標 精 神 作 業 程 序 及 實 務 分 析

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc




untitled


除外責任修正條文對照.doc

Ps22Pdf

2

######## First set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else y <- 2 ######## Second set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else ###

电 阻 应 变 式 传 感 器 是 将 被 测 量 的 力, 通 过 它 产 生 的 金 属 弹 性 变 形 转 换 成 电 阻 变 化 的 元 件 由 电 阻 应 变 片 和 测 量 线 路 两 部 分 组 成 电 阻 应 变 片 产 生 的 误 差, 主 要 来 源 于 温 度 的 影 响, 本

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

Microsoft PowerPoint - Chapter4

MSP430 MSP430 F149 MSP430F149 P USART MSP430F PWM 63#

Microsoft PowerPoint - chap7.ppt

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

CC213

投影片 1

Trio Motion Coordinator MC202 mm 94 *56 *107DIN 200g 0~45 / RS232C 9600 CAN 32-bit 1~3 Trio BASIC VB VC C/C bit 1ms 128k 18~29V 150mA 24V 150mA

Transcription:

透析 8051 之分支跳躍與迴圈控制 - 利用 VB 的程式觀念解說 迴圈的控制方法不失為寫程式最重要的技巧之所在之一, 它搭配邏輯運算的判斷作為迴圈繼續執行的判斷依據, 程式設計師必須考量分析所有可能的情況, 然後給予不同的條件, 當條件成立時執行某段程式, 不符合時執行另一段程式, 然後重複某項任務, 直到使用者中斷程式的執行, 或是條件喪失時才跳出迴圈 也可能一個程式重複著無止盡的迴圈, 直到關閉電源為止, 等 有鑑於此, 以下的控制方法, 是程式設計必須學會的 : 如何控制迴圈? 可以使用那些控制迴圈的指令? 邏輯判斷式的表示? 掌控程式流向的方法? 茲特別整理出來相關的指令及範例, 綜合幾種不同的常用作法, 利用高階語言的語法來對照, 透過 VB 的判斷式迴圈控制語法來說明, 相信能給你更方便的學習 8051 的程式寫作, 也因此進一步對學習市面上任何其它種類的微電腦程式語言, 均可以舉一而反三, 靈活應用於程式寫作 VB 語言有關迴圈 邏輯判斷式 分支跳躍及程式呼叫 等語法, 列表說明 VB 指令語法格式說明 Goto GoSub Return : Goto GoSub MyRoutine MyRoutine: Return 無條件的重複執行 呼叫同一 Sub 中的副程式 MyRoutine 副程式返回後繼續執行 GoSub 之後 的陳述式 副程式 ( 與呼叫程序同 Sub) 結束副程式, 返回呼叫程式 If..Then..Else If < 條件 > Then Else End IF 邏輯判斷式, 控制執行路徑 當 < 條件 > 成立, 執行, 否則, 執行 For...Next For i= 初值 To 終值 Step 增量 Next 明確指定變數 i 的初值 終值 增量 控制執行敘述的次數

While While < 條件 > Do While.. Do Until.. Select Case Do While < 條件 > Do While < 條件 > Do Until < 條件 > Do Until < 條件 > Select Case n Case 1 Case 2 End Select 先測試後執行 : 當 < 條件 > 成立, 則重複執行 先測試後執行 : 當 < 條件 > 成立, 則重複執行 先執行後測試 : 先執行, 再判斷是否繼續執行 當 < 條件 > 成立, 則重複執行 先測試後執行 : 當 < 條件 > 不成立, 則重複執行 先執行後測試 : 先執行, 再判斷是否繼續執行 當 < 條件 > 不成立, 則重複執行 多選一當符合條件 1, 執行當符合條件 2, 執行 8051 有關迴圈 邏輯判斷式 分支跳躍及程式呼叫 等語法, 列表說明 8051 指令語法範例說明 JMP JB bit,rel JNB bit,rel JMP LOOP JB BIT1,LOOP1 JNB BIT1,LOOP1 無條件的重複執行 當 BIT1=1, 則跳至 LOOP1, 否則, 執行 BIT1: 凡符合位元定址之位元均屬 之, 如 20h.1,2fh.3,P0.7,PSW.0 (Jmp to LOOP1 if BIT1=1) 當 BIT1=0( 即不為 1), 則跳至 LOOP1, 否則, 執行 (Jmp to LOOP1 if BIT1<>1)

JBC bit,rel JC rel JNC rel JZ rel JNZ rel CJNE data1,data2,rel DJNZ data1,rel JBC BIT1,LOOP1 JC LOOP1 JNC LOOP1 JZ LOOP1 JNZ LOOP1 CJNE A,#01,LOOP1 DJNZ R0,LOOP 當 BIT1=1, 則跳至 LOOP1, 執行, 並清除此 bit 為 0 否則, 執行 (Jmp to LOOP1 if BIT1=1,Clear BIT1) 運算後, 當進位旗標 C=1, 則跳至 LOOP1 否則, 執行 (Jmp to LOOP1 if C=1) 運算後, 當沒有進位時,C=0( 即不為 1), 則跳至 LOOP1 否則, 執行 (Jmp to LOOP1 if C<>1) 運算後, 當零旗標 Z=1, 則跳至 LOOP1 否則, 執行 (Z=1 表示運算結果使 ACC=0) Z 旗標只對 ACC 判斷 (Jmp to LOOP1 if Z=1) 運算後, 當零旗標 Z=0, 則跳至 LOOP1 否則, 執行 (Z=1 表示運算結果使 ACC=0) (Jmp to LOOP1 if Z<>1) 比較 (Compare) 兩值是否不相等, 當 ACC 的值不等於 1, 則跳至 LOOP1 執行, 否則, 執行 data1: 可以是 A Rn 或 @Ri data2: 可以是 #data,direct (jmp to LOOP1 if ACC<>#01) R0=R0-1, 並判斷是否為 0, 當 R0<>0, 跳回 LOOP 繼續執行 否則, 往下執行 data1: 可以是 Rn direct (R0=R0-1, jmp to LOOP if R0<>0)

8051 與 VB 之相似對照範例 項目 8051 VB 說明 1 2 P0=A INC A MOV A,R0 SUBB A,#10 JC MyRoutine Next: P0=A JMP Other MyRoutine: INC A JMP Next Other: 3 JB BIT1,S1 JMP S2 S1: ACALL SUB1 JMP Next S2: ACALL SUB2 Next: Sub1() Print A GOTO LOOP If N<10 Then GoSub MyRoutine Print N Exit Sub MyRoutine: N = N+1 Return End Sub IF BIT1=1 THEN CALL SUB1 ELSE CALL SUB2 ENDIF 無條件跳躍 無盡迴圈 當 A-10 產生借位 (C=1) 則表示變數值小於 10 狀況一 : 當 N<10, 則執 行副程式 N+1 後返回並 輸出 狀況二 : 若 N>=10, 則 直接輸出 當 BIT=1, 跳 S1 否則, 跳 S2 副程式呼叫 SUB1 返回後跳 Next 繼續向下 執行 副程式呼叫 SUB2 4 SUBB A,#1 JZ S1 JMP S2 S1: ACALL SUB1 JMP Next S2: ACALL SUB2 Next: ACC=ACC-1 IF ACC=0 THEN CALL SUB1 ELSE CALL SUB2 ENDIF JZ 指令 : 判斷 ACC 是否為 0 是, 則零旗標 Z=1, 跳 S1, 呼叫副程式 1 否則, 跳 S2, 呼叫副程式 1 5 MOV R0,#10 INC A DJNZ R0,L1 FOR I=1 TO 10 NEXT R0 訂定迴圈次數 =10 次 以 DJNZ 遞減 1 後判斷是 否為 0

6 MOV R0,#0 MOV A,#0 ADD A,R0 INC R0 INC R0 CJNE R0,#22,L1 MOV P0,A 7 MOV R0,#20 MOV A,#0 ADD A,R0 DEC R0 DJNZ R0,L1 MOV P0,A 8 CLR C JC L2 ADD A,#1 L2: MOV P0,A 9 CLR C JNC L2 JMP L3 L2: ADD A,#1 L3: MOV P0,A 10 MOV R1,#2 CJNE R1,#1,L2 MOV P0,#1 L2: CJNE R1,#2,L3 MOV P0,#2 L3: CJNE R1,#3,L4 MOV P0,#3 L4: 11 BIT1 EQU 20H.0 CLR BIT1 CPL BIT1 N=0 Sum=0 While N<=20 Sum=Sum+N N=N+2 Print Sum N=0 Sum=0 Do While N<=20 Sum=Sum+N N=N+2 Print Sum C=0 DO While C=0 IF A>255 THEN C=1 LOOP Print A C=0 Do Until C=1 IF A>255 THEN C=1 Print A Select Case n Case 1 Print 1 Case 2 Print 2 Case 3 Print 3 End Select Dim BIT1 As Boolean BIT1=False While (1) BIT1=Not BIT1 變數 N=0 總和 =0 計算 Sum=2+4+6+ 20 用 CJNE 判斷已執行迴圈數 注意 :( 先加 2 後判斷 ) 與 ( 先判斷後加 2) 之區別與上一項目同功能, 唯作法不同 用 DJNZ 判斷已執行迴圈數 VB: 以 Do While 完成相同的功能 8051 為 8 位元, 當 ACC 超過 255=256 時, 使進位旗標 C=1, 並使 ACC=0 以 JC 是否進位判斷迴圈之執行 功能同上 以 JNC 判斷, 直到產生進位為止 VB: 以 Do Until 完成相同的功能多選一判斷式 : 當 R1=1, 輸出 1 當 R1=2, 輸出 2 當 R1=3, 輸出 3 定義布林數 ( 位元定址 ) 初值設定無盡迴圈反相

L2: JNB BIT1,L2 MOV P0,#0H Call Delay MOV P0,#0FFH Call Delay1s IF BIT1 THEN ACC= 00h Else ACC= FFh End If Label1=ACC Call Delay1s 當 BIT1=True 輸出 00 當 BIT1=False 輸出 FF 輸出, 並延時 1 秒 12 MOV A,#0 JB ACC.0,L1 MOV P0,#00H JMP L2 MOV P0,#0FFH L2: INC A CALL Delay JMP LOOP A=0 While (1) IF A MOD 2=0 THEN ACC= 00h Else ACC= FFh End if Label1=ACC Call Delay1s 初值設定無盡迴圈當 A= 偶數, 輸出 00 當 A= 奇數, 輸出 FF ( 偶數 : 最低位元 LSB=0) ( 奇數 : 最低位元 LSB=1) 輸出, 並延時 1 秒