سلام يه پروژه ساعت رو سون سگمنت از يه سايت گرفتم.تو تحليلش كمي مشكل دارم.كسي ميتونه تحليلش كنه؟؟.اين ساعت فقط دقيقه و ساعت رو نشون ميده چيكارش كنم كه ثانيه رو هم نشون بده؟؟(همه اينا روي سون سگمنت بايد باشه)
فايل بسكام اونو ميذارم
سلام يه پروژه ساعت رو سون سگمنت از يه سايت گرفتم.تو تحليلش كمي مشكل دارم.كسي ميتونه تحليلش كنه؟؟.اين ساعت فقط دقيقه و ساعت رو نشون ميده چيكارش كنم كه ثانيه رو هم نشون بده؟؟(همه اينا روي سون سگمنت بايد باشه)
فايل بسكام اونو ميذارم
يكي نيست به داد ما برسه؟؟من توي دستورات زير مشكل دارم چون تا حالا باهاشون كار نكردم.
$hwstack = 64
$swstack = 64
$framesize = 64
Declare Sub Keyscan
Declare Sub Refresh
Declare Sub Send
Declare Sub Wait4key
Declare Sub Blink_sec
Call Keyscan
Call Refresh
Call Blink_se
و اينكه سير نشون دادن اين ساعت چطوريه.يعني ميكرو به چه شكلي با اين دستورات كار ميكنه
در مورد سه دستور زیر اینجا توضیح دادم.
$hwstack = 64
$swstack = 64
$framesize = 64
بقیه هم دستور مجزایی نیستن بلکه توسط دستور Declare توابعی تعریف میشن و بعدا در طول برنامه هرجا که لازم بود توسط دستور Call فراخوانی میشن.
کامپایلر بسکام برای پروژه ی ساعت و تاریخ یه سری دستورات خاص داره مثل time، $date$ و ... که برای اینکه بفهمید چطور کار می کنن باید به کتابخونه ی بسکام مراجعه کنید که به زبان اسمبلی هست.
در برنامه ای که گذاشتید سیر نشون دادن ساعت بسته به نظر برنامه نویس هست.
.
اين برنامه چطور عدد رو روي سون سگمنت نشون ميده؟؟مثل جدول lookup مقدارهايي رو براي خروجي تعيين كرده ولي من lookup توي اين برنامه نميبينم.وسوال دومم اينه كه دستور sub - end sub چيكار ميكنه و براي چي به كار ميره مثل برنامه زير
Sub Keyscan
If Hour_key = 0 Then
Incr _hour
If _hour > 23 Then _hour = 0
Call Wait4key
End If
If Min_key = 0 Then
Incr _min
If _min > 59 Then _min = 0
Call Wait4key
End If
End Sub
ویرایش توسط vahidasm : 20-04-2010 در ساعت 03:04
يكي نبود به داد ما برسه؟؟؟
دوستان خيييييييييييلي احتياجش دارم خيلي حياتيه
سلام دوست عزیز اگه میشه فایل پروتوس یا شماتیک مدار راهم بزارید.
من برنامه را براتون تصحیح کردم حالا ثانیه را هم نشون میده.اما شما لطف کنید اگه میشه شماتیک را بزارید.
خيييييييييييييييييييييييي يييييي ......ييييلي ممنون.اينم فايل
برنامه رو ديدم شبيه سازيش هم كردم خيلي عاليه دستتون درد نكنه بلاخره بعد از سه چهار روز يكي جواب ما رو داد. فقط يه سوال.اين برنامه چطور ساعت رو روي سون سگمنت نشون ميده؟؟من فقط مقادير رو براي خروجي مثل دستور lookup ميبينم ولي lookup تو اين برنامه نميبينم.بازم ممنون فايلي كه تو پست 9 گذاشتم مربوط به همون قديميه هست چند دقيقه ديگه فايل شبيه سازي شده همين برنامه كه شما زحمتش رو كشيديد ميذارم(بايد كمي جمع و جورش كنم)
اينم فايل شبيه سازي شده اصلي.
ممنون قابلی نداشت.
به این قسمت برنامه نگاه کن:
Sub Refresh
Comm = &B100000 : Dp = 0 : Temp = _hour \ 10 : Call Send
Comm = &B010000 : Dp = 1 : Temp = _hour Mod 10 : Call Send
Comm = &B001000 : Dp = 0 : Temp = _min \ 10 : Call Send
Comm = &B000100 : Dp = 0 : Temp = _min Mod 10 : Call Send
Comm = &B000010 : Dp = 0 : Temp = _sec \ 10 : Call Send
Comm = &B000001 : Dp = 0 : Temp = _sec Mod 10 : Call Send
End Sub
درخط اول دستور comm==&b100000 پایه مشترک سون سگمنت مربوط به دهگان ساعت را فعال می کند.dp=0 مربوط به led چشمک زن هست.
Temp = _hour \ 10 عدد ساعت را تقسیم بر 10 می کند و داخل متغیر temp قرار می دهد چون متغیر temp از نوع بایت تعریف شده فقط قسمت صحیح عدد که همان دهگان می شود در ان قرار می گیرد.call send زیر برنامه send را فراخوانی می کند.
Sub Sendدر این زیر برنامه دستور lookup به برچسب segdata پرش میکند و با توجه به مقدار متغیر temp مقدار باینری not شده(چون سون سگمنت اند مشترک است)عدد temp را داخل dataport قرار می دهد که dataport در اول برنامه به پورت b نسبت داده شده بنابراین این عدد بر روی portb قرار میگیرد.قسمت بعدی این زیر برنامه مربوط به led هست که از توضیح ان میگذریم.بعد از گذشت 4 میلی ثانیه دستور Dataport = &HFF اجرا میشود که باعث خاموش شدن همه ی سون سگمنت ها می شود این عمل برای جلوگیری از تداخل در نمایش اعداد انجام می شود.با دستور end sub به زیر برنامه Refresh باز می گردیم.
Dataport = Lookup(temp , Segdata)
If Dp = 1 Then
Portd.7 = S
Else
Portd.7 = 1
End If
Waitms 4
Dataport = &HFF
End Sub
حال خط دوم اجرا می شود این بار سون سگمنت مربوط به یکان ساعت فعال می شود.و توسط دستور Temp = _hour Mod 10 که باقیمانده عدد ساعت تقسیم بر 10 را به temp بر می گرداند رقم یکان جدا می شود.و با پرش به زیر برنامه send عملیات بالا تکرار می شود.
امیدوارم تونسته باشم مطلب را بیان کنم.
ممنون.عاااااااااليه فك كنم فهميدم كه چي شد :d