void Delay_us(unsigned char time_us) /* time delay for us 8MHz */
{
register unsigned char i;
for(i = 0; i < time_us; i++) // 4 cycle +
{
asm (" PUSH R0 "); // 2 cycle +
asm (" POP R0 "); // 2 cycle +
}
}
이게 대략 어셈명령어를 이용해서
클락을 맞추어서 딜레이를 만드는것 같은데
정확한 뜻을 모르겠어요
고수분이 설명좀 해주세요
마이컴에 들어가는 메인 클럭에 분주를 해서 사용하게 되는데요
각각 어셈 명령어마다 이 명령을 실행하는데는 몇클럭이 사용되는지 데이터쉬트등에 나와있습니다.
push 명령은 2사이클이라고 적혀있는데요
그러면 클럭에 따른 처리 시간에 비례해서 2사이클이 실행되는 시간만큼 지연되는것이지요.
(술기운이 좀 힘들군요)
이해 안되시면 술깨고 다시.ㅡㅡ
128 데이타시트를 보면 되나요?
그리고 제가 아크마님 라인트레이서 회로도를 이용해서 제작할 생각인데
센서부에서 발광부분의 10옴 저항과 수광부분의 470,4.7k저항을 어레이저항으로 해도 상관없으련지
궁금합니다 각각 따로 저항을 달아야하나요?
ps 그럼 for문이 4사이클이고
push,pop이 2사이클
다 더하면 8사이클이란 말인데
이때 마이컴에 들어가는 클럭이 8mhz이면 8사이클로 돌려서 1초가 된다 이런건가요?
그리고 요런 딜레이문은 실제 라인트레이서 소스를 제작할때 사용하게 되나요?
아니면 타이머인트럽트로 딜레이를 사용하게 되나요?
위에 소스나 타이머인트럽트로 1초 만들어서 사용하는거나 정확도는 똑같은지 궁금합니다
딜레이 함수는 만들어서 함수 호출하는 형태로 많이 쓰기때문에 한번 만들어 놓고 계속 사용하시면 됩니다.
발광 어레이로 해도 되구요 수광은 470만 어레이로 하셔야 됩니다..
4.7k는 필터용일꺼 같은데요 이부분은 따로따로 해주세요.
이때 마이컴에 들어가는 클럭이 8mhz이면 8사이클로 돌려서 1초가 된다 이런건가요?
->
1초가 아니라 저건 us단위에요^^//
led깜빡일려해도 딜레이분이 필요하죠-_-;(매우 많이 사용됩니다)
저런식으로 딜레이는 정확하지 않습니다. 정확히 제어하려면 타이머를 사용하셔야 합니다...
(질문이 너무 한번에 많아서 헥헥)