Вверх ↑
Этот топик читают: Гость
Ответов: 91
Рейтинг: 6
#1: 2017-09-03 18:14:13 ЛС | профиль | цитата
Добрый вечер всем.
Прошу помощи в вопросе изменения определенного бита в переменной.
Всю голову сломал. Не могу ничего придумать.

Смысл вопроса:
Есть АЦП. В него надо передавать байт конфигурации.
В этом байте, в зависимости от задач, меняются определенные биты.
Например для изменения размерности преобразования надо изменять два бита - 5й и 6й.
Для выбора коэффициента усиления -0й и 1й байты.

Я набросал схемку для изменения 5 и 6 битов.
Ничего не могу сообразить.
Add(MainForm,2953706,21,7)
{
Width=376
Height=281
link(onCreate,3810460:doEvent1,[])
}
Add(VisualStrings,14187305,287,56)
{
Lines=#2:00|
Point(doText)
Point(onText)
link(onText,7330458:doEvent1,[(348,62)(348,167)])
}
Add(VisualStrings,1545369,287,112)
{
Lines=#2:01|
Point(doText)
Point(onText)
link(onText,7330458:doEvent2,[(342,118)(342,174)])
}
Add(VisualStrings,3604332,287,182)
{
Lines=#2:10|
Point(doText)
Point(onText)
link(onText,7330458:doEvent3,[(342,188)(342,181)])
}
Add(VisualStrings,15220671,287,259)
{
Lines=#2:11|
Point(doText)
Point(onText)
link(onText,7330458:doEvent4,[(348,265)(348,188)])
}
Add(Memory,2499680,392,161)
{
link(onData,3059589:doEvent1,[])
}
Add(Hub,7330458,357,161)
{
InCount=4
OutCount=1
link(onEvent1,2499680:doValue,[])
}
Add(Label,7075102,392,238)
{
Left=80
Top=40
Width=30
Height=30
Font=[MS Sans Serif,14,0,0,1]
Caption="**"
link(Text,3958292:Var2,[])
}
Add(RadioButton,1163945,238,259)
{
Left=15
Top=69
Caption="18 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,15220671:doText,[])
}
Add(RadioButton,2818853,238,182)
{
Left=15
Top=51
Caption="16 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,3604332:doText,[])
}
Add(RadioButton,7046497,238,112)
{
Left=15
Top=33
Caption="14 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,1545369:doText,[])
}
Add(RadioButton,171957,238,56)
{
Left=15
Top=15
Caption="12 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,14187305:doText,[])
}
Add(Label,3408098,21,49)
{
Left=60
Top=165
Width=253
Height=17
Caption="переменная в которой надо заменить 5 и 6 биты"
}
Add(Label,2681980,329,518)
{
Left=130
Top=180
Width=110
Height=30
Font=[MS Sans Serif,18,0,0,1]
Caption="00000000"
}
Add(Memory,12943170,168,518)
{
Default=Integer(0)
Point(Data)
link(onData,6113526:doConvert,[])
link(Data,7121026:Result,[])
}
Add(Convertor,6113526,252,518)
{
Mode=8
Digits=8
link(onResult,2681980:doText,[])
link(Data,12943170:Value,[(258,507)(224,507)(224,563)(174,563)])
}
Add(Hub,3810460,70,21)
{
link(onEvent2,644660:doEvent2,[(102,34)(102,531)])
}
Add(Label,6723216,21,98)
{
Left=225
Top=205
Width=10
Height=17
Caption="0"
}
Add(Label,6917344,21,189)
{
Left=133
Top=205
Width=10
Height=17
Caption="7"
}
Add(Label,11937700,21,231)
{
Left=159
Top=205
Width=10
Height=17
Caption="5"
}
Add(Label,2351864,21,147)
{
Left=146
Top=205
Width=10
Height=17
Caption="6"
}
Add(Edit,11151153,238,364)
{
Left=130
Top=145
Width=100
Text="14"
DataType=2
}
Add(Hub,644660,133,518)
{
InCount=2
OutCount=1
link(onEvent1,12943170:doValue,[])
}
Add(StyleXP,2331318,21,273)
{
}
Add(Math,7121026,168,427)
{
OpType=5
link(onResult,644660:doEvent1,[(214,433)(214,487)(121,487)(121,524)])
link(Op1,3958292:Var1,[(174,222)])
link(Op2,11151153:Text,[(181,405)(244,405)])
}
Add(GetDataEx,3958292,392,217)
{
link(Data,2499680:Value,[])
}
Add(Hub,3059589,448,161)
{
link(onEvent1,7121026:doOperation,[(481,167)(481,299)(156,299)(156,433)])
link(onEvent2,7075102:doText,[(474,174)(474,209)(380,209)(380,244)])
}


Редактировалось 2 раз(а), последний 2017-09-03 19:21:08
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 2193
Рейтинг: 673
#2: 2017-09-03 18:47:13 ЛС | профиль | цитата
ibegen, в вкладке Логика есть компоненты IntToBits и BitsToInt ими и воспользуйтесь.
карма: 10

0
Ответов: 91
Рейтинг: 6
#3: 2017-09-03 19:00:59 ЛС | профиль | цитата
sla8a, я честно пытался.
Не понял как это можно сделать с помощью этих компонентов.
Примеров на форуме не нашел.
карма: 0

0
Ответов: 8885
Рейтинг: 823
#4: 2017-09-03 19:10:45 ЛС | профиль | цитата
ibegen,
Так


Add(MainForm,13558413,105,154)
{
Width=376
Height=281
link(onCreate,6218044:doWork2,[])
}
Add(Label,2681980,462,175)
{
Left=115
Top=45
Width=110
Height=30
Font=[MS Sans Serif,18,0,0,1]
Caption="00000000"
}
Add(CheckBox,1151722,161,70)
{
Left=110
Top=20
Width=15
Caption=""
link(onCheck,11740348:doWork3,[(200,76)])
}
Add(CheckBox,4672097,210,70)
{
Left=125
Top=20
Width=15
Caption=""
link(onCheck,10074770:doWork3,[(249,76)])
}
Add(CheckBox,5021034,259,70)
{
Left=140
Top=20
Width=15
Caption=""
link(onCheck,3693526:doWork3,[(298,76)])
}
Add(CheckBox,11012907,308,70)
{
Left=155
Top=20
Width=15
Caption=""
link(onCheck,6313614:doWork3,[(347,76)])
}
Add(CheckBox,14256340,357,70)
{
Left=170
Top=20
Width=15
Caption=""
link(onCheck,1438234:doWork3,[(396,76)])
}
Add(CheckBox,13650328,406,70)
{
Left=185
Top=20
Width=15
Caption=""
link(onCheck,12081558:doWork3,[(445,76)])
}
Add(CheckBox,11164589,455,70)
{
Left=200
Top=20
Width=15
Caption=""
link(onCheck,13452249:doWork3,[(494,76)])
}
Add(CheckBox,9522539,504,70)
{
Left=215
Top=20
Width=15
Caption=""
link(onCheck,13452249:doWork2,[(543,76)(543,62)])
}
Add(BitsToInt,15878853,315,168)
{
Count=8
link(onNumber,16026143:doEvent1,[])
link(Bit1,9522539:Checked,[(321,110)(510,110)])
link(Bit2,11164589:Checked,[(328,117)(461,117)])
link(Bit3,13650328:Checked,[(335,124)(412,124)])
link(Bit4,14256340:Checked,[(342,131)(363,131)])
link(Bit5,11012907:Checked,[(349,137)(314,137)])
link(Bit6,5021034:Checked,[(356,144)(265,144)])
link(Bit7,4672097:Checked,[(363,151)(216,151)])
link(Bit8,1151722:Checked,[(370,158)(167,158)])
}
Add(HubEx,11740348,196,56)
{
Angle=2
link(onEvent,6218044:doWork1,[(154,62)])
}
Add(HubEx,10074770,245,56)
{
Angle=2
link(onEvent,11740348:doWork2,[])
}
Add(HubEx,3693526,294,56)
{
Angle=2
link(onEvent,10074770:doWork2,[])
}
Add(HubEx,6313614,343,56)
{
Angle=2
link(onEvent,3693526:doWork2,[])
}
Add(HubEx,1438234,392,56)
{
Angle=2
link(onEvent,6313614:doWork2,[])
}
Add(HubEx,12081558,441,56)
{
Angle=2
link(onEvent,1438234:doWork2,[])
}
Add(HubEx,13452249,490,56)
{
Angle=2
link(onEvent,12081558:doWork2,[])
}
Add(Convertor,6266700,420,175)
{
Mode=8
Digits=8
link(onResult,2681980:doText,[])
}
Add(HubEx,6218044,150,168)
{
link(onEvent,15878853:doNumber,[])
}
Add(Hub,16026143,385,168)
{
link(onEvent1,15690841:doText,[(410,174)(410,132)])
link(onEvent2,6266700:doConvert,[])
}
Add(Label,15690841,455,126)
{
Left=140
Top=80
Width=59
Height=33
Font=[MS Sans Serif,18,1,0,1]
Caption="0"
AutoSize=1
Alignment=2
}

(Схему выкладывайте и в теги Code )
карма: 19

0
Ответов: 2193
Рейтинг: 673
#5: 2017-09-03 19:13:27 ЛС | профиль | цитата
Вот пример думаю разберетесь.
схема


Add(MainForm,2953706,196,259)
{
Width=548
Height=388
Position=1
}
Add(IntToBits,14862078,413,259)
{
Data_0=Integer(0)
Data_1=Integer(1)
link(onBit1,3815065:doCheck,[])
link(onBit2,12530837:doCheck,[])
link(onBit3,16462184:doCheck,[])
link(onBit4,1843033:doCheck,[])
link(onBit5,250875:doCheck,[])
link(onBit6,2247966:doCheck,[])
link(onBit7,15611935:doCheck,[])
link(onBit8,7004619:doCheck,[])
}
Add(BitsToInt,844738,483,420)
{
Count=8
link(onNumber,1189954:doText,[])
link(Bit1,3815065:Checked,[])
link(Bit2,12530837:Checked,[])
link(Bit3,16462184:Checked,[])
link(Bit4,1843033:Checked,[])
link(Bit5,250875:Checked,[])
link(Bit6,2247966:Checked,[])
link(Bit7,15611935:Checked,[])
link(Bit8,7004619:Checked,[])
}
Add(CheckBox,3815065,483,259)
{
Left=270
Top=120
Caption="0bit"
}
Add(CheckBox,12530837,490,266)
{
Left=270
Top=140
Caption="1bit"
}
Add(CheckBox,16462184,497,273)
{
Left=270
Top=160
Caption="2bit"
}
Add(CheckBox,1843033,504,280)
{
Left=270
Top=180
Caption="3bit"
}
Add(CheckBox,250875,511,287)
{
Left=270
Top=200
Caption="4bit"
}
Add(CheckBox,2247966,518,294)
{
Left=270
Top=220
Caption="5bit"
}
Add(CheckBox,15611935,525,301)
{
Left=270
Top=240
Caption="6bit"
}
Add(CheckBox,7004619,532,308)
{
Left=270
Top=260
Caption="7bit"
}
Add(Button,13288741,266,259)
{
Left=105
Top=175
Caption="IntToBin"
link(onClick,4436454:doData,[])
}
Add(Edit,3689525,350,182)
{
Left=175
Top=175
Text="34"
DataType=2
}
Add(DoData,4436454,350,259)
{
link(onEventData,14862078:doBits,[])
link(Data,3689525:Text,[])
}
Add(Button,6228561,420,420)
{
Left=350
Top=180
Caption="BinToInt"
link(onClick,844738:doNumber,[])
}
Add(Edit,1189954,574,420)
{
Left=420
Top=180
Text="0"
DataType=2
}

ibegen писал(а):
Для выбора коэффициента усиления -0й и 1й байты.
Тут наверное вы хотели написать 0й и 1й бит?
карма: 10

0
Ответов: 91
Рейтинг: 6
#6: 2017-09-03 19:20:05 ЛС | профиль | цитата
Спасибо огромное.
Ваши варианты похожи.
Я делал так же, но именно такой вариант я и хотел бы его избежать.

Мне надо изменять биты с помощью одного переключателя, как в моей схеме...
Блин.... не могу придумать как от одного переключателя два выхода сделать по условию.
карма: 0

0
Ответов: 2193
Рейтинг: 673
#7: 2017-09-03 19:29:45 ЛС | профиль | цитата
Как вариант:
схема

Add(MainForm,2953706,196,259)
{
Width=548
Height=388
Position=1
}
Add(Button,13288741,266,259)
{
Left=105
Top=175
Caption="IntToBin"
link(onClick,12642006:doConvert,[])
}
Add(Edit,3689525,308,182)
{
Left=175
Top=175
Text="34"
DataType=2
}
Add(Convertor,12642006,308,259)
{
Mode=8
Digits=8
link(onResult,11070076:doDelete,[])
link(Data,3689525:Text,[])
}
Add(Convertor,7822958,434,259)
{
Mode=7
link(onResult,8142315:doText,[])
}
Add(Edit,8142315,476,259)
{
Left=425
Top=165
Text="34"
DataType=2
}
Add(CheckBox,14899953,399,182)
{
Left=290
Top=130
Caption="5 bit"
}
Add(Delete,11070076,350,259)
{
Position=4
Count=1
link(onDelete,1504817:doInsert,[])
}
Add(Insert,1504817,392,259)
{
Position=4
link(onInsert,7822958:doConvert,[])
link(SubStr,14899953:Checked,[])
}
(проверьте значения, мог ошибиться, поправите сами)

Редактировалось 1 раз(а), последний 2017-09-03 22:13:06
карма: 10

0
Ответов: 91
Рейтинг: 6
#8: 2017-09-03 19:42:19 ЛС | профиль | цитата
sla8a, спасибо.
Это близко, но не то.... меняется только 5й бит.
А нужно что бы при выборе одного из 4х переключателей, изменялись 5й и 6й биты одновременно.
То есть переключатель 1 - код 00, 2 - 01, 3 - 10, 4 - 11...

Прошу прощения что наверное плохо объясняю.
Я просто думал что из схемы понятно...
карма: 0

0
Ответов: 2193
Рейтинг: 673
#9: 2017-09-03 20:02:16 ЛС | профиль | цитата
Проверяйте, корректируйте.
схема


Add(MainForm,2953706,56,259)
{
Width=548
Height=460
Position=1
}
Add(Edit,3689525,322,315)
{
Left=95
Top=25
Width=120
Text="34"
}
Add(Convertor,12642006,322,357)
{
Mode=8
Digits=8
link(onResult,15959931:doEvent1,[])
link(Data,3689525:Text,[])
}
Add(Convertor,7822958,525,371)
{
Mode=7
link(onResult,8142315:doText,[])
}
Add(Edit,8142315,567,371)
{
Left=95
Top=85
Width=120
Text=""
}
Add(Delete,11070076,406,364)
{
Position=4
Count=2
link(onDelete,1504817:doInsert,[])
}
Add(Insert,1504817,448,364)
{
Position=4
link(onInsert,15322706:doEvent1,[])
link(SubStr,10100681:String,[(461,352)(442,352)(442,429)(300,429)])
}
Add(RadioButton,1163945,154,518)
{
Left=15
Top=69
Caption="18 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,3961078:doWork4,[(212,524)(212,419)])
}
Add(RadioButton,2818853,154,476)
{
Left=15
Top=51
Caption="16 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,3961078:doWork3,[(207,482)(207,412)])
}
Add(RadioButton,7046497,154,434)
{
Left=15
Top=33
Caption="14 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,3961078:doWork2,[(202,440)(202,405)])
}
Add(RadioButton,171957,154,392)
{
Left=15
Top=15
Caption="12 bit"
Point(doKeyBack)
Point(onKeyDown)
link(onSelect,3961078:doWork1,[])
}
Add(StrList,10100681,273,350)
{
Strings=#2:00|2:01|2:10|2:11|
Point(onGetString)
Point(String)
Point(doGetString)
link(onGetString,12642006:doConvert,[])
}
Add(ChanelToIndex,3961078,224,392)
{
Count=4
link(onIndex,10100681:doGetString,[])
}
Add(Hub,15959931,371,357)
{
link(onEvent1,11864905:doText,[(392,363)(392,286)])
link(onEvent2,11070076:doDelete,[])
}
Add(Edit,11864905,399,280)
{
Left=95
Top=45
Width=120
Text=""
}
Add(Hub,15322706,497,364)
{
link(onEvent1,16096661:doText,[(521,370)(521,286)])
link(onEvent2,7822958:doConvert,[])
}
Add(Edit,16096661,532,280)
{
Left=95
Top=65
Width=120
Text=""
}
В строке младшие биты справа, так что смотрите какие значения вам нужны.
карма: 10

0
Ответов: 91
Рейтинг: 6
#10: 2017-09-03 20:14:23 ЛС | профиль | цитата
Спасибо!!!!
То что надо.

карма: 0

0
Ответов: 8885
Рейтинг: 823
#11: 2017-09-03 23:10:09 ЛС | профиль | цитата
ibegen, чуть попроще:
чуть


Add(MainForm,2953706,301,217)
{
link(onCreate,9786231:doWork1,[(340,237)])
}
Add(RadioButton,4901164,420,203)
{
Left=90
Top=30
Width=20
Caption=""
link(onSelect,13611141:doWork3,[(459,209)])
}
Add(RadioButton,4263670,469,203)
{
Left=110
Top=30
Width=20
Caption=""
link(onSelect,15361842:doWork3,[(508,209)])
}
Add(RadioButton,2451661,518,203)
{
Left=130
Top=30
Width=20
Caption=""
link(onSelect,14041978:doWork3,[(557,209)])
}
Add(RadioButton,9022065,567,203)
{
Left=150
Top=30
Width=20
Selected=0
Caption=""
link(onSelect,14041978:doWork2,[(613,209)(613,192)])
}
Add(Label,214251,476,147)
{
Left=90
Top=15
Width=75
Caption="11 10 01 00"
AutoSize=1
}
Add(Edit,1891160,301,266)
{
Left=35
Top=65
Width=30
Text="1"
DataType=2
link(onChange,9786231:doWork2,[])
}
Add(Math,11966234,364,266)
{
OpType=8
Op2=256
ResultType=0
link(onResult,15090239:doWork2,[])
link(Op1,1891160:Text,[(370,257)(356,257)(356,306)(307,306)])
}
Add(HubEx,13611141,455,186)
{
Angle=2
link(onEvent,15090239:doWork1,[(410,192)])
}
Add(HubEx,15361842,504,186)
{
Angle=2
link(onEvent,13611141:doWork2,[])
}
Add(HubEx,14041978,553,186)
{
Angle=2
link(onEvent,15361842:doWork2,[])
}
Add(Convertor,3053398,504,266)
{
Mode=8
Digits=8
link(onResult,1022571:doText,[])
}
Add(Label,1022571,560,266)
{
Left=85
Top=55
Width=105
Height=25
Font=[MS Sans Serif,14,1,0,1]
Caption=""
AutoSize=1
}
Add(Label,9989251,560,308)
{
Left=105
Top=90
Height=30
Font=[MS Sans Serif,14,1,0,1]
Caption=""
AutoSize=1
}
Add(MathParse,16546509,420,266)
{
DataCount=4
MathStr="((%2 + %4)>0)*16 + ((%2 + %3)>0)*32 + (%1 mod 16) + (%1 div 64)*64"
link(onResult,11593927:doEvent1,[])
link(X1,11966234:Result,[(426,257)(405,257)(405,306)(370,306)])
link(X2,4901164:Selected,[(433,250)(426,250)])
link(X3,4263670:Selected,[(440,243)(475,243)])
link(X4,2451661:Selected,[(447,252)(524,252)])
}
Add(Hub,11593927,462,266)
{
link(onEvent1,3053398:doConvert,[])
link(onEvent2,9989251:doText,[(491,279)(491,314)])
}
Add(HubEx,15090239,406,266)
{
link(onEvent,16546509:doCalc,[])
}
Add(HubEx,9786231,336,266)
{
link(onEvent,11966234:doOperation,[])
}

карма: 19

0
Ответов: 91
Рейтинг: 6
#12: 2017-09-05 12:29:23 ЛС | профиль | цитата
Спасибо Леонид.
карма: 0

0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)