in Temp1,PinA
какие в Temp1 биты равны "1" ???
как это узнать??
побитно перебирать сотни комбинаций как-то тяжеловато
я могу получать вот такие данные
0b00100110,
0b00001000
кусок кода скиньте плз (если не проблемно) буду очень рад
Код: Выделить всё
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
Код: Выделить всё
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