как в АСМе узнать какие биты в данном РОНе =1?
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
как в АСМе узнать какие биты в данном РОНе =1?
кто сталкивался помогите плз
in Temp1,PinA
какие в Temp1 биты равны "1" ???
как это узнать??
побитно перебирать сотни комбинаций как-то тяжеловато
я могу получать вот такие данные
0b00100110,
0b00001000
кусок кода скиньте плз (если не проблемно) буду очень рад
in Temp1,PinA
какие в Temp1 биты равны "1" ???
как это узнать??
побитно перебирать сотни комбинаций как-то тяжеловато
я могу получать вот такие данные
0b00100110,
0b00001000
кусок кода скиньте плз (если не проблемно) буду очень рад
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
я понял что надо массивом проверять, только не въехать так сразу
и ктому же там на С всё
опять же если я начну изучать С у меня времени реально уйдет очень много
а я сейчас почти все сделал осталось разобраться с этим вопросом и
ЕЩЕ ОДНИМ ВОПРОСОМ:
- как выяснить что больше Temp4 или Temp5 ?????
и ... можно сдавать программу в прошивку
и ктому же там на С всё
опять же если я начну изучать С у меня времени реально уйдет очень много
а я сейчас почти все сделал осталось разобраться с этим вопросом и
ЕЩЕ ОДНИМ ВОПРОСОМ:
- как выяснить что больше Temp4 или Temp5 ?????
и ... можно сдавать программу в прошивку
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
- P S
- Открыл глаза
- Сообщения: 62
- Зарегистрирован: Вс авг 20, 2006 21:04:41
- Откуда: Москва
- Контактная информация:
На асме не скажу, но идея у меня такая: методом последовательного приближения. Т.е.
a:=Temp1; bit[1]....bit[7]:=0;
if a>=128 then begin bit7:=1; a:=a-128 end;
if a>=64 then begin bit6:=1; a:=a-64 end;
if a>=32 then begin bit5:=1; a:=a-32 end;
if a>=16 then begin bit4:=1; a:=a-16 end;
if a>=8 then begin bit3:=1; a:=a-8 end;
if a>=4 then begin bit2:=1; a:=a-4 end;
if a>=2 then begin bit1:=1; a:=a-2 end;
if a>=1 then bit0:=1
Где-то так. Это идея, которую можно ещё оптимизировать под свои цели. А вообще так работают многие АЦП
a:=Temp1; bit[1]....bit[7]:=0;
if a>=128 then begin bit7:=1; a:=a-128 end;
if a>=64 then begin bit6:=1; a:=a-64 end;
if a>=32 then begin bit5:=1; a:=a-32 end;
if a>=16 then begin bit4:=1; a:=a-16 end;
if a>=8 then begin bit3:=1; a:=a-8 end;
if a>=4 then begin bit2:=1; a:=a-4 end;
if a>=2 then begin bit1:=1; a:=a-2 end;
if a>=1 then bit0:=1
Где-то так. Это идея, которую можно ещё оптимизировать под свои цели. А вообще так работают многие АЦП
МуррррК
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
спасибо всем что не оставили
за выходные не нытьем так каканием вот что получилось
Мрррррр рррр
жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
ТЯПЕРИЧА другой ВОПРОС
как мне передать регистры скажем R21,22,23 (РОН) Блоку Управления??
Характеристика обмена:
- скорость обмена 19200 бит\с
- проверка четности - нет
- один стартовый бит
- два стоп бита
- режим обмена - RTU
связь с использованием протокола MODBUS (похоже наш протокол, т.к. не встречался раньше с ним.
за выходные не нытьем так каканием вот что получилось
Код: Выделить всё
Start:
in Temp1,PinA
cpse Temp1,0 ;данные есть?? в порту А
rjmp Not_Zero ;если НЕ НОЛЬ в порту А
rjmp Zero ;если НОЛЬ в порту А
ret
Opros_1:
cpse Temp2,0 ;ОПРОС первый?
rcall Opros_2 ; если ОПРОС не первый --переход
inc Temp2 ; если ОПРОС первый увеличиваем счетчик ОПРОСОВ
rcall Delay ;-----задержка
ret
Not_Zero: ; ---==// поступили данные на входе ПОРТА *А* \\==---
inc Temp5 ;увеличим счетчик ЕДИНИЦ
rcall Opros_1
rjmp Start ;--go to Start--
Zero: ; ---==// нет данных на входе ПОРТА *А* \\==---
inc Temp4
rcall Compare_T45 ;проверяем, если у нас были ЕДИНИЦЫ - РеСтарт!!!
rcall Opros_1
rjmp Start ;--go to Start--
Opros_2:
cpse Temp2,1 ;ОПРОС второй?
rcall Shag_PB ; ОПРОС третий!! --переход
ret
;*************************************************
;СРАВНЕНИЕ ПЕРЕМЕННЫХ нолЕВЫХ и единиц
Compare_T45: ;уходит на СТАРТ, если НОЛей ((1) или (2 и 1-единица))
cp Temp4,Temp5 ;--это у нас для все остальных подпрограмм
breq Clr_S
cpi Temp5,1 ;ЭТО у нас для если все НОЛики и 1 иголочка!!!
breq Clr_S
ret
Clr_S:
rcall Clear_S
Rcall Delay
rjmp Start
;**************-конец сравнения-******************
Clear_s: ;Clear RON 4,5,2
ldi Temp4,0 ;в НОЛЬ --счетчик "нулей"
ldi Temp5,0 ;в НОЛЬ --счетчик "единиц"
ldi Temp2,0 ;в НОЛЬ --счетчик "опросов"
ret
Мрррррр рррр
жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
ТЯПЕРИЧА другой ВОПРОС
как мне передать регистры скажем R21,22,23 (РОН) Блоку Управления??
Характеристика обмена:
- скорость обмена 19200 бит\с
- проверка четности - нет
- один стартовый бит
- два стоп бита
- режим обмена - RTU
связь с использованием протокола MODBUS (похоже наш протокол, т.к. не встречался раньше с ним.
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
угу, спасибо
век живи век учись
тут новый вариант
в принципе, здесь другим манером сделать как мне кажется нельзя
это наиболее оптимальный вариант
ХОТЯ, если есть варианты жду ОТВЕТов...
век живи век учись
тут новый вариант
Код: Выделить всё
Start:
in Temp1,PinA
ldi Temp3,0
cpse Temp1,Temp3 ;данные есть?? в порту А
rjmp Not_Zero ;если НЕ НОЛЬ в порту А
rjmp Zero ;если НОЛЬ в порту А
ret
Opros_1:
ldi Temp3,0
cpse Temp2,Temp3;ОПРОС первый?
rcall Opros_2 ; если ОПРОС не первый --переход
inc Temp2 ; если ОПРОС первый увеличиваем счетчик ОПРОСОВ
rcall Delay ;-----задержка
ret
Not_Zero: ; ---==// поступили данные на входе ПОРТА *А* \\==---
inc Temp5 ;увеличим счетчик ЕДИНИЦ
rcall Opros_1
rjmp Start ;--go to Start--
Zero: ; ---==// нет данных на входе ПОРТА *А* \\==---
inc Temp4
rcall Compare_T45 ;проверяем, если у нас были ЕДИНИЦЫ - РеСтарт!!!
rcall Opros_1
rjmp Start ;--go to Start--
Opros_2:
ldi Temp3,1
cpse Temp2,Temp3 ;ОПРОС второй?
rcall Shag_PB ; ОПРОС третий!! --переход
ret
Shag_PB:
cpi Temp0,0 ;здесь мы пытаемся начать работу с Портом В
breq Temp0_Step ;присвоить Порту В 0b0001000 & Go to !!!-Start-!!!
cpi Temp1,0 ;в порту А ПУСТО??
breq Temp0_Step ;в Порту А данных нет --проверяем следующий столбец
rjmp Identifer ;идентифицируем нажатую кнопушку
;*************************************************
;СРАВНЕНИЕ ПЕРЕМЕННЫХ нyлЕВЫХ и единиц
Compare_T45: ;уходит на СТАРТ, если НОЛей ((1) или (2 и 1-единица))
cp Temp4,Temp5 ;--это у нас для все остальных подпрограмм
brsh Clr_S
cpi Temp5,1 ;ЭТО у нас для если все НОЛики и 1 иголочка!!!
breq Clr_S
ret
Clr_S:
rcall Clear_S
Rcall Delay
rjmp Start
;**************-конец сравнения-******************
Clear_s: ;Clear RON 4,5,2
ldi Temp4,0 ;в НОЛЬ --счетчик "нулей"
ldi Temp5,0 ;в НОЛЬ --счетчик "единиц"
ldi Temp2,0 ;в НОЛЬ --счетчик "опросов"
ret
в принципе, здесь другим манером сделать как мне кажется нельзя
это наиболее оптимальный вариант
ХОТЯ, если есть варианты жду ОТВЕТов...
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация: