۰۷-شهریور-۱۳۸۸, ۲۳:۱۵:۴۴
۰۸-شهریور-۱۳۸۸, ۰۲:۲۱:۱۱
مهندس این کتاب رو بگیر : http://forum.iranled.com/showthread.php?tid=10869
راهنمایی های خوبی کرده !
بعدا قسمت هایی از اون کتاب تو این ضمینه رو می ذارم !
راهنمایی های خوبی کرده !
بعدا قسمت هایی از اون کتاب تو این ضمینه رو می ذارم !
۰۸-شهریور-۱۳۸۸, ۰۲:۲۲:۴۸
دستور ات حلقه و پرش :
گاهی نیاز است که یک قسمت از برنامه چندین بار اجرا شود یا در حین اجرای برنامه در یک خط به خط دیگری رجوع شود، برای این کار از دستورات حلقه و پرش که چندین نوع است ، استفاده میشود .انواع دستورات حلقه و پرش:
> دستور goto :
label:
برنامه
Goto label
با این دستورات می توان به برچسب label پرش کرد .برچسب label باید با علامت : (colon) پایان یابد و می تواند تا 32 کارکتر طول داشته باشد .
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Porta = Output
: Q
Set Porta.0
WAitms 600
Reset Porta.0
Waitms 600
Goto q
End
مثال
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Porta = Output
: Q
Set Porta.0
WAitms 600
Reset Porta.0
Waitms 600
Goto Q
End
دستور GOSUB :
با این دستور میتوان به یک برپسب پرش کرد ، باز گشت ار پرچسب با دستور return انجام میشود ، این دستور به فرم کلی زیر است:
GOSUB label
Label:
برنامه
Return
مثال:
کد php:
$regfile = "m16def.dat"
$crystal = 12000000
Config Porta = Output
E
Do
Gosub Q
Set Porta.0
WAitms 600
Loop
End
Q:
Reset Porta.0
Waitms 600
Return
منبع : http://forum.iranled.com/showthread.php?tid=10869
۰۸-شهریور-۱۳۸۸, ۰۲:۲۴:۰۳
دستور ON var:
این دستور به فرم کلی زیر است:
در این دستور به ازای متغیر var به برچسب nم پرش میشود ، مثلا اگر var=2 باشد به پرچسب سوم پرش میشود ( تعداد برچسب ها نامحدود است ( بستگی به حافظه میکرو دارد) . در صورتی که از دستور gosub استفاده کنیدباز گشت از زیر برنامه (برچسب) با دستور return انجام میشود و در صورت استفده از goto باید به حلقه اصلی پرش کرد کع شما میتوانید از دستور goto یا دیگر دستورات استفاده کنید . مثال با دستور gosub:
در مثال های بالا ، در اول کار مقدار s صفر است پس به پرچسب اول پرش شده و پورت a.0 یک میشود ، بعد از این عمل دوباره به حلقه اصلی پرش میشود و به s یک واحد افزوده میشود ، s برابر با 1 میشود ، پس به پرچسب دوم پرش میشود در انجا پورت...
منبع : http://forum.iranled.com/showthread.php?tid=10869
این دستور به فرم کلی زیر است:
کد php:
ON var [GOTO] [GOSUB] label1 [, label2 ] [,CHECK]
در این دستور به ازای متغیر var به برچسب nم پرش میشود ، مثلا اگر var=2 باشد به پرچسب سوم پرش میشود ( تعداد برچسب ها نامحدود است ( بستگی به حافظه میکرو دارد) . در صورتی که از دستور gosub استفاده کنیدباز گشت از زیر برنامه (برچسب) با دستور return انجام میشود و در صورت استفده از goto باید به حلقه اصلی پرش کرد کع شما میتوانید از دستور goto یا دیگر دستورات استفاده کنید . مثال با دستور gosub:
کد php:
$regfile = "m16def.dat"
$crystal = 12000000
Config Porta = Output
Dim S As Byte
Do
On S Gosub Q , W , E , R , T , Y , U , I
Incr S
Wait 1
Loop
End
Q:
Set Porta.0
Return
W:
Set Porta.1
Return
E:
Set Porta.2
Return
R:
Set Porta.3
Return
T:
Set Porta.4
Return
Y:
Set Porta.5
Return
U:
Set Porta.6
Return
I
Set Porta.7
Return
[/quote]
مثال با دستور goto:
[quote]
$regfile = "m16def.dat"
$crystal = 12000000
Config Porta = Output
Dim S As Byte
A:
Wait 1
On S Goto Q , W
End
Q:
Set Porta.0
Incr S
Goto A
W:
Set Porta.1
Goto A
در مثال های بالا ، در اول کار مقدار s صفر است پس به پرچسب اول پرش شده و پورت a.0 یک میشود ، بعد از این عمل دوباره به حلقه اصلی پرش میشود و به s یک واحد افزوده میشود ، s برابر با 1 میشود ، پس به پرچسب دوم پرش میشود در انجا پورت...
منبع : http://forum.iranled.com/showthread.php?tid=10869
۰۸-شهریور-۱۳۸۸, ۰۲:۲۶:۳۹
>>زیر برنامه ها و فراخوانی توابع
>معرفی تابع DECLARE FUNCTION
از این دستور برای معرفی تابع در ابتدای برنامه استفاده می شود . زمانی که بخواهیم تابعی را معرفی کنیم بایستی تابع معرفی شده باشد . در صورت استفاده از تابع می بایستی یک داده برگردانده شود .
کد php:
DECLARE FUNCTION TEST[( [BYREF/BYVAL]var as type1)] As type2
TEST نام تابع موردنظر است . انتقال داده بصورت BYVAL باعث می شود که یک کپی از متغیر به تابع فرستاده شود و در محتوای آن هیچ تغیری ایجاد نشود .ولی در حالت BYREF آدرس متغیر ارسال و تغیرات در آن اثر می گذارد و داده برگشتی در صورت انجام عملیات بر روی آن با مقدار اولیه خود برابر نخواهد بود . در صورت عدم استفاده از گزینه [BYREF/BYVAL] بصورت پیش فرض داده بصورت BYREF فرستاده می شود. Type1 نوع داده ارسال شده وtype2 نوع داده برگشتی است . که هر دو می توانند داده نوع BYTE , INTEGER, WORD , LONG ,STRING باشند .
مثال :
در مثال زیر I بصورت BYVAL فرستاده شده است بنابراین یک کپی از مقدار I به زیر تابع فرستاده می شود و هیچ تغیری در محتوای آن ایجاد نمی شود. S بصورت BYREF فرستاده می شود و تغیر در آن صورت می گیرد .فراخوانی تابع MYFUNCTION باK و Z از نوع داده INTEGER و STRING است و مقدار برگشتی از نوع INTEGER است که در متغیر T قرار می گیرد . شما می توانید در محدوده تابع یک متغیر محلی تعریف کنید .
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Declare Function Myfunction (Byval I As Integer , S As String )As Integer
Dim K As Integer , Z As String*10, T As Integer
K = 5 : Z = "123 " : T = Myfunction(k , Z)
LocAte 1 , 1
Lcd T '25
Locate 1 , 7
Lcd Z 'Bascom
Locate 2 , 1
Lcd K '5
End
Function Myfunction (Byval I As Integer , S As String )As Integer
local P As Integer
Functions:
P = I * 5
I = 5
S = "Bascom”
T = P
Myfunction = T
End Function
منبع : http://forum.iranled.com/showthread.php?tid=10869
۰۸-شهریور-۱۳۸۸, ۰۲:۲۷:۵۴
>معرفی زیر برنامه DECLARE SUB :
از این دستور برای معرفی زیر برنامه استفاده می شود . زیر برنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .
زیر برنامه برخلاف تابع مقداری برنمی گرداند .در زمان ارسال داده بصورت BYREF آدرس داده به زیر برنامه فرستاده می شود و در محتوای آن تغیر ایجاد می شود .ولی در حالت BYVAL یک کپی از داده فرستاده می شود و به هیچ وجه در محتوای آن تغیری ایجاد نمی شود .TEST نام زیربرنامه و VAR نام متغیر ارسالی به زیر برنامه و TYPE نوع آن است که می تواند داده نوع BYTE , INTEGER, WORD ,STRING باشند .
برای نوشتن زیر برنامه ابتدا نام آنرا توسط دستور زیر تعریف کرده و سپس شروع به نوشتن زیربرنامه می کنیم .
NAME نام زیربرنامه که باید توسط دستور Declare معرفی شده باشد و با دستور End Subپایان می یابد .
منبع : http://forum.iranled.com/showthread.php?tid=10869
از این دستور برای معرفی زیر برنامه استفاده می شود . زیر برنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .
کد php:
DECLARE SUB TEST[( [BYREF/BYVAL] var as type)]
زیر برنامه برخلاف تابع مقداری برنمی گرداند .در زمان ارسال داده بصورت BYREF آدرس داده به زیر برنامه فرستاده می شود و در محتوای آن تغیر ایجاد می شود .ولی در حالت BYVAL یک کپی از داده فرستاده می شود و به هیچ وجه در محتوای آن تغیری ایجاد نمی شود .TEST نام زیربرنامه و VAR نام متغیر ارسالی به زیر برنامه و TYPE نوع آن است که می تواند داده نوع BYTE , INTEGER, WORD ,STRING باشند .
برای نوشتن زیر برنامه ابتدا نام آنرا توسط دستور زیر تعریف کرده و سپس شروع به نوشتن زیربرنامه می کنیم .
کد php:
SUB Name [ ( var1) ]
NAME نام زیربرنامه که باید توسط دستور Declare معرفی شده باشد و با دستور End Subپایان می یابد .
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte , B1 As Byte , C As Byte
Declare Sub Test ( A As Byte)
A =1 : B1 = 2 : C = 3
Lcd A ; B1 ; C '123 will print
Call Test (B1)
End
Sub Test(a As Byte)
Locate 2 , 1
Lcd A ; B1 ; C '123 will print
End Sub
منبع : http://forum.iranled.com/showthread.php?tid=10869
۰۸-شهریور-۱۳۸۸, ۰۲:۲۹:۵۱
>تابع فراخوانی CALL :
توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنیم .
VAR1 , VAR2 متغیرهایی که به زیر برنامه انتقال می یابند , هستند . می توان زیر برنامه را بصورت زیر نیز فراخوانی کرد .
لازم بتذکر است که نام زیر برنامه قبل از فراخوانی آن , باید توسط دستور Declare فراخوانی شود. اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما با آرگومان BYVAL آن را انتقال دهیم .
منبع : http://forum.iranled.com/showthread.php?tid=10869
توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنیم .
کد php:
CALL TEST( VAR1 , VAR2,....)
VAR1 , VAR2 متغیرهایی که به زیر برنامه انتقال می یابند , هستند . می توان زیر برنامه را بصورت زیر نیز فراخوانی کرد .
کد php:
TEST VAR1 , VAR2
لازم بتذکر است که نام زیر برنامه قبل از فراخوانی آن , باید توسط دستور Declare فراخوانی شود. اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما با آرگومان BYVAL آن را انتقال دهیم .
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte , B As Byte
Declare Sub Test ( B1 As Byte , Byval B2 As Byte)
A =65
Call Test ( A , 5)
Test A , 5
Locate 1 , 1
lcd A ' will print A = 10
End
Sub Test(b1 As Byte , Byval B2 As Byte)
B1 = 10
B2 = 15
Locate 1 , 8
Lcd B1
Locate 2 , 1
Lcd B2
End Sub
منبع : http://forum.iranled.com/showthread.php?tid=10869
۰۸-شهریور-۱۳۸۸, ۰۲:۳۱:۳۳
>بکارگیری متغیر محلی یا LOCAL :
از این دستور برای تعریف متغیر محلی در زیربرنامه استفاده می کنیم .
VAR نام متغیر و type نوع داده است که می توانند STRING , WORD , INTEGER , BYTE , SINGLE , LONG باشند نوع داده های ERAM , SRAM , XRAM و آرایه ها نمی توانند محلی تعریف شوند.
یک متغیر محلی یک متغیر موقت است که فقط در هنگام فراخوانی زیر برنامه مربوطه برای آن فضا در نظر گرفته می شود و با برگشت از زیر برنامه عمر متغیر (LIFE TIME ) به اتمام می رسد .
تذکر متغیرهای بیتی نمی توانند بصورت محلی تعریف شوند .مانند
منبع : http://forum.iranled.com/showthread.php?tid=10869
از این دستور برای تعریف متغیر محلی در زیربرنامه استفاده می کنیم .
کد php:
LOCAL VAR As Type
VAR نام متغیر و type نوع داده است که می توانند STRING , WORD , INTEGER , BYTE , SINGLE , LONG باشند نوع داده های ERAM , SRAM , XRAM و آرایه ها نمی توانند محلی تعریف شوند.
یک متغیر محلی یک متغیر موقت است که فقط در هنگام فراخوانی زیر برنامه مربوطه برای آن فضا در نظر گرفته می شود و با برگشت از زیر برنامه عمر متغیر (LIFE TIME ) به اتمام می رسد .
تذکر متغیرهای بیتی نمی توانند بصورت محلی تعریف شوند .مانند
کد php:
"regfile = "m16def.dat$
crystal = 12000000$
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Declare Sub Test2
Do
Call test2
Loop
End
Sub Test2
Local A As Byte
Incr A
Lcd A
End Sub
منبع : http://forum.iranled.com/showthread.php?tid=10869