ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
29 июня
241027
mazur (28.02.2011 16:06, просмотров: 102983)
Есть битовое поле. Скажем, 24 бита, то есть, 3 байта. И нужно проверить определенный бит. Когда писал проверочный код, это получилось 24 функции, которые отличались только номерами битов. Попытался возложить эту функцию микроконтроллеру. Стопорнулся на команде brcc. Если в байте одни нули, эта команда не работает. Получается еще один счетчик вводить. Кто как решает подобное? Process_Inputs_Change: Set_State _PROCESS_INPUTS,_PROCESS_INPUTS_NONE cbr FLAGS,1<<INPUTS_CHANGE_FLG ldix (INPUTS_CURRENT+INPUTS_BYTES_LENGHT) ldiz (Table_Inputs*2) Process_Inputs_Change_Cycle: lpm r16,Z+ cp r16,RSER lpm r16,Z cpc r16,RSER breq Process_Inputs_Change_End sbiw ZL,1 ldi CNT,INPUTS_BYTES_LENGHT in r16,SREG andi r16,0b11000010 ; I&1, T&1, H&0, S&0, V&0, N&0, Z&1, C&0 sbr r16,1<<SREG_Z mov RSREG,r16 Process_Inputs_Change_Cycle_0: lpm r16,Z+ ld r17,-X out SREG,RSREG cpc r16,r17 in RSREG,SREG dec CNT brne Process_Inputs_Change_Cycle_0 out SREG,RSREG breq Table_Inputs_Equal adiw ZL,3 adiw XL,INPUTS_BYTES_LENGHT rjmp Process_Inputs_Change_Cycle Table_Inputs_Equal: lpm r16,Z clr CNT ldix INPUTS_FLAGS Process_Inputs_Equal_Cycle: ld r17,X Process_Inputs_Equal_Cycle_0: inc CNT cp CNT,r16 breq Inputs_Num_CNT_Equal lsr r17 brcc Process_Inputs_Equal_Cycle_0 ; Не получается по этому флагу. Если нули, флаг всегда 0. adiw XL,1 rjmp Process_Inputs_Equal_Cycle Inputs_Num_CNT_Equal: sbrc r17,0 rjmp Input_Pressed Process_Inputs_Change_End: ret Input_Pressed: ret ;------------------------------------------------------------------------- .equ INPUT_1 = 0b000000000000000000000001 .equ INPUT_2 = 0b000000000000000000000010 .equ INPUT_3 = 0b000000000000000000000100 .equ INPUT_4 = 0b000000000000000000001000 .equ INPUT_5 = 0b000000000000000000010000 .equ INPUT_6 = 0b000000000000000000100000 .equ INPUT_7 = 0b000000000000000001000000 .equ INPUT_8 = 0b000000000000000010000000 .equ INPUT_9 = 0b000000000000000100000000 .equ INPUT_10 = 0b000000000000001000000000 .equ INPUT_11 = 0b000000000000010000000000 .equ INPUT_12 = 0b000000000000100000000000 .equ INPUT_13 = 0b000000000001000000000000 .equ INPUT_14 = 0b000000000010000000000000 .equ INPUT_15 = 0b000000000100000000000000 .equ INPUT_16 = 0b000000001000000000000000 .equ INPUT_17 = 0b000000010000000000000000 .equ INPUT_18 = 0b000000100000000000000000 .equ INPUT_19 = 0b000001000000000000000000 .equ INPUT_20 = 0b000010000000000000000000 .equ INPUT_21 = 0b000100000000000000000000 .equ INPUT_22 = 0b001000000000000000000000 .equ INPUT_23 = 0b010000000000000000000000 .equ INPUT_24 = 0b100000000000000000000000 ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- .equ _INPUT_1 = 1 .equ _INPUT_2 = 2 .equ _INPUT_3 = 3 .equ _INPUT_4 = 4 .equ _INPUT_5 = 5 .equ _INPUT_6 = 6 .equ _INPUT_7 = 7 .equ _INPUT_8 = 8 .equ _INPUT_9 = 9 .equ _INPUT_10 = 10 .equ _INPUT_11 = 11 .equ _INPUT_12 = 12 .equ _INPUT_13 = 13 .equ _INPUT_14 = 14 .equ _INPUT_15 = 15 .equ _INPUT_16 = 16 .equ _INPUT_17 = 17 .equ _INPUT_18 = 18 .equ _INPUT_19 = 19 .equ _INPUT_20 = 20 .equ _INPUT_21 = 21 .equ _INPUT_22 = 22 .equ _INPUT_23 = 23 .equ _INPUT_24 = 24 ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- .equ INPUT_1_FLG = 1<<0 .equ INPUT_2_FLG = 1<<1 .equ INPUT_3_FLG = 1<<2 .equ INPUT_4_FLG = 1<<3 .equ INPUT_5_FLG = 1<<4 .equ INPUT_6_FLG = 1<<5 .equ INPUT_7_FLG = 1<<6 .equ INPUT_8_FLG = 1<<7 .equ INPUT_9_FLG = 1<<0 .equ INPUT_10_FLG = 1<<1 .equ INPUT_11_FLG = 1<<2 .equ INPUT_12_FLG = 1<<3 .equ INPUT_13_FLG = 1<<4 .equ INPUT_14_FLG = 1<<5 .equ INPUT_15_FLG = 1<<6 .equ INPUT_16_FLG = 1<<7 .equ INPUT_17_FLG = 1<<0 .equ INPUT_18_FLG = 1<<1 .equ INPUT_19_FLG = 1<<2 .equ INPUT_20_FLG = 1<<3 .equ INPUT_21_FLG = 1<<4 .equ INPUT_22_FLG = 1<<5 .equ INPUT_23_FLG = 1<<6 .equ INPUT_24_FLG = 1<<7 ;------------------------------------------------------------------------- ;------------------------------------------------------------------------- #define tab_in(x) byte3(x), byte2(x), low(x) Table_Inputs: .db tab_in(INPUT_1), _INPUT_1, INPUT_1_FLG, ~(INPUT_1_FLG) .db tab_in(INPUT_2), _INPUT_2, INPUT_2_FLG, ~(INPUT_2_FLG) .db tab_in(INPUT_3), _INPUT_3, INPUT_3_FLG, ~(INPUT_3_FLG) .db tab_in(INPUT_4), _INPUT_4, INPUT_4_FLG, ~(INPUT_4_FLG) .db tab_in(INPUT_5), _INPUT_5, INPUT_5_FLG, ~(INPUT_5_FLG) .db tab_in(INPUT_6), _INPUT_6, INPUT_6_FLG, ~(INPUT_6_FLG) .db tab_in(INPUT_7), _INPUT_7, INPUT_7_FLG, ~(INPUT_7_FLG) .db tab_in(INPUT_8), _INPUT_8, INPUT_8_FLG, ~(INPUT_8_FLG) .db tab_in(INPUT_9), _INPUT_9, INPUT_9_FLG, ~(INPUT_9_FLG) .db tab_in(INPUT_10), _INPUT_10, INPUT_10_FLG, ~(INPUT_10_FLG) .db tab_in(INPUT_11), _INPUT_11, INPUT_11_FLG, ~(INPUT_11_FLG) .db tab_in(INPUT_12), _INPUT_12, INPUT_12_FLG, ~(INPUT_12_FLG) .db tab_in(INPUT_13), _INPUT_13, INPUT_13_FLG, ~(INPUT_13_FLG) .db tab_in(INPUT_14), _INPUT_14, INPUT_14_FLG, ~(INPUT_14_FLG) .db tab_in(INPUT_15), _INPUT_15, INPUT_15_FLG, ~(INPUT_15_FLG) .db tab_in(INPUT_16), _INPUT_16, INPUT_16_FLG, ~(INPUT_16_FLG) .db tab_in(INPUT_17), _INPUT_17, INPUT_17_FLG, ~(INPUT_17_FLG) .db tab_in(INPUT_18), _INPUT_18, INPUT_18_FLG, ~(INPUT_18_FLG) .db tab_in(INPUT_19), _INPUT_19, INPUT_19_FLG, ~(INPUT_19_FLG) .db tab_in(INPUT_20), _INPUT_20, INPUT_20_FLG, ~(INPUT_20_FLG) .db tab_in(INPUT_21), _INPUT_21, INPUT_21_FLG, ~(INPUT_21_FLG) .db tab_in(INPUT_22), _INPUT_22, INPUT_22_FLG, ~(INPUT_22_FLG) .db tab_in(INPUT_23), _INPUT_23, INPUT_23_FLG, ~(INPUT_23_FLG) .db tab_in(INPUT_24), _INPUT_24, INPUT_24_FLG, ~(INPUT_24_FLG) .db 0xFF, 0xFF ;-------------------------------------------------------------------------