최근에 18 PIC 4500을 사용하기 시작했습니다. 어셈블리에서 프로그래밍하는 첫 번째 시도는 루프에서 하나의 LED를 깜박이게하는 것이 었습니다. 그러나이 언어로 프로그래밍 할 때 많은 경험이 없으므로 다른 코드 스 니펫을 사용하여 시작해야했습니다. 내 코드는 다음과 같습니다 :어셈블리 코드를 사용하여 18PIC4550으로 LED를 깜박임
#include<p18f4550.inc>
CONFIG WDT = OFF
CONFIG MCLRE = ON
CONFIG DEBUG = ON
CONFIG LVP = OFF
CONFIG FOSC = INTOSCIO_EC
ORG 0
Delay1 res 2
Delay2 res 2
Start:
CLRF PORTB
CLRF TRISB
CLRF Delay1
CLRF Delay2
MainLoop:
BSF PORTB,1
GOTO DelayA
DelayA:
DECFSZ Delay1,1
GOTO DelayA
BCF PORTB,1
GOTO DelayB
DelayB:
DECFSZ Delay2,1
GOTO DelayB
GOTO MainLoop
end
나는 지연이 지나치게 짧게하는 원인이 작동하지 않는 이유를 이해하지만, 그것이 내가 1 MHz의 판단 명령어 사이클 속도, 함께 할 수있는 뭔가가있을 수 있습니다 생각할 수 없다 .
도움을 주시면 큰 도움이됩니다.
왜 디버그가 켜져 있습니까? – Iancovici
DelayA에서 먼저 DECFSZ를 호출 한 다음 무조건 (!) 지연 A로 점프합니다. 대신 조건부 점프를 기대합니다. 루핑하기 전에 어떤 종류의 루프 변수를 초기화해야합니다. 그렇지 않으면 변수가 이미 0이기 때문에 다음 호출이 전혀 반복되지 않거나 언더 플로가 발생하여 다시 0이 될 때까지 루프가 발생합니다. PIC 어셈블리를 모르기 때문에 완전히 잘못 될 수 있습니다. BTW : DelayA와 DelayB가 비대칭 인 것도 약간 이상합니다. – doomster
@doomster 루프 변수를 초기화 할 필요가 없으며,이 마이크로 컨트롤러에서 영원히 반복 할 수 있습니다. – Iancovici