Здравствуйте. Возможно глупый вопрос, но я окончательно запутался с арифметикой 16 и 8 битных значений. 16 разрядный таймер контроллера считает внешнии импульсы. Периодически он переполняется, количество переполнений я считаю в отдельную переменную. (К сожалению все таймеры в контроллере задействованы, поэтому из двух 16 разрядных, сделать один 32 разрядный не получится.) Итого, с учетом всех переполнений, у меня максимально может получится 19 разрядное число. Которое мне нужно поделить на 8, то есть сдвинуть на 3 разряда вправо, чтобы оно стало 16 разрядным. и затем вычесть из получившегося значения 0x07FF.
На ассемблере эту задумку я осуществить могу, с помощью команд LSR, SUBI, SBCI и оперируя тремя регистрами. А на С не получается. Городить вставки ассемблера в код на С не хочу. Пользуюсь AVR Studio.
Надеюсь на вашу помощь, или хотя бы на ссылку на литературу где могу прочитать про это.
|