2013-04-06 2 views
0

저는 Atmega8535 마이크로 컨트롤러가있는 STK200 보드를 사용하고 있습니다. INT0 및 INT1 단추를 외부 인터럽트로 사용하지만 INT0을 초기화하려면 비트 6을 1로 설정하고 INT1을 초기화하려면 비트 7을 1로 설정해야하므로 다른 단추를 초기화 할 공간이 없습니다.어셈블리 - 인터럽트에 2 개 이상의 버튼 사용?

강사가 인터럽트를 일으킬 수있는 버튼을 더 많이 사용할 수 있다고했지만, 내가 공부하고있는 해 (1 년차 소프트웨어 엔지니어링)에 필요한 지식 이상입니다.

인터럽트없이 버튼을 처리하는 방법을 알지 못합니다. 그래서 버튼을 다루는 방법이나 더 많은 버튼을 인터럽트로 사용하는 방법에 대한 제안이 필요합니다.

+1

강사가 PBn, PCn 및 PDn 핀 중 하나를 변경하여 인터럽트를 트리거 할 수있는 핀 변경 인터럽트 ('PCINT')를 언급했을 수 있습니다. Google은 그것을 읽을 수있을 것이라고 확신합니다. – Michael

+0

시도해 보셨습니까? 어떻게 됐습니까? – Daniel

답변

0

인터럽트와 다른 버튼을 처리하는 또 다른 방법이 있지만 물론 인터럽트가 가장 좋지만 외부 인터럽트 핀이없는 경우이 방법을 사용할 수 있습니다. 이 방법은 기본적으로 버튼을 연결 한 핀을 폴링하는 방법입니다. 나는 8051을 위해 asm에서 코드 구현을 게시 할 것이므로 더 잘 이해할 수있을 것이다. 희망은 도움이 :

, 당신은 P1.1

org 00H 
jb P1.1,$  ;wait for a hold button  
jnb P1.1,$  ;wait for button to be unhold 
;perform anything 
end 

당신이 버튼을 누를 경우 내가 확인 코드의 두 번째 줄에서 볼 수 있듯이

에있는 버튼을 연결 한 가정 (물론 버튼 활성이 낮은 가정), 그렇지 않다면 나는 거기에 머무르며, 눌려지면 버튼이 보이지 않을 때까지 기다리는 3 행으로 건너 뜁니다. btn이 보류 상태가 될 때까지 기다리지 않으면 마이크로 프로세서는 단 한 번의 프레스 btn만으로 많은 시간을 수행하기를 원할 것입니다.이 문제의 원인은 간단합니다 : mP의 주파수 (12MHz 일 수 있음)는 훨씬 빠릅니다 또는 손가락을 누르는 주파수보다 빠릅니다. 즉, 가능한 빨리 버튼을 눌러도되지만, mP는 항상 당신보다 빠릅니다. :). 참고 : 간단한 이유 때문에 인터럽트가 이보다 낫습니다. 폴링을 수행 할 필요가 없습니다.

희망하시는 분.

+0

이 코드의 한 가지 문제점은 코드가 임의로 디 바운싱하지 않기 때문에 하드웨어 디 바운싱이 필요하다는 것입니다. – angelatlarge

관련 문제