ايران ويج

نسخه‌ی کامل: مشکل در اجرای مجدد برنامه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Portd.0 
Output
Config Portd.1 
Output
Config Portd.2 
Output
Config Pinc.0 
Input
Config Pinc.1 
Input
Config Pinc.2 
Input
Config Pinc.3 
Input
Config Pinc.4 
Input
Config Pinc.5 
Input
Config Pinc.6 
Input
Config Pina.0 
Input
Starts Alias Pinc.0
Stops Alias Pinc.1
Menu Alias Pinc.2
Incr_b Alias Pinc.3
Decr_b Alias Pinc.4
Swup Alias Pinc.5
Swdown Alias Pinc.6
Jack Alias Portd.0
Role Alias Portd.1
Heater Alias Portd.2
Portd 
= &B11111000
Portc 
= &B01111111
'////////////////////////////ADC Configuration////////////////////////////
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Stop Adc : Start Adc
'
////////////////////////////Timer Configuration//////////////////////////
Config Timer0 Timer Prescale 1
Enable Interrupts
Enable Timer0
On Timer0 Total
Timer0 
0
Stop Timer0
Start Timer0
'///////////////////////////////Interrupts////////////////////////////////
Config Int0 = Falling
Enable Int0
On Int0 Halt
'
///////////////////////////////Variables/////////////////////////////////
Dim Jack_delay As Word
Dim Role_delay 
As Word
Dim Set_point 
As Byte
Dim Quantity 
As Word
Dim Temp 
As Word
Dim Sum 
As Word
Dim Ave 
As Single
Dim 
Final As Single
Dim Steps 
As Byte
Dim Change 
As Byte
Dim A 
As Byte
Dim B 
As Byte
Dim Temp_1 
As String 3
'////////////////////////////////////////////////////////////////////////
Cls : Cursor Off : Delay
Reset Jack : Reset Role : Reset Heater

Do
Home
Lcd "jack= " ; Jack_delay ; "  "
Locate 2 , 1
Lcd "Role= " ; Role_delay ; "  "
Locate 1 , 10
Lcd "No= " ; Quantity ; "   "
Locate 2 , 10
Lcd "Temp= " ; Final ; "  "

      If Starts = 0 And Swup = 0 Then
             Set Jack
             Bitwait Swdown , Reset
             Waitms Jack_delay
             Reset Jack
             Bitwait Swup , Reset
             Set Role
             Waitms Role_delay
             Reset Role
             Decr Quantity
       End If

Loop Until Stops = 0



Total:
Incr Steps
Select Case Steps

Case 1:


Case 2:
Stop Timer0 : Timer0 = 0
Incr Change
Temp = Getadc(0)
Stop Adc : Sum = Sum + Temp
If Change = 100 Then
Ave = Sum / 100
Final = Ave * 2.53
Final = Round(final)
Change = 0
Sum = 0
End If
Start Adc : Start Timer0

Case 3:
Stop Timer0 : Stop Adc : Timer0 = 0
If Menu = 0 Then
Incr A : Waitms 5
      If A = 100 Then
      Cls : Locate 1 , 6 : Lcd "SETTINGS" : Lcd " " : Waitms 300 : Cls
      Do
          Home : Lcd "Jack Delay= " ; Jack_delay : Lcd " " : Waitms 300
          If Incr_b = 0 Then : Jack_delay = Jack_delay + 10 : Delay : End If
          If Decr_b = 0 Then : Jack_delay = Jack_delay - 10 : Delay : End If
       Loop Until Menu = 0
       Writeeeprom Jack_delay , 1
       Waitms 35
      Cls
      Do
         Home : Lcd "Role Delay= " ; Role_delay : Lcd " " : Waitms 300
         If Incr_b = 0 Then : Role_delay = Role_delay + 10 : Delay : End If
         If Decr_b = 0 Then : Role_delay = Role_delay - 10 : Delay : End If
      Loop Until Menu = 0
      Writeeeprom Role_delay , 2
      Waitms 35
      Cls
      Do
         Home : Lcd "Temp= " ; Set_point ; "C'" : Lcd " " : Waitms 300
         If Incr_b = 0 Then : Set_point = Set_point + 10 : Delay : End If
         If Decr_b = 0 Then : Set_point = Set_point - 10 : Delay : End If
      Loop Until Menu = 0
      Writeeeprom Set_point , 3
      Waitms 35
      Cls
      Do
         Home : Lcd "
No" ; Quantity ; "   " : Lcd " " : Waitms 300
         If Incr_b = 0 Then : Quantity = Quantity + 5 : Delay : End If
         If Decr_b = 0 Then : Quantity = Quantity - 5 : Delay : End If
      Loop Until Menu = 0
      Writeeeprom Quantity , 4
      Waitms 35
      A = 0
      End If
      Else
      A = 0
      End If
      Steps = 0
      Start Timer0 : Start Adc
End Select

Return


Halt:
Reset Jack
Reset Role
Reset Heater
Return 
با سلام برنامه بالا زمانی که برنامه در حلقه اصلی در حال اجراست وقتی به bitwait میرسه منتظره میشه پایه ورودی مورد نظر ریست بشه ولی در این زمان وقتی وقفه0 اجرا میشه برنامه به حالت stop کامل در میاد اما ولی برای شروع مجدد باید حتما پایه مورد نظر ریست شده باشه .
دلیلش چیه؟
سلام

منظورتون از استاپ كامل چيه ؟
وقتي روي خط bitwait مي رهه به وقفه و برمي گردهه ، بايد روي خط bitwait دوبارهه برگردهه ، درسته ؟
اين اتفاق نمي يفته ؟
سیکل کاری برنامه به این صورت که اگر Sw-up وصل باشه و دکمه استارت فشرده شده باشه جک فعال شده تا زمانی که SW-down وصل بشه یه مدت زمانی صبر میکه
و جک غیر فعال شده و تازمانی که SW-up وصل بشه در این زمان Role فعال شده وسپس غیر فعال میشود و دوباره همین سیکل تکرار میشود. در صورتی که در هر مرحله از سیکل برنامه دکمه STOP فشرده بشه برنامه متوقف شده و برای شروع مجدد باید تو اون مرحله مربوط به bitwait فعال بشه تا اجرا برنامه امکان پذیر باشه ، من میخوام زمانی که کلید استاپ فشرده میشه بتونم برنامه رو دوباره از اول اجرا کنم.
AngryAngryAngryAngryAngryAngryAngryAngryAngryAngryAngryAngryAngryAngry

[attachment=7169]
مهندس دقيقا متوجه توضيحاتت نمي شم و برنامه ات رو هم نمي تونم خط به خط بخونم ...
دقيقا جايي رو كه مشكل داري رو گويا توضيح بدهه ! فرايند كل برنامه رو نمي خواد بگي .
مثلا : شما مي خواي برنامه در اون قسمت خاص ، اين جور اجرا بشه ، اما برنامه فلان جور اجرا مي شه ...
وقتی برنامه به این قسمت میرسه Bitwait Swdown , Reset و من میخوام دستگاه به هر دلیلی متوقفش کنم وقفه مربوط به INT0 رو اجرا میکنم خروجی ها همه ریست شده و وقتی که دوباره دکمه start میزنم طبیعتا باید خروجی jack فعال بشه اما برنامه تو این قسمت منتظر Bitwait Swdwon ,resetمیشه من میخوام زمانی که این اتفاق میفته بتونم استارت کنم.
اون برنامه خودمو یک بار اجرا کن زمانی که SW-up وصل Start بزن بعدش دکمه Stop بزن حالا دوباره دکمه Start بزن متوجه میشی که خروجی جک فعال نمیشه .البته قبلش باید دکمه منو رو برای 5 ثانیه نگهداری تا وارد تنظیمات بشی برای وارد شدن به هر مرحله همون دکمه menu رو بزن بعدش برنامه رو اجرا کن.
امیدوارم منظورمو متوجه شده باشی.
نقل قول: وقتی برنامه به این قسمت میرسه Bitwait Swdown , Reset و من میخوام دستگاه به هر دلیلی متوقفش کنم وقفه مربوط به INT0 رو اجرا میکنم خروجی ها همه ریست شده و وقتی که دوباره دکمه start میزنم طبیعتا باید خروجی jack فعال بشه اما برنامه تو این قسمت منتظر Bitwait Swdwon ,resetمیشه من میخوام زمانی که این اتفاق میفته بتونم استارت کنم.

آهان ... ، خوب توي اولين پستم هم همين رو پرسيدهه بودم ديگه ... !
همون موقع مي گفتي آرهه ، انقدر انرژي تلف نمي كرديم Biggrin
خوب طبيعيه ديگه ... ، وقتي روي bitwait برهه به وقفه ، موقع برگشت هم رو bitwait بر مي گردهه ، در نتيجه تا شرط bitwait رو برآوردهه نكني ، روي همون bitwait برنامه ات مي مونه ...
بايد يه جور ديگه كد بزني ...

مي توني بجاي bitwait يه حلقه ي بينهايت بذاري كه توش يه شرطي رو check مي كني ، توي وقفه هم يه متغيير رو مقدار دهي كني كه موقع برگشت شرط رو در حلقه ي بينهايت برآوردهه كنه و از حلقه در بياد .
اينطوري برنامه ات متوقف نمي شه ...
شرمنده مهندس
میشه همین برنامه منو به روشی که خودت میگی edit کنی دمت گرم.
نه ، نمي شه ... :d
يه مثال حدودي مي زنم ، مي توني ازش استفاده كني ...
در واقع حلقه ي do-loop مي تونه جاي bitwait استفاده بشه ...
کد:
label?:
m=0
.
.
.
do
if m=1 then
exit do
يا
goto label?
end if
loop
.
.
.
زير روال وقفه:
Iint0:
if m=0 then
m=1
end if
.
.
.
return
دستت درد نکنه دادا
راستی یه سوال آیا lM335 تحمل دمای بالا 100 درجه در تماس مستقیم با حرارت مثلا در تماس با هیتر داره ؟
خواهش مي شه...

ديتاشيت بخون ، توضيح داده ...
مورد ديگه اينكه چون اين سنسورها همه ي مداراتشون يجا هست ، معمولا اينطوري ازشون استفادهه نمي كنن ...
براي دماهاي بالا تراشه ها انتخاب مناسبي نيستن.
در تماس مستقيم هم سنسور رو در يه پوشش محافظ قرار مي دن ، البته باعث مي شه حساسيتش كمتر بشه (نسبت به دماي محيط)