질문게시판 > pic16f877a 외부 인터럽트 질문

TODAY375 TOTAL182,575
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU | 질문게시판 | pic16f877a 외부 인터럽트 질문

페이지 정보

작성자 master 작성일2018-07-11 13:35 조회37회 댓글0건

본문

	

led를 왼쪽으로 로테이트를 시키다가 스위치를 누르면 인터럽트를 발생해서 오른쪽으로 led를 로테이트를 시키려고 하는데 스위치를 눌러도 오른쪽으로 led가 로테이트 되지 않고 계속 왼쪽으로만 로테이트 되네요 ㅠㅠ 이 소스의 문제점과 해결방안 부탁드립니다.

 

#include<16F877a.h>
#use delay(clock=20000000)
#byte portc = 0x07
#byte portd = 0x08

static int cnt;

#int_ext
ext_isr()
{
cnt++;
portd = cnt;
}

void main()
{
set_tris_c(0x01);
set_tris_d(0x00);

portc = 0x01;
portd = 0x01;

while(1)
{
rotate_left(&portd,1);
delay_ms(200);


ext_int_edge(0,H_TO_L);
enable_interrupts(int_ext);
enable_interrupts(global);


rotate_right(&portc,1);
delay_ms(200);
}
}

//

 

 

// DateTime : 2018-06-30 오후 10:31:59
// by Ok-Hyun Park
//
led를 왼쪽으로 로테이트를 시키다가 
스위치를 누르면 인터럽트를 발생해서 오른쪽으로 led를 로테이트를 시키려고 하는데 
스위치를 눌러도 오른쪽으로 led가 로테이트 되지 않고 계속 왼쪽으로만 로테이트 되네요 ㅠㅠ 
 소스의 문제점과 해결방안 부탁드립니다.
//
#include <16F877a.h>
#use delay(clock=20000000)
#byte portc=0x07
#byte portd=0x08
//
volatile char cnt=0;
//
#int_ext
ext_isr(){ cnt^=1; }
//
void main(){
  set_tris_c(0x01); portc=0x01;
  set_tris_d(0x00); portd=0x01;
  ext_int_edge(0,H_TO_L);
  enable_interrupts(int_ext);
  enable_interrupts(global);
  while(1){
    if(cnt)rotate_right(&portc,1);
    else   rotate_left(&portd,1);
    //
    delay_ms(200);
  }
}

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

댓글 0

조회수 37

등록된 댓글이 없습니다.

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

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

ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017