ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
29 июня
244838 Топик полностью
Timlansen (25.03.2011 01:03 - 21:35, просмотров: 258) ответил mazur на Есть битовое поле. Скажем, 24 бита, то есть, 3 байта. И нужно проверить определенный бит. Когда писал проверочный код, это получилось 24 функции, которые отличались только номерами битов. Попытался возложить эту функцию микроконтроллеру.
Сорри, не могу предыдущий свой мусор редактировать. Вот что нацарапал, очень похоже на один из прошедших вариантов. Произвольный размер поля (от 1 до 256 бит). ;XH:XL -> Input ;указатель на поле ;R15 - test bit number ;R16 - lasr bit number .def Addr =R15 ;номер тестируемого бита .def Last =R16 ;Номер последнего бита в поле, или размер -1 .def Bit =R18 .def Zero =R2 .def Result =R0 ;на выходе Result = 0:1 .def Error =R1 Test_Bit: [CLR Zero] CLR Error CP Last, Addr BRCC Test_Bit_01 INC Error RET Test_Bit_01: MOV ZL, Addr ANDI ZL, 0x07 LDI ZH, high(Powerof2<<1) ;был неправ ADIW ZL, low (Powerof2<<1) ;был неправ LPM Bit, Z LSR Addr LSR Addr LSR Addr MOVW ZL, XL ADD ZL, Addr ADC ZH, Zero LD Result, Z AND Result, Bit LDI Bit, 1 IN Result, SREG LSR Result AND Result, Bit EOR Result, Bit RET Powerof2: .db 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 без проверок и с искажением указателя: ;XH:XL -> Input ;указатель на поле ;R15 - test bit number ;R16 - lasr bit number .def Addr =R15 ;номер тестируемого бита .def Last =R16 ;Номер последнего бита в поле, или размер -1 .def Bit =R18 .def Zero =R2 ;на выходе светится флаг Z (SREG) Test_Bit: [CLR Zero] MOV ZL, Addr ANDI ZL, 0x07 LDI ZH, high(Powerof2<<1) ADIW ZL, low (Powerof2<<1) LPM Bit, Z LSR Addr LSR Addr LSR Addr ADD XL, Addr ADC XH, Zero LD Addr, X AND Addr, Bit RET Powerof2: .db 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80