Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 9. Программирование таймеров 261 изойти (напомним, что счет в таймере идет независимо от программы) . На практике такое искажение все равно осциллографом не обнаруживается, так что можно быть спокойными . Если внутри у вас зудит от такого недостатка - выбирайте контроллер пошустрее (STM32) или вообще специализированный , как советует в своих статьях автор [1 6) . Полностью рабочую программу, осуществляющую эти функции, вы можете найти в архиве к этой книге, адрес которого указан во введении. А здесь мы приведем ее отдельные фрагменты. Сначала определения переменных (обратите внимание, что двухбайтовый счетчик count l : countO размещается в регистрах r2 5 : r2 4 , чтобы потом его можно было уве­ личивать одной командой adiw ) : . def temp =rl б . def countO = r2 4 ; счетчик байтов . def countl = r25 . de f temp2 =r1 9 Процедура инициализации Reset (листинг 9 . 1 4) . Reset : ldi out ldi out temp , low (RAМEND ) SPL, temp temp , high ( RAМEND ) SPH, temp ; указатель стека ; * * * * * * * * * * * * * * * * * * * PortB * * * * * * * * * * * * * * * * * * * * * * * ldi temp , ObO O O O O l l O ; PortB . 1 ( OClA) PortB . 0 ( OClB ) - Output out DDRB, temp ; * * * * * * * * * * * * * * * * * * * TIMERl * * * * * * * * * * * * * * * * * * * * * * * ldi temp, ОЫО О О ОО О l ; COM1Al=bit7 ; WGМl O=bitO неинв . FastPWМ выв А out TCCRlA, temp ldi temp , ОЬ00 0 0 1 0 0 1 ; bit3=WGM12 , CS12 : CS10= 0 0 1 = 1 : 1 out TCCRlB, temp ldi temp , ОЬ0 0 0 1 0 0 0 0 ; OCIElA = bit4 , TIMl_COMPA начинаем с А out TIMSK, temp ; * * * * * * * * * * * * * * * * * * * Registers * * * * * * * * * * * * * * * * * * * * * * * c l r countO ;младший байт счетчика циклов clr countl ; старший байт счетчика циклов clr temp2 ; старший байт величины синуса всегда О ldi ZH , HIGH (N_s in* 2 ) ; адрес таблицы sin в памяти - в Z ldi ZL , LOW ( N_s in* 2 )

RkJQdWJsaXNoZXIy MTExODQxMg==