#include <mega128.h> // mega128 헤더파일 사용
unsigned int cnt=0, sec=0; // cnt 와 sec를 int 형으로 선언
Byte *ptr;
char E_Welcom[]="2006142033/r/n";
char H_Welcom[]="2006124001";
interrupt [USART0_DRE] void usart0_transmit(void)
{
UDR0 = *ptr;
ptr++;
if(*ptr==0)
{
if(count==0)
{
ptr=E_Welcom;
}
else
{
ptr=H_Welcom;
}
}
}
void Init_USART0(void)
{
UCSR0B = (1<<RXCIE0) | (1<<UDRIE0) | (1<<RXEN0) | (1<<TXEN0);
UCSR0A = 0X00;
UCSR0C = 0X06;
UBRR0H = 0X00;
UBRR0L = 0X07;
SEI();
}
void InterTimer_init(void) //타이머 초기화 함수.
{
TCCR0 |= (1<<WGM01); //CTC모드로 설정
TCCR0 |= (1<<CS01)|(1<<CS00)|(1<<CS02); //1024분주 프리스케일러
OCR0 = 143; //14.7456MHz/1024분주 /(1+143) = 100Hz =10ms 마다 출력 비교를 한다
TIMSK = (1 << OCIE0); //타이머/카운터0 출력 비교 인터럽트 허가
SREG |= 0x80; //타이머/카운터0 출력 비교 인터럽트 허가
}
interrupt[TIM0_COMP] void Clock_timer(void) //10ms마다 인터럽트 발생
{
cnt++; //cnt 1 증가
if(cnt == 100) //cnt가 100이 되었을때 조건문 안에 명령 수행
{
cnt = 0; //cnt를 0으로 초기화하고
sec++; //sec 1증가
}
}
void main(void)
{
Init_USART0();
InterTimer_init(); //인터럽트,타이머 초기화 함수 호출
ptr =0;
while(1)
{
if(sec)
{
if(sec%2==0)
{
ptr=E_Welcom;
}
else
{
ptr=H_Welcom;
}
}
}
}
1교간격으로 2011와 2012가 교대로 출력되는 소스를 구현했는데 안되네요 ㅠ
출력은 하이퍼터미널로 확인합니다.
자세한 소스 분석보다는 바꾸면 좋겠는 것을 알려 드립니다.
1. uart 송신을 인터럽트가 아닌 폴링으로 처리하면 좋겠구요,
2. 타이머 클럭을 32.768kHz 로 사용하면 좋겠네요,, 없으면 ...