#include <16F887.h>         

#USE DELAY(clock=400000000)
               
#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP

#byte portb=0x06
#byte portd=0x08  //스페셜 레지스터의 portd가 0x08번지입니다.

void main()
{
   int a;
   a=0;
   
   setup_adc_ports(no_analogs);
   setup_adc(adc_off);
   
   set_tris_b(0xff); //portb all input
   set_tris_d(0x00); //portd를 모두 출력으로 선택

   portd=0;
   
   for(;;){
      if(bit_test(portb,0)==0){
         a++;
         portd=a;
         for(;;){
            if(bit_test(portb,0)!=0)break;
            //루프 하나 더 넣어서 LastStableState 효과
         }
      }
      portd=a;
      delay_us(1000);
   }
}

의외로 간단하게 해결되었습니다.

루프를 하나 더 삽입해서 스위치를 떼기 전까지 상태를 유지시키도록 했습니다.

뭔가 알지 못했던 라이브러리나 뭔가의 힘이 아니라 그냥 테크닉적인 것이었군요.

부족한 C 테크닉에 고개를 떨굽니다.




요걸 해결하려고,

김병희님 어셈 강좌 보고, 어셈러브 들어가서 emu8086강좌 보고, 네오칩 김재욱님 PIC 어셈블리 강좌보고, ktechno에서 MPASM강좌 보고 많이 돌아왔군요.

그래도 어셈블리에 대한 지식 제로에서 이젠 PIC를 로우레벨에서 제어할 수 있다는(실은 아직 어셈으로 짜여진 코드도 이해할 수 있는이지만...) 지식이 생겨서 좋습니다.

'(취미)전자회로 공부 > PIC-44Pindemoboard' 카테고리의 다른 글

Timer0  (0) 2010.03.01
Reversible 풀이중2  (0) 2010.03.01
SETUP_ADC_PORTS()  (0) 2010.03.01
Reversible 풀이중  (0) 2010.02.24
Debounce 풀이  (0) 2010.02.24
Debounce 풀이중...  (0) 2010.02.11
VS Rotate  (0) 2010.02.11
A2D  (0) 2010.02.11
Rotate  (0) 2010.02.11
Posted by 도전하는 공돌이pooh

댓글을 달아 주세요