Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- AC
- AIN0 = PE2 = 1,25 В.
- AIN1 = PE3 = входной сигнал.
- Таймер 1 будет считать время между прерываниями от AC.
- Предделитель таймера 1 = 1 (62.5 нс).
- Переполнение через 0,0040959375 сек.
- Создадим 16-разр. счетчик количества прерываний от таймера 1.
- Время = (Кол-во переполнений * 0,0040959375) + (Текущее значение таймера * 62,5 нс);
- Частота = 1 / Время;
- Дальше необходимо округлить частоту и вывести на LCD.
- Что сделать:
- 1. Настроить таймер 1.
- 2. Настроить AC.
- 3. Создать переменную - счетчик переполнений.
- */
- .DSEG
- .EQU OVF_CNTR = 0x200
- .CSEG
- .include "m2560def.inc"
- .ORG 0x0000
- RJMP Start_Init
- .ORG 0x0038
- RJMP Int_AC
- Start_Init:
- //SP = Ramend;
- LDI R16, low(Ramend)
- OUT SPL, R16
- LDI R16, high(Ramend)
- OUT SPH, R16
- /*AC_Mode_0
- LDI R16, 0b00001000
- OUT ACSR, R16*/
- /*AC_Mode_1*/
- //ACSR = 0b01001000;
- //ACSR = 0x48;
- LDI R16, 0b01001000
- OUT ACSR, R16
- //DDRA = 0xFF;
- LDI R16, 0xFF
- OUT DDRA, R16
- //PORTA = 0xFF;
- OUT PORTA, R16
- //sei();
- SEI
- ; \|/
- Main_Loop:
- RJMP Main_Loop
- /*******************************/
- Int_AC:
- /*
- Если (Таймер 1 вкл): выкл Таймер 1 и посчитать Время
- Иначе:
- 1. Обнулить Таймер 1.
- 2. Вкл Таймер 1.
- 3. Обнулить счетчик переполнений.
- */
- IN R17, PORTA
- DEC R17
- OUT PORTA, R17
- RETI
- INT_TIM1_OVF:
- //OVF_CNTR++;
- LDS R20, OVF_CNTR
- INC R20
- STS OVF_CNTR, R20
- RETI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement