질문게시판 > 답변 : atmega2560에 관하여 질문드립니다.

TODAY52 TOTAL124,255
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU | 질문게시판 | 답변 : atmega2560에 관하여 질문드립니다.

페이지 정보

작성자 master 작성일2018-02-07 13:32 조회294회 댓글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
#include <mega2560.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
#include <string.h>
#include <math.h>
//
typedef unsigned char byte;
//
long cnt_rising=0,cnt_falling=0,cnt_elev=0,cnt_aile=0,cnt_thro=0,cnt_rudd=0;
//
interrupt[EXT_INT2]void ext_int2_isr(void){ //ELEV Channel
  if(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8EICRA=0b11100000; }
  elsecnt_falling=TCNT1L|(long)TCNT1H<<8cnt_elev=(40000-cnt_rising+cnt_falling)%40000EICRA=0b11110000; }
}
//
interrupt[EXT_INT3]void ext_int3_isr(void){ //AILE Channel
  if(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8EICRA=0b10110000; }
  elsecnt_falling=TCNT1L|(long)TCNT1H<<8cnt_aile=(40000-cnt_rising+cnt_falling)%40000EICRA=0b11110000; }
}
//
interrupt[EXT_INT6]void ext_int6_isr(void){ //THRO Channel
  if(EICRB==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8EICRB=0b11100000; }
  elsecnt_falling=TCNT1L|(long)TCNT1H<<8cnt_thro=(40000-cnt_rising+cnt_falling)%40000EICRB=0b11110000; }
}
//
interrupt[EXT_INT7]void ext_int7_isr(void){ //RUDD Channel
  if(EICRB==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8EICRB=0b10110000; }
  elsecnt_falling=TCNT1L|(long)TCNT1H<<8cnt_rudd=(40000-cnt_rising+cnt_falling)%40000EICRB=0b11110000; }
}
//
void main(void){
  DDRB=0b11111111;
  PORTD=0b00001100;  //INT2,3
  PORTE=0b11000000;  DDRE=0b00110000;   //INT6,7
  EICRA=0b11110000;  EICRB=0b11110000;  EIMSK=0b11001100//INT2,3 rising edge //INT6,7 rising edge
  TCCR1A=0b10100010TCCR1B=0b00011001ICR1H=39999>>8ICR1L=39999&0xFF;
  TCCR3A=0b10100010TCCR3B=0b00011001ICR3H=39999>>8ICR3L=39999&0xFF;
  UCSR0B|=0x18UBRR0L=0x67;
  SREG|=0x80;
  while(1){
    printf("ELEV:%6ld / AILE:%6ld / THRO:%6ld / RUDD:%6ld\n",cnt_elev,cnt_aile,cnt_thro,cnt_rudd);
  }
}

 

16비트 레지스터를 바이트 단위로 읽거나 쓸 때에는 순서를 지켜야합니다.

 

 ICR1H=39999>>8ICR1L=39999&0xFF; 

쓸 때는 상위바이트부터 씁니다.

 

cnt_falling=TCNT1L|(long)TCNT1H<<8 

읽을 때는 하위 바이트부터 읽습니다. 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 294

희안님의 댓글

희안 작성일

나름 열심히 공부하고 짠건데 순서가 있는거였군요 ㅠㅠ 좋은 공부가 됬습니다 :) 감사합니다!!

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

게시물 검색

Privacy Policy
                   MCU BASIC ⓒ 2017 모바일버전으로보기