BASIC4MCU | AVR 따라하기 | 2015년 강좌 | 100 - [타이머인터럽트-14] 스위치 8개 읽어서 LED에 출력 (포트 다이렉트)
페이지 정보
작성자 키트 작성일2017-08-23 16:45 조회3,226회 댓글0건본문
123456789101112131415161718192021222324252627282930 //--------------------------------------------------------// CVAVR// [타이머인터럽트-14] 스위치 8개 읽어서 LED에 출력 (포트 다이렉트)//--------------------------------------------------------#include <mega128.h>//char cnt=0;//interrupt [TIM1_COMPA] void timer1_compa_isr(void){ // 10msswitch(cnt){case 0: PORTA.0=!PINE.0; break;case 1: PORTA.1=!PINE.1; break;case 2: PORTA.2=!PINE.2; break;case 3: PORTA.3=!PINE.3; break;case 4: PORTA.4=!PINE.4; break;case 5: PORTA.5=!PINE.5; break;case 6: PORTA.6=!PINE.6; break;case 7: PORTA.7=!PINE.7; break;}if(++cnt>7)cnt=0;}//void main(void){PORTE=0xFF; DDRA=0xFF;TCCR1B=0x0A; OCR1A=19999; TIMSK=0x10; //10msSREG|=0x80;while(1){}}cs
123456789101112131415161718192021222324252627282930 //--------------------------------------------------------// AVRStudio// [타이머인터럽트-14] 스위치 8개 읽어서 LED에 출력 (포트 다이렉트)//--------------------------------------------------------#include <avr/io.h>#include <avr/interrupt.h>//volatile char cnt=0;//ISR(TIMER1_COMPA_vect){ // 10msswitch(cnt){case 0: if(!(PINE&0x01))PORTA|=0x01; else PORTA&=~0x01; break;case 1: if(!(PINE&0x02))PORTA|=0x02; else PORTA&=~0x02; break;case 2: if(!(PINE&0x04))PORTA|=0x04; else PORTA&=~0x04; break;case 3: if(!(PINE&0x08))PORTA|=0x08; else PORTA&=~0x08; break;case 4: if(!(PINE&0x10))PORTA|=0x10; else PORTA&=~0x10; break;case 5: if(!(PINE&0x10))PORTA|=0x20; else PORTA&=~0x20; break;case 6: if(!(PINE&0x10))PORTA|=0x40; else PORTA&=~0x40; break;case 7: if(!(PINE&0x10))PORTA|=0x80; else PORTA&=~0x80; break;}if(++cnt>7)cnt=0;}//int main(void){PORTE=0xFF; DDRA=0xFF;TCCR1B=0x0A; OCR1A=19999; TIMSK=0x10; //10msSREG|=0x80;while(1){}}cs 10ms 주기로 8개를 시분할 체크하고 있으므로각각의 스위치 체크 주기는 80ms입니다.코드비젼 사용자라고 하더라도 AVRstudio의 소스코드도 함께 공부하셔야합니다.^^
댓글 0
조회수 3,226등록된 댓글이 없습니다.