BASIC4MCU | 질문게시판 | 답변 : atmega2560에 관하여 질문드립니다.
페이지 정보
작성자 master 작성일2018-02-07 13:32 조회7,508회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=180
본문
1234567891011121314151617181920212223242526272829303132333435363738394041424344 #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 Channelif(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8; EICRA=0b11100000; }else{ cnt_falling=TCNT1L|(long)TCNT1H<<8; cnt_elev=(40000-cnt_rising+cnt_falling)%40000; EICRA=0b11110000; }}//interrupt[EXT_INT3]void ext_int3_isr(void){ //AILE Channelif(EICRA==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8; EICRA=0b10110000; }else{ cnt_falling=TCNT1L|(long)TCNT1H<<8; cnt_aile=(40000-cnt_rising+cnt_falling)%40000; EICRA=0b11110000; }}//interrupt[EXT_INT6]void ext_int6_isr(void){ //THRO Channelif(EICRB==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8; EICRB=0b11100000; }else{ cnt_falling=TCNT1L|(long)TCNT1H<<8; cnt_thro=(40000-cnt_rising+cnt_falling)%40000; EICRB=0b11110000; }}//interrupt[EXT_INT7]void ext_int7_isr(void){ //RUDD Channelif(EICRB==0b11110000){ cnt_rising=TCNT1L|(long)TCNT1H<<8; EICRB=0b10110000; }else{ cnt_falling=TCNT1L|(long)TCNT1H<<8; cnt_rudd=(40000-cnt_rising+cnt_falling)%40000; EICRB=0b11110000; }}//void main(void){DDRB=0b11111111;PORTD=0b00001100; //INT2,3PORTE=0b11000000; DDRE=0b00110000; //INT6,7EICRA=0b11110000; EICRB=0b11110000; EIMSK=0b11001100; //INT2,3 rising edge //INT6,7 rising edgeTCCR1A=0b10100010; TCCR1B=0b00011001; ICR1H=39999>>8; ICR1L=39999&0xFF;TCCR3A=0b10100010; TCCR3B=0b00011001; ICR3H=39999>>8; ICR3L=39999&0xFF;UCSR0B|=0x18; UBRR0L=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>>8; ICR1L=39999&0xFF;
쓸 때는 상위바이트부터 씁니다.
cnt_falling=TCNT1L|(long)TCNT1H<<8;
읽을 때는 하위 바이트부터 읽습니다.
댓글 1
조회수 7,508희안님의 댓글
희안 작성일나름 열심히 공부하고 짠건데 순서가 있는거였군요 ㅠㅠ 좋은 공부가 됬습니다 :) 감사합니다!!