반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 |
/*
* avr-0910.cpp
*
* Created: 2018-09-10 오전 9:20:31
* Author : USER
*/
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
#include "lcd.h"
#include <avr/interrupt.h>
#include <stdio.h>
void io_init(void)
{
MCUCR|=(1<<SRE) | (1<<SRW10);
XMCRA=(1<<SRL2) | (0<<SRL1) | (0<<SRL0) | (1<<SRW01) | (1<<SRW00) | (1<<SRW11);
XMCRB |= 0x00;
}
unsigned int count =0, sec=0;
ISR(TIMER0_OVF_vect){
TCNT0 =256-25;
count++;
if (count >625){
sec++; count=0;
}
}
int main(void)
{
/* Replace with your application code */
io_init();
lcd_init();
// 타이머 인터럽트 레지스터
TIMSK = 0x01; // R/W 선택 TIMER 0 사용
TCCR0 =0x07; // 분주비 1024
TCNT0 =256-25; // 0에서 시작 255가되어 256이 되면 OVF가 되어 인터럽트 구문을 실행한다.
/*
1/16000000 = 0.0000000625
분주비가 1024
0.0000000625 *1024 = 0.000064 // TCNT0가 1올라가는 속도.
ISR이 발생하는 시간 = 0.016384
약 61번이 OVF 인터럽트가 발생하면 1초가 된다.
*/
sei();
char temp[16];
while (1)
{
sprintf(temp,"%d",sec);
lcd_putsf(0,0,temp);
}
} |
cs |
// 해당 소스는 정확한 1초가 아니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 |
/*
* avr-0910.cpp
*
* Created: 2018-09-10 오전 9:20:31
* Author : USER
*/
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
#include "lcd.h"
#include <avr/interrupt.h>
#include <stdio.h>
void io_init(void)
{
MCUCR|=(1<<SRE) | (1<<SRW10);
XMCRA=(1<<SRL2) | (0<<SRL1) | (0<<SRL0) | (1<<SRW01) | (1<<SRW00) | (1<<SRW11);
XMCRB |= 0x00;
}
unsigned int count =0, sec=0;
ISR(TIMER0_OVF_vect){
TCNT0 =256-5;
count++;
if (count >500){
sec++; count=0;
}
}
int main(void)
{
/* Replace with your application code */
io_init();
lcd_init();
// 타이머 인터럽트 레지스터
TIMSK = 0x01; // R/W 선택 TIMER 0 사용
TCCR0 =0x04; // 분주비 64
TCNT0 =256-5; // 0에서 시작 255가되어 256이 되면 OVF가 되어 인터럽트 구문을 실행한다.
/*
1/16000000 = 0.0000000625
분주비가 64
0.0000000625 *64 = 0.000004 // TCNT0가 1올라가는 속도.
ISR이 발생하는 시간 = 0.000004
TCNT 250 회로 OVF 발생시 걸리는 시간 0.001
500번이 OVF 인터럽트가 발생하면 1초가 된다.
*/
sei();
char temp[16];
while (1)
{
sprintf(temp,"%d",sec);
lcd_putsf(0,0,temp);
}
} |
cs |
반응형
'Study > 8-bit MCUs' 카테고리의 다른 글
[NPAVR Board] AVR - Atmega128 (Step_Motor) 미완성 (0) | 2018.09.10 |
---|---|
[NPAVR Board] AVR - Atmega128 (시계만들기) (0) | 2018.09.10 |
[NPAVR Board] AVR - Atmega128 (Dot Matrix) (0) | 2018.09.04 |
[NPAVR Board] AVR - Atmega128 (keyMatrix) (0) | 2018.09.04 |
[NPAVR Board] AVR - Atemga128 (ADC, CDS) (0) | 2018.09.04 |