با سلام
روی یک پروژه سنسور رطوبت HS1101 دارم کار می کنم و بابت راه اندازی آن مشکلی نیست ولی زمانی که خواستم روی برنامه آن دستکاری کنم به یه مشکل عجیب بر خوردم.
شاید خیلی از دوستان از این برنامه راه اندازی رطوبت سنج و کار با تایمر صفر و کانتر 1 آن استفاده کرده باشند در بخشی از این دستور در زمان سرریزی تایمر با دستور
on ovf0 lable و on ovf1 Pulsecount به lable مورد نظر پرش کرده و ISR سرریزی را اجرا می کند. این حالت در یک LOOP به فرض از F1 شروع و با دستور GOTO F1 بر می گردد .
ولی زمانی که خواستم دوباره در یک LOOP دیگر به فرض از F2 شروع و با دستور برگشت GOTO F2 بر گردم خطای 249 یعنی ISR از قبل تعیین شده را می دهد. حتی نام LABLE را عوض کردم باز این خطا را داد.
اینم برنامه من
F1:
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Enable Timer1
On Ovf1 Pulsecount
On Ovf0 Lable
Start Timer0
'-----------------------------------------------------
1wreset
If Err = 1 Then
Lcdat 1 , 1 , "" '
Else
1wwrite &HCC
1wwrite &H44
Waitms 100
1wreset
1wwrite &HCC
1wwrite &HBE
I1 = 1wread()
I2 = 1wread()
I = Makeint(i1 , I2)
Temp = I / 16
Lcdat 2 , 1 , Temp
End If
Goto F1
Lable:
Incr C
If C > 30 Then
Stop Timer0
M = -7587.2
A = B * 65536
A = A + Counter1
A = A - 110
U = A - 7351
U = U * M
U = U / 100000
Lcdat 1 , 1 , U ; "% "
'***********************************
If U < 50 Then
Set Portb.7
Else
Reset Portb.7
End If
'***********************************
B = 0
C = 0
Counter1 = 0
Start Timer0
End If
Return
Pulsecount:
Incr B : Counter1 = 0
Return
F2:
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Enable Timer1
On Ovf1 Pulsecount1
On Ovf0 Lable1
Start Timer0
If Pinb.5 = 1 Then Goto U5
'-----------------------------------------------------
1wreset
If Err = 1 Then
Lcdat 1 , 1 , "" '
Else
1wwrite &HCC
1wwrite &H44
Waitms 100
1wreset
1wwrite &HCC
1wwrite &HBE
I1 = 1wread()
I2 = 1wread()
I = Makeint(i1 , I2)
Temp = I / 16
Lcdat 2 , 1 , Temp
End If
Goto F2
Lable1:
Incr C
If C > 30 Then
Stop Timer0
M = -7587.2
A = B * 65536
A = A + Counter1
A = A - 110
U = A - 7351
U = U * M
U = U / 100000
Lcdat 1 , 1 , U ; "% "
'***********************************
If U < 70 Then
Set Portb.7
Else
Reset Portb.7
End If
'***********************************
B = 0
C = 0
Counter1 = 0
Start Timer0
End If
Return
Pulsecount1:
Incr B : Counter1 = 0
Return
این دو تا خط قرمز را نرم افزار خطا 249 (ISR Already Defined ) می دهد.
لطف راهنمایی کنین
با تشکر
روی یک پروژه سنسور رطوبت HS1101 دارم کار می کنم و بابت راه اندازی آن مشکلی نیست ولی زمانی که خواستم روی برنامه آن دستکاری کنم به یه مشکل عجیب بر خوردم.
شاید خیلی از دوستان از این برنامه راه اندازی رطوبت سنج و کار با تایمر صفر و کانتر 1 آن استفاده کرده باشند در بخشی از این دستور در زمان سرریزی تایمر با دستور
on ovf0 lable و on ovf1 Pulsecount به lable مورد نظر پرش کرده و ISR سرریزی را اجرا می کند. این حالت در یک LOOP به فرض از F1 شروع و با دستور GOTO F1 بر می گردد .
ولی زمانی که خواستم دوباره در یک LOOP دیگر به فرض از F2 شروع و با دستور برگشت GOTO F2 بر گردم خطای 249 یعنی ISR از قبل تعیین شده را می دهد. حتی نام LABLE را عوض کردم باز این خطا را داد.
اینم برنامه من
F1:
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Enable Timer1
On Ovf1 Pulsecount
On Ovf0 Lable
Start Timer0
'-----------------------------------------------------
1wreset
If Err = 1 Then
Lcdat 1 , 1 , "" '
Else
1wwrite &HCC
1wwrite &H44
Waitms 100
1wreset
1wwrite &HCC
1wwrite &HBE
I1 = 1wread()
I2 = 1wread()
I = Makeint(i1 , I2)
Temp = I / 16
Lcdat 2 , 1 , Temp
End If
Goto F1
Lable:
Incr C
If C > 30 Then
Stop Timer0
M = -7587.2
A = B * 65536
A = A + Counter1
A = A - 110
U = A - 7351
U = U * M
U = U / 100000
Lcdat 1 , 1 , U ; "% "
'***********************************
If U < 50 Then
Set Portb.7
Else
Reset Portb.7
End If
'***********************************
B = 0
C = 0
Counter1 = 0
Start Timer0
End If
Return
Pulsecount:
Incr B : Counter1 = 0
Return
F2:
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
Enable Timer1
On Ovf1 Pulsecount1
On Ovf0 Lable1
Start Timer0
If Pinb.5 = 1 Then Goto U5
'-----------------------------------------------------
1wreset
If Err = 1 Then
Lcdat 1 , 1 , "" '
Else
1wwrite &HCC
1wwrite &H44
Waitms 100
1wreset
1wwrite &HCC
1wwrite &HBE
I1 = 1wread()
I2 = 1wread()
I = Makeint(i1 , I2)
Temp = I / 16
Lcdat 2 , 1 , Temp
End If
Goto F2
Lable1:
Incr C
If C > 30 Then
Stop Timer0
M = -7587.2
A = B * 65536
A = A + Counter1
A = A - 110
U = A - 7351
U = U * M
U = U / 100000
Lcdat 1 , 1 , U ; "% "
'***********************************
If U < 70 Then
Set Portb.7
Else
Reset Portb.7
End If
'***********************************
B = 0
C = 0
Counter1 = 0
Start Timer0
End If
Return
Pulsecount1:
Incr B : Counter1 = 0
Return
این دو تا خط قرمز را نرم افزار خطا 249 (ISR Already Defined ) می دهد.
لطف راهنمایی کنین
با تشکر
دیدگاه