8051 interrupt timer
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

8051 interrupt timer에 대한 보고서 자료입니다.

목차

1. Title

2. Name

3. Abstract

4. Background

5.Experimental Results
1. 실험1
A. Data
1)소스
2)동작 사진
B. Discussion

6. Analysis

7. Conclusion

8. References

본문내용

를 1씩 증가시키며 14가 되었을때 세그먼트 숫자를 1 증가시킨다. 시계를 나타내기위한 1/14분주이다.
실험2)
이번실험은 Timer 인터럽트를 이용한 스톱워치를 만드는 실험이다.이실험의 관건은
외부 인터럽트 버튼 (INT1)를 누르면 정지/시작을, HEX 파일을 전송한 직후에는 00:00으로 멈춰 있다가 버튼을 누르면 시간이 가도록 하는것이다.소스를 보면
void TM0_init()/*타이머 이니셜 함수 */
{
TMOD=0x00; // Timer0 8bit
TR0 = 0;
ET0 = 1; // Timer0 Interrupt Enable
TH0 = 0x00;
TL0= 0x00;
TR0 = 1;// Timer0 Run
}
이 부분은 타이머 인터럽트의 이니셜 함수이다.
TMOD는 레지스터 값중 타이머/카운터 모드0의 동작을 보이고 있다. 모드0은 가각 TL0의
하위 5비트와 TH0의 8비트가 연결되어 13비트 타이머/카운터로 동작한다.
TH0의 값이 0이고 TL0의 값이 0이므로 이다. 0부터 8292까지 카운터 하고 타이머 인터럽트가 발생하여 세그먼트 숫자가 하나씩 증가하게 된다.
참고로 사용하는 8051보드는 1머신 사이클이 0.1us이므로 sec가 되어 가장오른쪽에 있는 세그먼트는 약 0.01초로 카운터 되게 된다. 이걸 이용해 스탑워치를 만들었다.
TCON에서는 Timer0을 Run시켜주어야 하므로 값 1을 넣어 주었다. 그리고 IE레지스터
에는 Timer0 Interrupt 를 enable시켜주어야 하므로 값 1을 넣어 주었다.
void EX0_init()
{
EX1 = 1;
PX1 = 1;
IT1 = 1;
}
이 부분은 외부인터럽트1 을 제어하는 이니셜 함수이다.
EX1은 외부인터럽트1의 제어 비트로 이것을 쓰기위해 1을 넣어주었고 PX1은 외부 인터럽
트1의 우선순위를 정하기위해 1을 넣어준다. IT1은 외부 인터럽트 스위치인 INT1을 사용
하기위해 설정해 주는 것으로 INT1 스위치가 눌려지면 인터럽트 루틴 실행하게 한다.
main함수 중간에 모든 인터럽트설정을 on하기 전에 타이머 인터럽트와 외부인터럽트1을 사용하기위해 TM0_init() EX0_init()을 Initialization하였다.
int k=1,t=1;
EX0_INTR() interrupt 2{
k++;
t = k%2;
}
이 EX0_INTR() 함수는 외부 인터럽트의 서비스 루틴으로 외부 인터럽트가 발생하면(즉 외부인터럽트 스위치인 INT1을 누르면) 이 루틴을 실행하게 된다. 전역변수로 k 와 t를 설정하고 k값을 계속 증가시킬때 그것을 2로 나누게되면 나머지값인 0또는1을 t에 할당함을 알수 있다.
TM0_INTR() interrupt 1 {
if(t==0) cnt_segdata(); //t=0이면 세그먼트가 현재값을 그대로 유지
}
이 소스에서 나온 함수는 TM0_INTR(), 즉 타이머 인터럽트의 서비스 루틴이다.
외부인터럽트에서 전역변수 t값이 0이되면 cnt_segdata()가 실행되므로 세그먼트의 숫자가 올라가게 된다. 여기서 INT1스위치를 한번더 누르게 되면 k값은 1이 증가하게 되고 t값은 1이 되게 된다. 그러므로 cnt_segdata()가 실행이 되지 않으므로 한 개의 숫자값을 계속 유지 하게 된다.
6. Conclusion
이번 주는 8051보드의 외부인터럽트와 타이머 인터럽트를 이용한 스톱워치와 시계를 만들어 보는 시간이었다. 처음 시작할때는 인터럽트에 대한 개념이 정확히 서지 않아 매우 힘들었다.
특히 타이머 인터럽트와 외부인터럽트를 먼저 이니셜하고 따로 루틴을 만들어야 동작을 한다는 부분을 이해하기 매우 힘들었던것 같다. 또한 일반적인 C 언어에서 함수와 다른 방법
으로 함수가 쓰이기도 하여 혼란스럽기도 하였다. 하지만 알고 나니 매우 쉽게 다룰 수 있
었던것 같다. 이번 실험에서 INT1 스위치를 한번 눌렀을때 세그먼트의 숫자가 올라가고
또 한번 눌렀을때는 그 숫자 그대로 멈춰지며, 다시 한번 눌렀을때에는 다시 숫자가 올라
가는 소스를 꾸미는것이 중점이었던 것 같다.이것을 토대로 일반적으로 쓰이는 스탑워치
의 가능성을 알아 볼수 있었던 좋은 기회였던 것 같다.
7. References
1) Register
TCON 레지스터의 하위 4 비트는 외부 인터럽트에 관계된 비트이다.
최 하위의 IT0 (Interrupt type 0) 는 외부 인터럽트 0 의 입력형태를 결정하는 비트이다. IT0 가 1 이 되면 외부 인터럽트 0 는 입력 신호의 하강 모서리(에지)에서 인터럽트를 발생시킨다. IT0 가 0 이면 입력신호가 L(낮은) 레벨에서 인터럽트를 발생시킨다.
IE0 는 인터럽트 요구 플래그로서 인터럽트가 들어 왔다는 것을 알리는 신호이다. 이 플래그가 1 되려면 외부 인터럽트는 에지트리거 모드로 설정이 되어 있어야 한다.
하위 4 비트는 타이머/카운터 0 에 관계된 비트이고, 상위 4 비트는 타이머/카운터 1 에 관계된 비트이다.
타이머/카운터 모드1은 TH0, TL0(타이머/카운터 0) 또는 TH1, TL1(타이머/카운터 1) 을
이용한 16 비트 업 카운터이다. 1 머신 사이클 (내부 시스템 클럭 12 개) 마다 시정수로 설정된 16 비트 값을(TH, TL) 하나 씩 증가시키고, 이값이 0xFFFF 에서 0x0000 이 되면 (오버플로우 발생) 타이머/카운터 인터럽트를 발생시킨다. (TF0 또는 TF1 이 1 이 됨)
IP 레지스터는 인터럽트의 우선순위를 설정하는 레지스터이다.
특별한 설정이 없으면 외부 인터럽트 0 가 우선순위가 제일 높고 그 다음이 타이머/카운터 0 ... 순서가 된다. 인터럽트의 우선순위는 2 레벨로 되어 있다. IP 레지스터의 각 비트를 1 로하면 높은 레벨이 되고, 0 으로 하면 낮은 레벨이 된다. 인터럽트중에 다른 인터럽트가 발생하는 다중 인터럽트는 우선순위 레벨이 높은 인터럽트만 받아들인다
2) Eternal Interrupt 회로
3)참고문헌
*8051 & C 프로그래밍 (세화출판)
*8051 회로제작에서 프로그램까지 (이동욱 안도량 저 인터비젼)
*http://cafe.daum.net/8051plus
  • 가격2,000
  • 페이지수11페이지
  • 등록일2007.01.14
  • 저작시기2006.6
  • 파일형식한글(hwp)
  • 자료번호#387530
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니