회원가입 ID/PW 찾기
AA
#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
  • No Profile

    자세한 소스 분석보다는 바꾸면 좋겠는 것을 알려 드립니다.

    1. uart 송신을 인터럽트가 아닌 폴링으로 처리하면 좋겠구요,

    2. 타이머 클럭을 32.768kHz 로 사용하면 좋겠네요,, 없으면 ...

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
  • '우리는 성인이 아니지만 약속을 지켰다'고 얼마나 많은 사람들이 그렇게 자랑할 수 있는가?
    - S.베케트
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.