Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: terrarus, ivan_fd  
Форум Picbasic.ru » Программирование МК » Mikrobasic » Про Microbasic (Не плохая среда для PIC)
Про Microbasic
Aleksey Дата: Сб, 15.09.2007, 21:34  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Новенький
Сообщений: 5
Репутация: 1   ±
Замечания:   ±
На сайте с 14.09.2007

Статус: Offline

Microbasic - довольно не плохая среда разработки на горячо всеми нами любимом Барсике (Basic),
имеет встроенный софтовый и железный дебагер(при наличии платы), а также кучу полезных библиотек и
свой программатор, хорошая поддержка на сайте производителя, можно скачать проекты, а самое главное
схемы и мануалы на отладочные платы, которые можно собрать самостоятельно.
Программа без ограничения на 2к. будет выложена на сайте. cool
Ссылка:
http://www.mikroelektronika.co.yu/en/


foik
ЯНДЕКС Дата: 15.09.2007
retas Дата: Вс, 16.09.2007, 13:19  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Мож ы кого есть описание Microbasic на русском?
ADMIN Дата: Вс, 16.09.2007, 15:42  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

По поводу перевода мануалов(всех) прошу предложения в форум. Предлагаю разбить мануал пока один на всех и сделать качественный перевод. Повторяю, PBP я перевел только наполовину, поэтому, всех заинтересованных прошу присоединиться. В форуме договариваемся о частях перевода, я потом объединю.
Yrok Дата: Чт, 27.09.2007, 12:08  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Привет всем!!
Тоже немного пытаю Microbasic--готов буду помочь и сам надеюсь на помощь!!!!
P.S. Мануала на русском пока нет-а хотелось бы
retas Дата: Вс, 14.10.2007, 18:38  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Yrok!!!!!!!!!!! , пытаюсь и я подружиться с Mikrobasic,но хелп видно написан для более головастых.Вот в примере Counter8.pbas.
86 строчка выглядит так: WordToStr1(20) - мож подскажете,на что указывает цыфра 20 в скобках?
Спасибо.
Yrok Дата: Пн, 15.10.2007, 10:49  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 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
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

К сожалению по этому кусочку нельзя ничего сказать
Здесь просто основная часть программы--где идет вызов этой процедуры,а описание самой процедуры должно находиться выше.
Выложи весь код--от начала до конца--если неполучиться то вышли весь проэкт на andrey-u1976@mail.ru посмотрю -отпишусь.

Сообщение отредактировал Yrok - Ср, 17.10.2007, 09:54
retas Дата: Ср, 17.10.2007, 22:42  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 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
Репутация: 2   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Yrok,большущее Вам спасибо,но...В хелпе нашёл: "sub procedure WordToStr(dim input as word, dim byref txt as char[6])",и мне,не доразвитому,кажется,что в скобках не может быть просто напросто одна цыфра,да и здесь - на что указывает [6]?
У меня очущение,что чтобы понять правила MikroBasic (тем самым обращу внимание - не "MicroBasic") надо ещё куда то глянуть.
Мож подскажете?
Спасибо за терьпение.
ЯНДЕКС Дата: 21.10.2007
Yrok Дата: Пн, 22.10.2007, 10:18  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 14.09.2007

Статус: Offline

как в Microbasic получить .hex файл?
Yrok Дата: Чт, 10.01.2008, 10:01  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Romario
смотри личку
alexnoskov Дата: Пт, 25.01.2008, 14:46  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Новенький
Сообщений: 1
Репутация: 0   ±
Замечания:   ±
На сайте с 25.01.2008

Статус: Offline

Yrok,
Нет-ли у тебя лекарства на микроБасик, не могу найти в инете. Заранее спасибо.
Форум Picbasic.ru » Программирование МК » Mikrobasic » Про Microbasic (Не плохая среда для PIC)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: