Про Microbasic
|
|
Aleksey |
Дата: Сб, 15.09.2007, 21:34 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 14.09.2007
Статус:
Offline
|
Microbasic - довольно не плохая среда разработки на горячо всеми нами любимом Барсике (Basic), имеет встроенный софтовый и железный дебагер(при наличии платы), а также кучу полезных библиотек и свой программатор, хорошая поддержка на сайте производителя, можно скачать проекты, а самое главное схемы и мануалы на отладочные платы, которые можно собрать самостоятельно. Программа без ограничения на 2к. будет выложена на сайте. Ссылка: http://www.mikroelektronika.co.yu/en/
foik
|
|
|
|
retas |
Дата: Вс, 16.09.2007, 13:19 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Мож ы кого есть описание Microbasic на русском?
|
|
|
|
ADMIN |
Дата: Вс, 16.09.2007, 15:42 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
По поводу перевода мануалов(всех) прошу предложения в форум. Предлагаю разбить мануал пока один на всех и сделать качественный перевод. Повторяю, PBP я перевел только наполовину, поэтому, всех заинтересованных прошу присоединиться. В форуме договариваемся о частях перевода, я потом объединю.
|
|
|
|
Yrok |
Дата: Чт, 27.09.2007, 12:08 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Привет всем!! Тоже немного пытаю Microbasic--готов буду помочь и сам надеюсь на помощь!!!! P.S. Мануала на русском пока нет-а хотелось бы
|
|
|
|
retas |
Дата: Вс, 14.10.2007, 18:38 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Yrok!!!!!!!!!!! , пытаюсь и я подружиться с Mikrobasic,но хелп видно написан для более головастых.Вот в примере Counter8.pbas. 86 строчка выглядит так: WordToStr1(20) - мож подскажете,на что указывает цыфра 20 в скобках? Спасибо.
|
|
|
|
Yrok |
Дата: Пн, 15.10.2007, 10:49 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Привет retas!!! К сожалению ненашел в примере Counter8.pbas--такой строчки. Есть только WordToStr2!!!!! Но по аналогии--могу предположить что эта строчка означает вызов прцедуры преобразования в твоем примере числа 20 в семисегментный код индикатора. В моем примере это процедура WordToStr2 которая преобразует переменную number в семисегментный код индикатора Вот сама процедура: Code sub procedure WordToStr2(dim number as word ) ' This procedure splits number into digits. dim pp, ' It is assumed that the number is not greater qq, ' than 9999. rr, sss as word sss = (number div 1000) 'sss = 4 M0 = LED_Mask(sss) sss = sss*1000 'sss = 4000
rr = (number - sss) div 100 'rr = (4321-4000) mod 100 =3 M1 = LED_Mask(rr) rr = sss+rr*100 'rr = 4000+300
qq = (number -rr) div 10 'qq = 4321 -4300... = 21 div 10 =2 M2 = LED_Mask(qq) qq = rr+qq*10 'qq = 4300+20= 4320
pp = number -qq 'pp = 4321 - 4320 = 1 M3 = LED_Mask(pp) end sub Удачи в изучении!!!
|
|
|
|
retas |
Дата: Ср, 17.10.2007, 00:07 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Мож ещё взгляните - показываю кусок: main: WordToStr1(20) INTCON = $00 ' DISABLE INTERRUPTS TRISB = $00 ' PORTB: ALL OUTPUTS TRISA = $00 ' PORTA: ALL OUTPUTS T1COUNT = 0 PIE1.RCIE = 0 ' disable usart interrupts PIE1.TXIE = 0 PIE1.TMR1IE = 1 ' enable interrupt on timer1 overflow TMR1H = $17 ' these values are calculated for 4MHz TMR1L = $B8 ' T1CON = %11110001 ' set internal clock, start timer, prescaler 1:8 INTCON= $C0 ' ENABLE INTERRUPTS Counter=0 i = 0 _Loop: Спасибо.
|
|
|
|
Yrok |
Дата: Ср, 17.10.2007, 09:50 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
К сожалению по этому кусочку нельзя ничего сказать Здесь просто основная часть программы--где идет вызов этой процедуры,а описание самой процедуры должно находиться выше. Выложи весь код--от начала до конца--если неполучиться то вышли весь проэкт на andrey-u1976@mail.ru посмотрю -отпишусь.
Сообщение отредактировал
Yrok - Ср, 17.10.2007, 09:54
|
|
|
|
retas |
Дата: Ср, 17.10.2007, 22:42 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Выкладываю весь Counter8: Code dim Counter as word dim BackupC as word dim i as word dim M0 as byte dim M1 as byte dim M2 as byte dim M3 as byte dim T1Count as byte
sub procedure Interrupt INTCON= $00 ' DISABLE INTERRUPTS T1Count = T1Count+1 if T1Count = 2 then T1COUNT = 0 TMR1H = 23 TMR1L = 184 counter = counter + 1 if counter = 10000 then counter = 0 end if end if PIR1.TMR1IE = 0 PIR1.RCIF = 0 PIR1.TXIF = 0 INTCON= %11000000 ' ENABLE INTERRUPTS end sub
sub function LED_Mask(dim number as byte) as byte ' This function returns led mask for common cathode display. select case number ' In case 'number' is not in [0..9], case 0 result = $3F ' mask '0' ' the function will return unknown value case 1 result = $06 ' mask '1' case 2 result = $5B ' mask '2' case 3 result = $4F ' mask '3' case 4 result = $66 ' mask '4' case 5 result = $6D ' mask '5' case 6 result = $7D ' mask '6' case 7 result = $07 ' mask '7' case 8 result = $7F ' mask '8' case 9 result = $6F ' mask '9' End Select end sub
sub procedure WordToStr1(dim number as word) ' This procedure splits number into digits. dim pp as word ' It is assumed that the number is not greater dim qq as word ' than 9999. dim rr as word dim sss as word
'number = 4321 sss = (number div 1000) 'sss = 4 M0 = LED_Mask(sss) sss = sss*1000 'sss = 4000
rr = (number - sss) div 100 'rr = (4321-4000) mod 100 =3 M1 = LED_Mask(rr) rr = sss+rr*100 'rr = 4000+300
qq = (number -rr) div 10 'qq = 4321 -4300... = 21 div 10 =2 M2 = LED_Mask(qq) qq = rr+qq*10 'qq = 4300+20= 4320
pp = number -qq 'pp = 4321 - 4320 = 1 M3 = LED_Mask(pp) end sub
main: WordToStr1(20) INTCON = $00 ' DISABLE INTERRUPTS TRISB = $00 ' PORTB: ALL OUTPUTS TRISA = $00 ' PORTA: ALL OUTPUTS T1COUNT = 0
PIE1.RCIE = 0 ' disable usart interrupts PIE1.TXIE = 0 PIE1.TMR1IE = 1 ' enable interrupt on timer1 overflow TMR1H = $17 ' these values are calculated for 4MHz TMR1L = $B8 ' T1CON = %11110001 ' set internal clock, start timer, prescaler 1:8
INTCON= $C0 ' ENABLE INTERRUPTS Counter=0 i = 0 _Loop: 'while true ' endless loop BackupC = Counter ' save counter - interrupt might change it WordToStr1(BackupC) ' split BackupC to digits
PORTB = M3 ' display digit PORTA = 8 ' turn ones display on delay_us(1000) ' wait for a while PORTA = $00 ' turn all displays off if BackupC >= 10 then' turn display on only in case upper digits are not equal to 0 PORTB = M2 ' display digit PORTA = 4 ' turn tens display on delay_us(1000) ' PORTA = $00 ' turn all displays off End If
If BackupC >= 100 Then PORTB = M1 ' display digit PORTA = 2 ' turn hundreds display on delay_us(1000) ' PORTA = $00 ' turn all displays off End If
If BackupC >= 1000 Then PORTB = M0 ' display digit PORTA = 1 ' turn thousands display on delay_us(1000) ' PORTA = $00 ' turn all displays off End If 'Wend goto _Loop end.
|
|
|
|
Yrok |
Дата: Чт, 18.10.2007, 10:37 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Да действительно эта процедура аналогична той что я описывал(WordToStr2)--только называется она у вас WordToStr1 вот описание ее в вашей программе Quote sub procedure WordToStr1(dim number as word) ' This procedure splits number into digits. dim pp as word ' It is assumed that the number is not greater dim qq as word ' than 9999. dim rr as word dim sss as word 'number = 4321 sss = (number div 1000) 'sss = 4 M0 = LED_Mask(sss) sss = sss*1000 'sss = 4000 rr = (number - sss) div 100 'rr = (4321-4000) mod 100 =3 M1 = LED_Mask(rr) rr = sss+rr*100 'rr = 4000+300 qq = (number -rr) div 10 'qq = 4321 -4300... = 21 div 10 =2 M2 = LED_Mask(qq) qq = rr+qq*10 'qq = 4300+20= 4320 pp = number -qq 'pp = 4321 - 4320 = 1 M3 = LED_Mask(pp) end sub А вот зачем нужна строка WordToStr1(20) --просто загадка--этим только загонятся на дисплей значение 20--но высвечиваться оно невысвечивается так как неподается разрешающий сигнал, причем спустя несколько машинных циклов на дисплей выводиться значение 0. На мой взгляд она просто бесполезна и ее можно безболезнено убрать из программы. Склоняюсь к мнению что данная строка вставлялась во время отладки программы, а потом ее просто забыли убрать--так же если заметили объявлена переменная i типа word --но нигде неиспользуется.
Сообщение отредактировал
Yrok - Чт, 18.10.2007, 10:37
|
|
|
|
retas |
Дата: Вс, 21.10.2007, 11:04 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Yrok,большущее Вам спасибо,но...В хелпе нашёл: "sub procedure WordToStr(dim input as word, dim byref txt as char[6])",и мне,не доразвитому,кажется,что в скобках не может быть просто напросто одна цыфра,да и здесь - на что указывает [6]? У меня очущение,что чтобы понять правила MikroBasic (тем самым обращу внимание - не "MicroBasic") надо ещё куда то глянуть. Мож подскажете? Спасибо за терьпение.
|
|
|
|
Yrok |
Дата: Пн, 22.10.2007, 10:18 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Уважаемый retas--вы немного запутались. Процедура WordToStr(dim input as word, dim byref txt as char[6])--это стандартная процедура Microbasic, т.е. ее ненадо описывать в теле программы--тоесть вы пишите WordToStr в скобках переменные(кстати эта процедура преобразует переменную "dim input as word" в текстовую переменную dim byref txt as char[6]-например для вывода ее на LCD экран --а цифра 6 это сколько символов резервируется для переменной txt) и все и microbasic уже знает что и как делать. А вот процедура WordToStr1--это уже нестандартная процедура т.е. ее придумал программист--поэтому она должна быть описана в теле программы--т.е. проще говоря когда микроконтролер выполняя основную программу натыкается на WordToStr1--он переходит к выполнению процедуры описанной вами и находящейся выше основной программы т.е. до main:--после выполнения оной продолжает выполнение основной программы. P.S. К сожалению кроме мануала и примеров больше ничего по microbasic я ненашел.
Сообщение отредактировал
Yrok - Пн, 22.10.2007, 10:19
|
|
|
|
Romario |
Дата: Вт, 08.01.2008, 23:40 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
58
Замечания:
±
На сайте с 14.09.2007
Статус:
Offline
|
как в Microbasic получить .hex файл?
|
|
|
|
Yrok |
Дата: Чт, 10.01.2008, 10:01 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.09.2007
Статус:
Offline
|
Romario смотри личку
|
|
|
|
alexnoskov |
Дата: Пт, 25.01.2008, 14:46 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
1
Замечания:
±
На сайте с 25.01.2008
Статус:
Offline
|
Yrok, Нет-ли у тебя лекарства на микроБасик, не могу найти в инете. Заранее спасибо.
|
|
|
|