회원가입 ID/PW 찾기
AA

1초 마다 LED와 오실로스코프에 결과 반영

프로그램 

#include <mega128.h>


volatile unsigned char count = 0 , interrupt_count = 0;

void initialize_timer();

interrupt [TIM0_OVF] void timer0_ovf(void)

{

    interrupt_count--;

    if(!interrupt_count){

        interrupt_count = 100;

        count ++;

        if(count>9)

            count = 0;

        PORTD = (count << 4);

    }

}

void main(void)

{

    initialize_timer();

    interrupt_count=100;

    DDRD = 0xf0;

    while(1);

}


void initialize_timer(void)

{

    TCNT0 = 0x70;

    TCCR0 = 0x07;

    TIMSK = 0x01;   

    #asm("sei");

    타이머카운터에대한 소스인데 책보고 대충짯는데 설명을 할수가 없네요 ㅠㅠ

댓글 1
  • No Profile

    전체적으로 보면 인터럽트 발생할때마다  프로그램 구조를 보면 대충 10ms 마다 인터럽트가 발생 하겠군요.
    10ms x 100 니까 1000ms = 1초 겠죠

    그때마다 portd 로 현재의 count 값을 출력 한다.......그렇게 설명하면 되겠습니다.

    타이머 관련해서는 첨부된 문서를 참조하세요......


    #include <mega128.h>


    volatile unsigned char count = 0 , interrupt_count = 0;  <== 외부메모리 Mapped I/O도 아닌데 굳이 volatile을 쓸 필요는...없다봅니다.

    void initialize_timer();   <===  함수원형 선언인데 main  함수보다 아래에 있어서 미리 선언 하는 겁니다. main() 위에 있다면 할필요 없습니다.

    interrupt [TIM0_OVF] void timer0_ovf(void)   <== Timer 0 에 대한 인터럽트 서비스 루틴 함수 지시어 입니다.

    {

        interrupt_count--;   <== 인터럽트 발생할 때마다 -1 하라는 뜻이죠...

        if(!interrupt_count){   <=== 0이라면....

            interrupt_count = 100;   <=== 다시  이 변수를 100으로 초기화 하라는 뜻이겠죠...

            count ++;                               <=== 얘는 interrupt_count  <-- 가 100->0 으로 될때마다 +1 이 되네요..

            if(count>9)                           <=== 마찬가지로 9보다 크다면...그러니까 10이 되겠네요..

                count = 0;                         <=== 다시 0으로 초기화 하네요...

            PORTD = (count << 4);   <==== 10보다 작다면 PORTD 에 count <<4   좌로 쉬프트한값 그러니까.  count x 16 한값을 출력하네요.. (여기서는 아래에 PortD 의 상위만 출력으로 정해놔서 그런가 봅니다)

        }

    }

    void main(void)

    {

        initialize_timer();    <== 타이머 초기화 함수 콜....

        interrupt_count=100;   <=== 얘를 100으로 초기화 하네요..

        DDRD = 0xf0;     <==  PORTD 의 상위 니블(7:4)을 출력으로 설정 하네요..

        while(1);                <== 무한루프로 빠지네요... 타이머 인터럽트가 있으니 상관없습니다.

    }


    void initialize_timer(void)   <== 타이머 초기화 함수네요...

    {

        TCNT0 = 0x70;  <== 카운터 초기값을 0x70으로 만드네요.....

        TCCR0 = 0x07;  <== Clock Select 인데요 데이타 쉬트를 보면 External Clock source on T0 pin, Clock on rising edge 라네요...
                                                      간단히 말하면 외부 클록 소스를 사용하고 Rising Edge에서 검출하네요 (그리고 다른것들은 기본값이니까 Overflow 되면 인터럽트 발생합니다)

        TIMSK = 0x01;      <== 인터럽트 플래그 Enable 시키네요..

        #asm("sei");      <== 인터럽트 활성화

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

search
번호 분류 제목 글쓴이 조회 수 날짜
66 펌웨어 & 코딩언어 HOT텍트로닉스(tektronix) 오실로스코프 질문드려요~~1 파괴지왕 1165 2010.06.24
65 펌웨어 & 코딩언어 HOTspice 프로그램을 만들고 싶습니다1 TreeOfDream 967 2010.06.21
64 펌웨어 & 코딩언어 HOTC언어 초보에요 ㅠㅠ 이쪽부분 간소화할려고하는데..조언좀..11 다크소마 1442 2010.06.19
63 펌웨어 & 코딩언어 HOTMFC 를 공부중입니다 API를 시작해야 하는데..3 TreeOfDream 1118 2010.06.11
62 펌웨어 & 코딩언어 HOT펌웨어 엔지니어입니다. 윈도우응용프로그램 MFC하고싶은데...6 상하이찬 1562 2010.06.02
61 펌웨어 & 코딩언어 HOT리눅스 기반 어셈블리어 작성했는데 자꾸 'command not found'라 뜨네요......2 하늘위의 성 1405 2010.05.30
펌웨어 & 코딩언어 HOT코드비젼 소스 설명좀 부탁드립니다 ㅠㅠ1 vsvm 2187 2010.05.24
59 펌웨어 & 코딩언어 HOT맥스포사의 mtm-cm3000 으로 리모콘 모듈이 조종 가능한가요? 철방이 874 2010.05.11
58 펌웨어 & 코딩언어 HOT코드비젼으로 컴파일해봤습니다...도움좀 주세요.4 푸후 1212 2010.05.04
57 펌웨어 & 코딩언어 HOT다시 작성합니다. MSDN 도움말 문제입니다. TreeOfDream 877 2010.04.29
56 펌웨어 & 코딩언어 HOT어셈블 도와주세요 ㅠㅠ1 마왕님 1024 2010.04.26
55 펌웨어 & 코딩언어 HOT왕초보 c언어 질문이요11 hshyo 1047 2010.04.19
54 펌웨어 & 코딩언어 HOT마이컴 제어하는 C언어 학습이 어디까지 이루어져야 할까요?8 봄날 1427 2010.04.17
53 펌웨어 & 코딩언어 HOT액세스 지정자에 대해서 궁금한 점이 있습니다. TreeOfDream 900 2010.04.17
52 펌웨어 & 코딩언어 HOT조이스틱 관련 Firmware,Driver 관련 조언 부탁드립니다.2 루키키 1086 2010.04.14
51 펌웨어 & 코딩언어 HOTc언어 배우려는 초보입니다.9 빛의속도 1021 2010.04.09
50 펌웨어 & 코딩언어 HOTzigbee 통신 프로그램 질문입니다!!5 소울 2442 2010.04.01
49 펌웨어 & 코딩언어 HOT비쥬얼 스튜디오 6.0에 관해서..3 꿇단지 1060 2010.03.24
48 펌웨어 & 코딩언어 HOTc언어 왕초보입니다. 좋은책 추천좀 해주세요10 circuit 1287 2010.03.15
47 펌웨어 & 코딩언어 HOT8051과 일반 C와 많이 차이나나요?5 개똥껄레 1093 2010.02.20
  • 무관심 때문에 사람은 실제로 죽기전에 죽어버린다.
    - 위젤
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.