سلام
من میخام با میکرو یه led را برای زمان مشخصی روشن کنم. به این صورت که کاربر زمان روشن بود را به برحسب میلی ثانیه به میکرو میده و میکرو اونو روشن میکنه. برای اینکه دقیق باشه از تایمر صفر استفاده کردم. برنامه ای که نوشتم به صورت زیره ولی تو پرتئوس جواب نمیده . اگه میشه دوستان یه نگاهی به این برنامه بندازن ببینن کجاش مشکل داده . من اولین باره که دارم با تایمر کار میکنم لطفا راهنمایی کنید. یا اگه روش دیگه ای برای اینکه بتونم زمان با دقت میلی ثانیه داشته باشم را میدونید بهم بگین. با تشکر
من میخام با میکرو یه led را برای زمان مشخصی روشن کنم. به این صورت که کاربر زمان روشن بود را به برحسب میلی ثانیه به میکرو میده و میکرو اونو روشن میکنه. برای اینکه دقیق باشه از تایمر صفر استفاده کردم. برنامه ای که نوشتم به صورت زیره ولی تو پرتئوس جواب نمیده . اگه میشه دوستان یه نگاهی به این برنامه بندازن ببینن کجاش مشکل داده . من اولین باره که دارم با تایمر کار میکنم لطفا راهنمایی کنید. یا اگه روش دیگه ای برای اینکه بتونم زمان با دقت میلی ثانیه داشته باشم را میدونید بهم بگین. با تشکر
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Kbd = Portb , Debounce = 100 , Delay = 120
Config Porta = Output
Config Timer0 = Timer , Prescale = 1
Stop Timer0
Declare Sub Waitss(byval Ms As Long)
Dim A As Byte , B As Byte , T As Long , Ms As Long
S1:
T = 0
Cls : Cursor Off
Home : Lcd "***** Hello *****" : Delay
Delay
Delay
Cls
Home : Lcd "Enter Time"
Lowerline
S2:
A = Getkbd()
If A = 16 Then Goto S2
B = Lookup(a , Keydata)
If B = 15 Then Goto T_ok
If B = 11 Then Goto T_cl
Lcd B
T = T * 10 : T = T + B
Goto S2
T_cl:
Shiftcursor Left
Lcd " "
T = T / 10
Shiftcursor Left
Goto S2
T_ok:
Ms = T
Set Porta.0
Call Waitss(ms)
Reset Porta.0
'Home : Lcd "***** Finish *****" : Wait 2
Wait 2
Goto S1
End
'******************
Sub Waitss(byval Ms As Long)
Local N As Long
Ms = Ms * 10
N = 0
Do
Start Timer0
Tcnt0 = 0
Cls
Home :
Do
Home : Lcd Tcnt0
Loop Until Tcnt0 >= 100
N = N + 1
Stop Timer0
Loop Until N >= Ms
Stop Timer0
End Sub
Keydata:
Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Kbd = Portb , Debounce = 100 , Delay = 120
Config Porta = Output
Config Timer0 = Timer , Prescale = 1
Stop Timer0
Declare Sub Waitss(byval Ms As Long)
Dim A As Byte , B As Byte , T As Long , Ms As Long
S1:
T = 0
Cls : Cursor Off
Home : Lcd "***** Hello *****" : Delay
Delay
Delay
Cls
Home : Lcd "Enter Time"
Lowerline
S2:
A = Getkbd()
If A = 16 Then Goto S2
B = Lookup(a , Keydata)
If B = 15 Then Goto T_ok
If B = 11 Then Goto T_cl
Lcd B
T = T * 10 : T = T + B
Goto S2
T_cl:
Shiftcursor Left
Lcd " "
T = T / 10
Shiftcursor Left
Goto S2
T_ok:
Ms = T
Set Porta.0
Call Waitss(ms)
Reset Porta.0
'Home : Lcd "***** Finish *****" : Wait 2
Wait 2
Goto S1
End
'******************
Sub Waitss(byval Ms As Long)
Local N As Long
Ms = Ms * 10
N = 0
Do
Start Timer0
Tcnt0 = 0
Cls
Home :
Do
Home : Lcd Tcnt0
Loop Until Tcnt0 >= 100
N = N + 1
Stop Timer0
Loop Until N >= Ms
Stop Timer0
End Sub
Keydata:
Data 1 , 2 , 3 , 10 , 4 , 5 , 6 , 11 , 7 , 8 , 9 , 12 , 13 , 0 , 14 , 15
دیدگاه