با سلام خدمت اساتید گرامی من یک فاصله یاب می خوام درست کنم و متاسفانه میکروی که این برنامه براش نوشته شده تو شهر ما پیدا نمیشه و مجبور شدم به جای آن از میکروی M8 استفاده کنم ولی موقع compile شدن خطا میگیرهhttp://www.4shared.com/photo/uPvPxcQG/untitled.html
کلا دستور clkpr چیه که خطا میگیره تقریبا میشه خط 23 و خط 24 ؟
اینم برنامه
'Ultrasonic Range Finder
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = _
Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portd.6
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 8
Config Timer1 = Timer , Prescale = 8
Config Int0 = Falling
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Declare Sub Lcd_show(byval Hex_val As Integer)
Enable Interrupts
Disable Int0
Enable Ovf0
Enable Ovf1
On Int0 Ex0_rut
On Ovf0 T0_rut
On Ovf1 T1_rut
Clkpr = &H80
Clkpr = &H00
Out1 Alias Portd.4
Out2 Alias Portd.5
Trigger Alias Portd.3
Dim Lcd_show_flag As Bit
Dim Dip_switch As Byte
Dim Timer_val As Integer
Cursor Off : Cls : Lcd "start" : Waitms 1000
Out1 = 0 : Out2 = 0
'---------------------------
Do
Disable Int0
Timer0 = &HF4
Timer1 = &H0000
Trigger = 0
Waitms 10
'-----------------
Start Timer0
Start Timer1
Waitus 100
Stop Timer0
Out1 = 0
Out2 = 0
Trigger = 1
Waitus 150
'----------------
Enable Int0
Dip_switch = Pind And &H03
Select Case Dip_switch
Case 0:
Waitms 200
Case 1:
Waitms 500
Case 2:
Waitms 1000
Case 3:
Waitms 2000
End Select
If Lcd_show_flag = 1 Then
Call Lcd_show(timer_val)
Lcd_show_flag = 0
End If
Loop
End
'---------------------------
Ex0_rut:
Timer_val = Timer1
Waitus 20
If Pind.2 = 0 Then
Disable Int0
Stop Timer1
Lcd_show_flag = 1
End If
Return
'---------------------------
T0_rut:
Timer0 = &HF4
Out1 = Not Out1
Out2 = Not Out1
Return
'---------------------------
T1_rut:
Stop Timer1
Cls
Lcd "Over range"
Return
'---------------------------
Sub Lcd_show(byval Hex_val As Integer)
Dim D As Long
Dim Distance As Integer
D = Hex_val / 2
D = D * 343
D = D / 10000
Distance = D
Cls
Lcd "Range> " ; Distance ; "cm"
End Sub
به نظر شما من باید چکار کنم؟برنامه هم از کتاب 11 پروژه با AVR پیدا کردم
کلا دستور clkpr چیه که خطا میگیره تقریبا میشه خط 23 و خط 24 ؟
اینم برنامه
'Ultrasonic Range Finder
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = _
Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portd.6
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 8
Config Timer1 = Timer , Prescale = 8
Config Int0 = Falling
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Declare Sub Lcd_show(byval Hex_val As Integer)
Enable Interrupts
Disable Int0
Enable Ovf0
Enable Ovf1
On Int0 Ex0_rut
On Ovf0 T0_rut
On Ovf1 T1_rut
Clkpr = &H80
Clkpr = &H00
Out1 Alias Portd.4
Out2 Alias Portd.5
Trigger Alias Portd.3
Dim Lcd_show_flag As Bit
Dim Dip_switch As Byte
Dim Timer_val As Integer
Cursor Off : Cls : Lcd "start" : Waitms 1000
Out1 = 0 : Out2 = 0
'---------------------------
Do
Disable Int0
Timer0 = &HF4
Timer1 = &H0000
Trigger = 0
Waitms 10
'-----------------
Start Timer0
Start Timer1
Waitus 100
Stop Timer0
Out1 = 0
Out2 = 0
Trigger = 1
Waitus 150
'----------------
Enable Int0
Dip_switch = Pind And &H03
Select Case Dip_switch
Case 0:
Waitms 200
Case 1:
Waitms 500
Case 2:
Waitms 1000
Case 3:
Waitms 2000
End Select
If Lcd_show_flag = 1 Then
Call Lcd_show(timer_val)
Lcd_show_flag = 0
End If
Loop
End
'---------------------------
Ex0_rut:
Timer_val = Timer1
Waitus 20
If Pind.2 = 0 Then
Disable Int0
Stop Timer1
Lcd_show_flag = 1
End If
Return
'---------------------------
T0_rut:
Timer0 = &HF4
Out1 = Not Out1
Out2 = Not Out1
Return
'---------------------------
T1_rut:
Stop Timer1
Cls
Lcd "Over range"
Return
'---------------------------
Sub Lcd_show(byval Hex_val As Integer)
Dim D As Long
Dim Distance As Integer
D = Hex_val / 2
D = D * 343
D = D / 10000
Distance = D
Cls
Lcd "Range> " ; Distance ; "cm"
End Sub
به نظر شما من باید چکار کنم؟برنامه هم از کتاب 11 پروژه با AVR پیدا کردم
دیدگاه