проблема с подпрограммой
|
|
Lelik54 | Дата: Воскресенье, 05.08.2012, 20:28 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 11
Статус: Offline
| Всем доброго времени суток.Подскажите пожалуйсто,почему если команду INCR пишу в подпрограме GOTO,то она не работает,а цикле do...loop прекрасно себя ведёт? [code]$regfile = "m8535.dat" $lib "mcsbyte.lbx" $lib "lcd4.lbx" $crystal = 8000000 Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 Config Lcd = 16 * 2 Deflcdchar 4 , 0 , 4 , 2 , 31 , 2 , 4 , 0 , 0 Deflcdchar 5 , 0 , 4 , 8 , 31 , 8 , 4 , 0 , 0 Config Pind.2 = Input Config Rc5 = Pind.2(timer1) Enable Interrupts Dim Address As Byte , Command As Byte Dim A As Byte Dim B As Byte Cursor Off Cls '--------------------------------------------------------' Do Getrc5(address , Command) If Address < 255 Then Command = Command And &B01111111 End If If Command = 16 Then Goto Vpravo End If If Command = 17 Then Goto Vlevo End If Locate 2 , 1 Lcd B Loop '--------------------------------------------' Vpravo: Cls Locate 1 , 1 Lcd Chr(4) If B = 5 Then B = 1 End If Select Case B Case 1 : Portd = &B00001000 Case 2 : Portd = &B00010000 Case 3 : Portd = &B00100000 Case 4 : Portd = &B01000000 End Select Incr B Waitms 10 Return End '-----------------------------------------' Vlevo: Cls Locate 1 , 1 Lcd Chr(5) If B = 1 Then B = 5 End If Select Case B Case 1 : Portd = &B00001000 Case 2 : Portd = &B00010000 Case 3 : Portd = &B00100000 Case 4 : Portd = &B01000000 End Select Locate 2 , 1 Waitms 10 Return End
|
|
| |
exersizze | Дата: Понедельник, 06.08.2012, 12:11 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Просто ты пытаешься возвратится с помощью Return. Замени Goto на Gosub, должно заработать
|
|
| |
Aleks8383 | Дата: Понедельник, 06.08.2012, 22:37 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 104
Статус: Offline
| Либо просто перед Return поставить Goto на метку ,а саму метку поставить в цикл после do.
|
|
| |
Lelik54 | Дата: Вторник, 07.08.2012, 16:59 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 11
Статус: Offline
| спасибо,с gosub заработало,но почему так,мне не понятно.
|
|
| |
exersizze | Дата: Вторник, 07.08.2012, 19:49 | Сообщение # 5 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Все просто, по команде Goto микроконтроллер перепрыгнет на кусок программы с соответствующей меткой, при этом место откуда был переход не запоминается. Просто переход на другой участок кода. Поэтому команда Return не может возвратить проц на выполнение первоначального кода.
|
|
| |
Aleks8383 | Дата: Вторник, 07.08.2012, 20:44 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 104
Статус: Offline
| Это хорошо видно когда в том же барсике пошагово включаешь выполнене в симуляторе,прыгает писец,так бы наши олимпийцибы пригали:) Я это давно просёк но первым описал Ексисайз ,я то думал все знают гуры програмирования(я не про вас просто думал что это уже давно известный факт) ,а оказалось что нет.
Сообщение отредактировал Aleks8383 - Вторник, 07.08.2012, 20:45 |
|
| |