سلام دوستان خسته نباشید
قدیما که کلاس رباتیک میرفتم استادمون برای ربات ی برنامه نوشته بود ولی من به علت اینکه کوچیک بودم(ابتدایی بودم)و هم این که دیگه کلاس نرفتم نتوستم توضیح تک تک خطوط برنامرو یاد بگیرم به علاوه این که برنامه ای که الان دستمه نمیدونم کامله یا نه چون بیشتر کارا رو با کامپیوتر های همونجا انجام میدادیم.همونجا هم سیو میکردیم برای همین میخوام بهم ی لطفی بکینید و بگید که کم و کسری داره یانه و هم چند تا خطو برام توضیح بدی
وری وری ممنون :biggrin:
[code=qbasic]
$regfile = "m32def.dat"
$crystal = 8000000
'_________________________ CONFIG TIMER MOD=PWM ________________________________
Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Start Timer1
'____________________________ CONFIG LCD _______________________________________
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Cursor Off
Cls
'______________________________ CONFIG PORT ____________________________________
Config Portd = Output
'__________________________ DECLARE & SUB ______________________________________
Declare Sub Leftf()
Declare Sub Lefts()
Declare Sub Stp()
Declare Sub Back()
Declare Sub Forward()
Declare Sub Rights()
Declare Sub Rightf() 'BLACK
'____________________________ VARIYBALE ________________________________________
Dim S(11) As Byte
Dim Ss As String * 11
Dim I As Byte
'__________________________ START PROGRAM ______________________________________
'____________________________ SUB WHITE ________________________________________
Do
S(1) = Pinb.0
S(2) = Pinb.1
S(3) = Pinb.2
S(4) = Pinb.3
S(5) = Pinb.4
S(6) = Pinb.5
S(7) = Pinb.6
S(8) = Pinb.7
S(9) = Pinc.7
S(10) = Pinc.6
S(11) = Pinc.5
Ss = Str(s(1)) + Str(s(2)) + Str(s(3)) + Str(s(4)) + Str(s(5)) + Str(s(6)) + Str(s(7)) + Str(s(8)) + Str(s(9)) + Str(s(10)) + Str(s(11))
If Ss = "10000000000" Then Call Rightf() '1
If Ss = "01000000000" Then Call Rightf() '2
If Ss = "00100000000" Then Call Rights() '3
If Ss = "00010000000" Then Call Rights() '4
If Ss = "00001000000" Then Call Forward() '5
If Ss = "00000100000" Then Call Forward() '6
If Ss = "00000010000" Then Call Forward() '7
If Ss = "00000110000" Then Call Forward() '7
If Ss = "00001110000" Then Call Forward() '7
If Ss = "00001100000" Then Call Forward() '7
If Ss = "00000001000" Then Call Lefts() '8
If Ss = "00000000100" Then Call Lefts() '9
If Ss = "00000000010" Then Call Leftf() '10
If Ss = "00000000001" Then Call Leftf() '14
'____________________________________________ ___________________________________
If Ss = "11000000000" Then Call Rightf()
If Ss = "01100000000" Then Call Rightf()
If Ss = "00110000000" Then Call Rights()
If Ss = "00011000000" Then Call Rights()
If Ss = "00000011000" Then Call Lefts()
If Ss = "00000001100" Then Call Lefts()
If Ss = "00000000110" Then Call Leftf()
If Ss = "00000000011" Then Call Leftf()
'_______________________________zohaiyr______ _________________________________
If Ss = "11100000000" Then Call Rightf()
If Ss = "01110000000" Then Call Rightf()
If Ss = "00111000000" Then Call Rights()
If Ss = "00011100000" Then Call Rights()
If Ss = "00000111000" Then Call Lefts()
If Ss = "00000011100" Then Call Lefts()
If Ss = "00000001110" Then Call Leftf()
If Ss = "00000000111" Then Call Leftf()
'____________________________________________ ___________________________________
If Ss = "11100001110" Then Call Leftf()
If Ss = "01110001110" Then Call Leftf()
If Ss = "00111011000" Then Call Leftf()
If Ss = "00110011100" Then Call Leftf()
If Ss = "00001101110" Then Call Leftf()
If Ss = "00000000000" Then Call Back()
If Ss = "00000001111" Then Call Leftf()
If Ss = "11110000000" Then Call Rightf()
If Ss = "01111000000" Then Call Rightf()
If Ss = "00000011110" then Call Leftf()
Home
Lcd Ss
Loop
'_____________________________ END SUB WHITE ___________________________________
Sub Back()
Reset Portd.0
Set Portd.1
Pwm1b = 250
Set Portd.2
Reset Portd.3
Pwm1a = 250
Return
End Sub
'________________________ SUB FORWARD __________________________________________
Sub Forward()
Set Portd.0
Reset Portd.1
Pwm1b = 250
Reset Portd.2
Set Portd.3
Pwm1a = 250
Return
End Sub
'__________________________ END SUB ____________________________________________
'___________________________SUB 20 _____________________________________________
Sub Stp()
Reset Portd.0
Reset Portd.1
Pwm1b = 0
Reset Portd.2
Reset Portd.3
Pwm1a = 0
Return
End Sub
'___________________________SUB FAST ___________________________________________
Sub Rightf()
Reset Portd.2
Set Portd.3
Pwm1a = 200
Reset Portd.0
Set Portd.1
Pwm1b = 200
Return
End Sub
Sub Leftf()
Set Portd.0
Reset Portd.1
Pwm1b = 200
Set Portd.2
Reset Portd.3
Pwm1a = 200
Return
End Sub
'__________________________ END SUB ____________________________________________
Sub Rights()
Set Portd.0
Reset Portd.1
Pwm1b = 150
Reset Portd.2
Set Portd.3
Pwm1a = 200
Waitms 400
Return
End Sub
Sub Lefts()
Set Portd.0
Reset Portd.1
Pwm1b = 200
Reset Portd.2
Set Portd.3
Pwm1a = 150
Waitms 400
Return
End Sub
[/code]
قدیما که کلاس رباتیک میرفتم استادمون برای ربات ی برنامه نوشته بود ولی من به علت اینکه کوچیک بودم(ابتدایی بودم)و هم این که دیگه کلاس نرفتم نتوستم توضیح تک تک خطوط برنامرو یاد بگیرم به علاوه این که برنامه ای که الان دستمه نمیدونم کامله یا نه چون بیشتر کارا رو با کامپیوتر های همونجا انجام میدادیم.همونجا هم سیو میکردیم برای همین میخوام بهم ی لطفی بکینید و بگید که کم و کسری داره یانه و هم چند تا خطو برام توضیح بدی
وری وری ممنون :biggrin:
[code=qbasic]
$regfile = "m32def.dat"
$crystal = 8000000
'_________________________ CONFIG TIMER MOD=PWM ________________________________
Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Start Timer1
'____________________________ CONFIG LCD _______________________________________
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Cursor Off
Cls
'______________________________ CONFIG PORT ____________________________________
Config Portd = Output
'__________________________ DECLARE & SUB ______________________________________
Declare Sub Leftf()
Declare Sub Lefts()
Declare Sub Stp()
Declare Sub Back()
Declare Sub Forward()
Declare Sub Rights()
Declare Sub Rightf() 'BLACK
'____________________________ VARIYBALE ________________________________________
Dim S(11) As Byte
Dim Ss As String * 11
Dim I As Byte
'__________________________ START PROGRAM ______________________________________
'____________________________ SUB WHITE ________________________________________
Do
S(1) = Pinb.0
S(2) = Pinb.1
S(3) = Pinb.2
S(4) = Pinb.3
S(5) = Pinb.4
S(6) = Pinb.5
S(7) = Pinb.6
S(8) = Pinb.7
S(9) = Pinc.7
S(10) = Pinc.6
S(11) = Pinc.5
Ss = Str(s(1)) + Str(s(2)) + Str(s(3)) + Str(s(4)) + Str(s(5)) + Str(s(6)) + Str(s(7)) + Str(s(8)) + Str(s(9)) + Str(s(10)) + Str(s(11))
If Ss = "10000000000" Then Call Rightf() '1
If Ss = "01000000000" Then Call Rightf() '2
If Ss = "00100000000" Then Call Rights() '3
If Ss = "00010000000" Then Call Rights() '4
If Ss = "00001000000" Then Call Forward() '5
If Ss = "00000100000" Then Call Forward() '6
If Ss = "00000010000" Then Call Forward() '7
If Ss = "00000110000" Then Call Forward() '7
If Ss = "00001110000" Then Call Forward() '7
If Ss = "00001100000" Then Call Forward() '7
If Ss = "00000001000" Then Call Lefts() '8
If Ss = "00000000100" Then Call Lefts() '9
If Ss = "00000000010" Then Call Leftf() '10
If Ss = "00000000001" Then Call Leftf() '14
'____________________________________________ ___________________________________
If Ss = "11000000000" Then Call Rightf()
If Ss = "01100000000" Then Call Rightf()
If Ss = "00110000000" Then Call Rights()
If Ss = "00011000000" Then Call Rights()
If Ss = "00000011000" Then Call Lefts()
If Ss = "00000001100" Then Call Lefts()
If Ss = "00000000110" Then Call Leftf()
If Ss = "00000000011" Then Call Leftf()
'_______________________________zohaiyr______ _________________________________
If Ss = "11100000000" Then Call Rightf()
If Ss = "01110000000" Then Call Rightf()
If Ss = "00111000000" Then Call Rights()
If Ss = "00011100000" Then Call Rights()
If Ss = "00000111000" Then Call Lefts()
If Ss = "00000011100" Then Call Lefts()
If Ss = "00000001110" Then Call Leftf()
If Ss = "00000000111" Then Call Leftf()
'____________________________________________ ___________________________________
If Ss = "11100001110" Then Call Leftf()
If Ss = "01110001110" Then Call Leftf()
If Ss = "00111011000" Then Call Leftf()
If Ss = "00110011100" Then Call Leftf()
If Ss = "00001101110" Then Call Leftf()
If Ss = "00000000000" Then Call Back()
If Ss = "00000001111" Then Call Leftf()
If Ss = "11110000000" Then Call Rightf()
If Ss = "01111000000" Then Call Rightf()
If Ss = "00000011110" then Call Leftf()
Home
Lcd Ss
Loop
'_____________________________ END SUB WHITE ___________________________________
Sub Back()
Reset Portd.0
Set Portd.1
Pwm1b = 250
Set Portd.2
Reset Portd.3
Pwm1a = 250
Return
End Sub
'________________________ SUB FORWARD __________________________________________
Sub Forward()
Set Portd.0
Reset Portd.1
Pwm1b = 250
Reset Portd.2
Set Portd.3
Pwm1a = 250
Return
End Sub
'__________________________ END SUB ____________________________________________
'___________________________SUB 20 _____________________________________________
Sub Stp()
Reset Portd.0
Reset Portd.1
Pwm1b = 0
Reset Portd.2
Reset Portd.3
Pwm1a = 0
Return
End Sub
'___________________________SUB FAST ___________________________________________
Sub Rightf()
Reset Portd.2
Set Portd.3
Pwm1a = 200
Reset Portd.0
Set Portd.1
Pwm1b = 200
Return
End Sub
Sub Leftf()
Set Portd.0
Reset Portd.1
Pwm1b = 200
Set Portd.2
Reset Portd.3
Pwm1a = 200
Return
End Sub
'__________________________ END SUB ____________________________________________
Sub Rights()
Set Portd.0
Reset Portd.1
Pwm1b = 150
Reset Portd.2
Set Portd.3
Pwm1a = 200
Waitms 400
Return
End Sub
Sub Lefts()
Set Portd.0
Reset Portd.1
Pwm1b = 200
Reset Portd.2
Set Portd.3
Pwm1a = 150
Waitms 400
Return
End Sub
[/code]
دیدگاه