۱۰-آذر-۱۳۸۹, ۱۱:۴۴:۵۴
سلام دوستان
برنامه زیر یک برنامه تغییر زاویه اتش هست که اینجا من دوتا برنامه گذاشتم یکی تاخیر زاویه اتش به اندازه میلی ثانیه ( برنامه اول ) و یکی تاخیر برحسب میکروثانیه . برنامه اول درست کار میکنه و میاد بعد از گذر از صفر سیگنال ac به مقدار a میل ثانیه تاخیر ایجاد میکنه و بعد تریستور رو اتش میکنه . ولی برنامه دوم درست کار نمی کنه و با برنامه اول یکی هستش فقط تنها فرقی که داره اینه که تاخیر رو برحسب میکروثانیه انجام میده . ولی عملا این اتفاق نمی افته و دستور waitus a که باید به اندازه a میکروثانیه تاخیر ایجاد کنه عمل نمیکنه .
خودم هر کاری که کردم نشد که نشد .
$regfile = "m32def.dat"
$crystal = 1000000
Config Portb.0 = Output
Portb.0 = 0
Config Pina.0 = Input 'afzayesh time'
Config Pina.1 = Input ' kaheshe time'
Config Int0 = Rising
Enable Interrupts
Enable Int0
On Int0 Triger
Dim A As Word
A = 0
Cursor Off
Cls : Lcd "time triger " ; A
Do
Debounce Pina.0 , 1 , Show1 , Sub
Debounce Pina.1 , 1 , Show2 , Sub
Loop
End
Triger:
Waitms A ' takhire baraye atashe thyristor'
Set Portb.0
Waitus 100
Reset Portb.0
Return
Show1:
A = A + 1
If A > 10 Then A = 10
Cls : Lcd "time triger " ; A
Return
Show2:
A = A - 1
If A < 1 Then A = 1
Cls : Lcd "time triger " ; A
Return
برنامه بالا مثل مرد کار میکنه ولی توی خط 22 اونجایی که نوشتم waitms a میاد به اندازه a میلی ثانیه تاخیر ایجاد میکنه . ولی مشکل اینجاست اگه به جای waitms a بنویسم waitus a دیگه میکرو نمیتونه مقدار a رو بخونه و بعد از گذر از صفر توی همون زاویه صفر درجه تریستور رو تریگر میکنه
اینم برنامه تغییرات برنامه :
$regfile = "m32def.dat"
$crystal = 1000000
Config Portb.0 = Output
Portb.0 = 0
Config Pina.0 = Input 'afzayesh time'
Config Pina.1 = Input ' kaheshe time'
Config Int0 = Rising
Enable Interrupts
Enable Int0
On Int0 Triger
Dim A As Word
A = 0
Cursor Off
Cls : Lcd "time triger " ; A
Do
Debounce Pina.0 , 1 , Show1 , Sub
Debounce Pina.1 , 1 , Show2 , Sub
Loop
End
Triger:
Waitus A ' takhire baraye atashe thyristor'
Set Portb.0
Waitus 100
Reset Portb.0
Return
Show1:
A = A + 100
If A >= 10000 Then A = 10000
Cls : Lcd "time triger " ; A
Return
Show2:
A = A - 100
If A <= 1 Then A = 1
Cls : Lcd "time triger " ; A
Return
برنامه زیر یک برنامه تغییر زاویه اتش هست که اینجا من دوتا برنامه گذاشتم یکی تاخیر زاویه اتش به اندازه میلی ثانیه ( برنامه اول ) و یکی تاخیر برحسب میکروثانیه . برنامه اول درست کار میکنه و میاد بعد از گذر از صفر سیگنال ac به مقدار a میل ثانیه تاخیر ایجاد میکنه و بعد تریستور رو اتش میکنه . ولی برنامه دوم درست کار نمی کنه و با برنامه اول یکی هستش فقط تنها فرقی که داره اینه که تاخیر رو برحسب میکروثانیه انجام میده . ولی عملا این اتفاق نمی افته و دستور waitus a که باید به اندازه a میکروثانیه تاخیر ایجاد کنه عمل نمیکنه .
خودم هر کاری که کردم نشد که نشد .
$regfile = "m32def.dat"
$crystal = 1000000
Config Portb.0 = Output
Portb.0 = 0
Config Pina.0 = Input 'afzayesh time'
Config Pina.1 = Input ' kaheshe time'
Config Int0 = Rising
Enable Interrupts
Enable Int0
On Int0 Triger
Dim A As Word
A = 0
Cursor Off
Cls : Lcd "time triger " ; A
Do
Debounce Pina.0 , 1 , Show1 , Sub
Debounce Pina.1 , 1 , Show2 , Sub
Loop
End
Triger:
Waitms A ' takhire baraye atashe thyristor'
Set Portb.0
Waitus 100
Reset Portb.0
Return
Show1:
A = A + 1
If A > 10 Then A = 10
Cls : Lcd "time triger " ; A
Return
Show2:
A = A - 1
If A < 1 Then A = 1
Cls : Lcd "time triger " ; A
Return
برنامه بالا مثل مرد کار میکنه ولی توی خط 22 اونجایی که نوشتم waitms a میاد به اندازه a میلی ثانیه تاخیر ایجاد میکنه . ولی مشکل اینجاست اگه به جای waitms a بنویسم waitus a دیگه میکرو نمیتونه مقدار a رو بخونه و بعد از گذر از صفر توی همون زاویه صفر درجه تریستور رو تریگر میکنه
اینم برنامه تغییرات برنامه :
$regfile = "m32def.dat"
$crystal = 1000000
Config Portb.0 = Output
Portb.0 = 0
Config Pina.0 = Input 'afzayesh time'
Config Pina.1 = Input ' kaheshe time'
Config Int0 = Rising
Enable Interrupts
Enable Int0
On Int0 Triger
Dim A As Word
A = 0
Cursor Off
Cls : Lcd "time triger " ; A
Do
Debounce Pina.0 , 1 , Show1 , Sub
Debounce Pina.1 , 1 , Show2 , Sub
Loop
End
Triger:
Waitus A ' takhire baraye atashe thyristor'
Set Portb.0
Waitus 100
Reset Portb.0
Return
Show1:
A = A + 100
If A >= 10000 Then A = 10000
Cls : Lcd "time triger " ; A
Return
Show2:
A = A - 100
If A <= 1 Then A = 1
Cls : Lcd "time triger " ; A
Return