Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
262 Часть 111. Практическое программирование микроконтроллеров АVR sei ; разрешаем прерывания Gcykle : ; основной цикл пустой rjmp Gcykle Таблица 3 1 2 значений полупериода синуса в масштабе 0 . . 255 градаций - сразу после таблицы прерываний (листинг 9 . 1 5) . . org INT_VECTORS_S I ZE ; начинаем с адреса после таблицы векторов N_s in : ; 3 12 точек = 0 1 3 8h . dЬ О , 3 , 5 , 8 , 1 0 , 1 3 , 1 5 , 1 8 , 2 1 , 2 3 , 2 6 , 2 8 , 3 1 , 3 3 , 3 6 , 3 8 , 4 1 , 4 3 , 4 6 , 4 8 , 51 , 5 4 , 5 6 , 5 9 , 61 , 64 , 6 6 , 68 , 7 1 , 7 3 , 7 6 , 7 8 , 8 1 , 83 , 8 6 , 8 8 , 90 , 93 , 95 , 9 8 , 1 00 , 102 , 1 05 , 1 07 , 10 9 , 1 12 , 1 1 4 , 1 1 6 , 1 1 9 , 12 1 , 1 2 3 , 1 25 , 12 8 , 1 30 , 1 32 , 13 4 , 1 3 6 , 1 38 , 1 4 1 , 1 4 3 , 1 4 5 , 1 4 7 , 1 4 9 , 1 5 1 , 1 5 3 , 1 5 5 , 1 57 , 1 5 9 , 1 6 1 , 1 6 3 , 1 6 5 , 1 67 , 1 6 9 , 1 7 1 , 1 7 3 , 1 7 5 , 1 7 7 , 1 7 8 , 1 8 0 , 1 82 , 1 8 4 , 1 8 6 , 1 8 7 , 1 8 9 , 1 9 1 , 1 93 , 1 9 4 , 1 9 6 , 1 9 8 , 1 9 9 , 2 0 1 , 202 , 2 0 4 , 2 0 5 , 2 07 , 2 0 8 , 2 1 0 , 2 1 1 , 2 1 3 , 2 1 4 , 2 1 6 , 2 17 , 2 1 8 , 22 0 , 2 2 1 , 222 , 223 , 22 5 , 2 2 6 , 22 7 , 228 , 22 9 , 2 3 0 , 2 3 1 , 2 3 3 , 23 4 , 2 35 , 2 3 6 , 2 37 , 2 3 8 , 2 3 8 , 2 3 9 , 2 4 0 , 2 4 1 , 2 4 2 , 2 4 3 , 2 4 3 , 2 4 4 , 2 4 5 , 2 4 6 , 2 4 6 , 2 4 7 , 2 4 8 , 2 4 8 , 2 4 9 , 2 4 9 , 2 50 , 2 50 , 2 5 1 , 25 1 , 2 52 , 2 52 , 2 52 , 2 53 , 2 53 , 2 53 , 2 5 4 , 2 5 4 , 25 4 , 254 , 25 5 , 255 , 2 5 5 , 2 5 5 , 2 5 5 , 255 , 2 55 , 2 55 , 2 55 , 2 55 , 2 55 , 2 55 , 2 5 4 , 2 54 , 2 5 4 , 2 54 , 2 53 , 2 5 3 , 253 , 252 , 2 52 , 252 , 2 51 , 2 5 1 , 2 50 , 2 5 0 , 2 4 9 , 2 4 9 , 2 4 8 , 2 4 8 , 2 4 7 , 2 4 6 , 2 4 6 , 2 4 5 , 2 4 4 , 2 4 3 , 2 4 3 , 2 4 2 , 2 4 1 , 2 4 0 , 2 3 9 , 2 3 8 , 2 3 8 , 237 , 2 3 6 , 2 3 5 , 2 3 4 , 2 33 , 2 3 1 , 230 , 2 2 9 , 228 , 22 7 , 2 2 6 , 22 5 , 223 , 222 , 2 2 1 , 2 2 0 , 2 1 8 , 2 1 7 , 2 1 6 , 2 1 4 , 2 1 3 , 2 1 1 , 2 1 0 , 2 0 8 , 2 07 , 2 0 5 , 2 0 4 , 2 02 , 2 01 , 1 9 9 , 1 9 8 , 1 9 6 , 1 94 , 1 93 , 1 9 1 , 1 8 9 , 1 8 7 , 1 8 6 , 1 8 4 , 1 8 2 , 1 8 0 , 1 7 8 , 1 7 7 , 1 7 5 , 1 73 , 1 7 1 , 1 6 9 , 1 67 , 1 6 5 , 1 63 , 1 6 1 , 1 5 9 , 1 57 , 1 5 5 , 1 53 , 1 5 1 , 1 4 9 , 1 4 7 , 1 4 5 , 1 4 3 , 1 4 1 , 13 8 , 1 3 6 , 1 3 4 , 132 , 1 30 , 12 8 , 1 2 5 , 123 , 12 1 , 1 1 9 , 1 1 6 , 1 1 4 , 1 1 2 , 1 0 9 , 1 07 , 1 05 , 102 , 1 0 0 , 9 8 , 95 , 93 , 90 , 8 8 , 8 6 , 8 3 , 8 1 , 7 8 , 7 6 , 7 3 , 7 1 , 68 , 6 6 , 6 4 , 6 1 , 5 9 , 5 6 , 54 , 51 , 4 8 , 4 6 , 4 3 , 4 1 , 3 8 , 3 6 , 3 3 , 31 , 2 8 , 2 6 , 2 3 , 2 1 , 1 8 , 1 5 , 1 3 , 1 0 , 8 , 5 , 3 , О Прерывание Timer l Compare А (листинг 9 . 1 6) . TIMl СОМРА : cpi count0 , $ 3 8 ; сравниваем с 3 1 2 ldi temp , $ 0 1 ере countl , temp brlo continueA ; если меньше 3 1 2 , на продолжение ldi ZH, HIGH ( N_sin* 2 ) ; адрес таблицы sin в памяти - в Z ldi ZL, LOW (N_s in* 2 ) clr countO clr count l ; переключаем на В ldi temp, Ob0 0 1 0 0 0 0 l ; COM1Bl=bit5 WGMl O=bitO неинв . FastPWМ выв В out TCCRlA, temp ldi temp, ОЬ0 0 0 0 1 0 0 0 ; OCIElB = bit 3 , T IMl_COMPB включаем out TIMSK, temp cbi PortB , l ; нa всякий случай сброс OClA reti ; выход из прерывания continueA : ; продолжаем счет
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==