امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
زيربرنامه وتابع
نویسنده پیام
dream آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 1
تاریخ عضویت: مرداد ۱۳۸۸

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
زيربرنامه وتابع
ميخواستم در زيربرنامه و تابع و نحوه ي بكاربردن متغيرها در ان به طور كاملا جز به جز توضيح دهيد(بسكام)از روي جزوه اينجا و كتاب خوندم ولي متوجه نشدم .لطفا چنتا مثال هم بزنيد
۰۷-شهریور-۱۳۸۸, ۲۳:۱۵:۴۴
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #2
RE: زيربرنامه وتابع
مهندس این کتاب رو بگیر : http://forum.iranled.com/showthread.php?tid=10869
راهنمایی های خوبی کرده !
بعدا قسمت هایی از اون کتاب تو این ضمینه رو می ذارم !
۰۸-شهریور-۱۳۸۸, ۰۲:۲۱:۱۱
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #3
RE: زيربرنامه وتابع
دستور ات حلقه و پرش :
گاهی نیاز است که یک قسمت از برنامه چندین بار اجرا شود یا در حین اجرای برنامه در یک خط به خط دیگری رجوع شود، برای این کار از دستورات حلقه و پرش که چندین نوع است ، استفاده میشود .

انواع دستورات حلقه و پرش:

> دستور 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 
End 

مثال

کد php:
"regfile = "m16def.dat
crystal 12000000
Config Porta Output 
Q
Set Porta.0 
WAitms 600 
Reset Porta.0 
Waitms 600 
Goto 
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
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۸:۳۵، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۲۲:۴۸
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #4
RE: زيربرنامه وتابع
دستور ON var:

این دستور به فرم کلی زیر است:

کد php:
ON var [GOTO] [GOSUBlabel1 [, 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 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 W
End
Q
:
Set Porta.0
Incr S
Goto A
W
:
Set Porta.1
Goto 

در مثال های بالا ، در اول کار مقدار s صفر است پس به پرچسب اول پرش شده و پورت a.0 یک میشود ، بعد از این عمل دوباره به حلقه اصلی پرش میشود و به s یک واحد افزوده میشود ، s برابر با 1 میشود ، پس به پرچسب دوم پرش میشود در انجا پورت...

منبع : http://forum.iranled.com/showthread.php?tid=10869
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۵:۰۶، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۲۴:۰۳
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #5
RE: زيربرنامه وتابع
>>زیر برنامه ها و فراخوانی توابع

>معرفی تابع 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 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Declare Function Myfunction (Byval I As Integer As String )As Integer 
Dim K 
As Integer As String*10As Integer 
"123 " Myfunction(Z
LocAte 1 
Lcd T                                                       
'25 
Locate 1 , 7 
Lcd Z                                                       '
Bascom 
Locate 2 

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
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۵:۲۲، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۲۶:۳۹
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #6
RE: زيربرنامه وتابع
>معرفی زیر برنامه DECLARE SUB :

از این دستور برای معرفی زیر برنامه استفاده می شود . زیر برنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .

کد 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 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Dim A 
As Byte B1 As Byte As Byte 
Declare Sub Test As Byte
=B1 
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
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۵:۳۹، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۲۷:۵۴
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #7
RE: زيربرنامه وتابع
>تابع فراخوانی CALL :

توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنیم .

کد php:
CALL TESTVAR1 VAR2,....) 

VAR1 , VAR2 متغیرهایی که به زیر برنامه انتقال می یابند , هستند . می توان زیر برنامه را بصورت زیر نیز فراخوانی کرد .

کد php:
TEST VAR1 VAR2 

لازم بتذکر است که نام زیر برنامه قبل از فراخوانی آن , باید توسط دستور Declare فراخوانی شود. اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما با آرگومان BYVAL آن را انتقال دهیم .

کد php:
"regfile = "m16def.dat
crystal 12000000
Config Lcd 16 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Dim A 
As Byte As Byte 
Declare Sub Test B1 As Byte Byval B2 As Byte
=65 
Call Test 
5
Test A 
Locate 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
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۵:۵۶، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۲۹:۵۱
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #8
RE: زيربرنامه وتابع
>بکارگیری متغیر محلی یا LOCAL :

از این دستور برای تعریف متغیر محلی در زیربرنامه استفاده می کنیم .

کد 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 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 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
(آخرین ویرایش در این ارسال: ۰۸-شهریور-۱۳۸۸, ۰۲:۳۶:۰۸، توسط t3r!p3000.)
۰۸-شهریور-۱۳۸۸, ۰۲:۳۱:۳۳
ارسال‌ها
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS