코드에서 새 변수 때문에 작동하지 않습니다

H

hkBattousai

Guest
내가있는 LED가 깜박 거립니다 간단한 프로그램을 실행하기 위해 노력하고있어.

어떤 문제없이 실행되는 코드입니다 :
(D1에서 점멸 포트 연결) LED가
코드 :

0 org 같은; 시작 코드는 0에서입술 Delay1 1; 제도 1 바이트 변수에 대한 Delay1

입술 Delay2 1; 제도 1 바이트 변수에 대한 Delay2시작 :

CLRF PORTD

CLRF TRISD

CLRF Delay1

CLRF Delay2MainLoop :

BTG PORTD, RD1; 토글 포르 핀 D 1 (20)

지연 :

만약 Delay1 0입니다 DECFSZ Delay1, 1; 감소 Delay1 1로, 다음 명령어를 건너뛰고

GOTO 지연

DECFSZ Delay2, 1

GOTO 지연

GOTO MainLoop


 
MPLAB 시뮬레이터를 사용하여, 일부 중단점을 넣고 정확히 무슨 일이 있는지.누군가에 대한 코드를 분석하는 것보다 훨씬 쉽게 기다려 ...

 
* 256 시간 섬광을보고 있으면 전체 마 기달렸다 ...?

 
XNOX_Rambo 썼습니다 :

* 256 시간 섬광을보고 있으면 전체 마 기달렸다 ...?
 
감시를 실행하는가?
그것은 - 당신은 이전에 빠르게 깜박임으로 통지하지 않겠 플래시에 도달하면 PIC는 전에 한 번 기회를 재설정해야 할 수도있습니다.

 
XNOX_Rambo 썼습니다 :

감시를 실행하는가?

그것은 - 당신은 이전에 빠르게 깜박임으로 통지하지 않겠 플래시에 도달하면 PIC는 전에 한 번 기회를 재설정해야 할 수도있습니다.
 
난 그 PICS는 있지만 익숙하지 않아 데이터 시트 말한다 :
인용구 :

PIC18F2455/2550/4455/4550

워치독 타이머 장치는 중입니다

구성 비트 또는를 통해 영구적으로 활성화

소프트웨어 제어 (장애인)를 구성했다.
 
XNOX_Rambo 썼습니다 :

난 당신을 ""하지만 아마도 하드웨어 구성을 무시 WDT = OFF로 설정과 해제 것 같네요?

당신을 시도해 볼 수도와 비트의 구성을 해제하고 무슨 일이 일어 나는지.
 
어떤 컴파일러를 사용하고 있습니까?

내가 MPLAB
C 컴파일러에 대한 설명서에 PIC18 MCU를 위해이 발견 :
인용구 :

2.9.5.2 예

다음 예제는 설정 지시어를 활용하는 방법 #에서 Pragma 수도를 보여줍니다.

그 예를 않으면 다음 :

활성화 워치독 타이머,

세트 워치독 Postscaler에 1:128, 그리고

선택 HS 오실레이터에서 Pragma WDT = 켜기, WDTPS = 128 # config을

에서 Pragma OSC = HS # config을

...

무효 메인 (무효)

(

...

)
 
XNOX_Rambo 썼습니다 :

어쩌면 모든 설정 라인에 #에서 Pragma 삽입하려면 어떻게해야합니까?
 
아, 그렇군요.

죄송합니다, 그러면 나는 왜 작동하지
않는 경우에 대해 아무런 단서도 ...

 
만약 여러분이 프로그램을 구축하고 볼 것이다 해체리스트를 보자 :

0007 6A00 0 CLRF, 교통 54 : CLRF Delay1
0009 6A01
0x1로 CLRF, 교통 55 : CLRF Delay2
000B 6A02
0x2 CLRF, 교통 56 : CLRF Delay3

왜 변수 라인에 주소를 0 54에 위치해있습니다

당신은 org 같은 성명 직후, 그 이유는 변수를 정의했다.

문장의 구성 후이 코드를 사용하는 경우 :

cblock 0x20
Delay1; 라벨에 주소를 할당 Delay1
Delay2
Delay3
endc

0 org 같은

이 주소는 20의 변수를 정의합니다

다음 Dissasembly을 보여줍니다 :

0004 6A20 0x20 CLRF, 교통 55 : CLRF Delay1
0006 6A21 0x21 CLRF, 교통 56 : CLRF Delay2
0008 6A22 0x22 CLRF, 교통 57 : CLRF Delay3

이 프로그램은 다음 십초 지연과 함께 실행됩니다.

조지

 
당신 geore2000 감사합니다, 여러분의 아이디어를 내 문제가 해결되었습니다.하지만 아직 두 변수가 어떻게 정의와 함께 작품을 이해하지 않아,하지만 그들 중 세명이되지 않습니다.아무도 나에게 이걸 설명할 수 있나요?

어쨌든, 내 코드의 형태는 아래 최종 작업입니다 :

코드 :

org 같은 0x40; 주소 0x40에서 변수 정의Delay1 1 있습

Delay2 1 있습

Delay3 1 있습0 org 같은;의 메모리의 시작 부분에 프로그램 코드를 삽입시작 :

CLRF PORTD

CLRF TRISD

CLRF Delay1

CLRF Delay2

; CLRF Delay3

; CLRF Delay4MOVLW 020

MOVWF Delay3, 0

MainLoop :

BTG PORTD, RD1; 토글 포르 핀 D 1 (20)

지연 :

만약 Delay1 0입니다 DECFSZ Delay1, 1; 감소 Delay1 1로, 다음 명령어를 건너뛰고

GOTO 지연

DECFSZ Delay2, 1

GOTO 지연

DECFSZ Delay3, 1

GOTO 지연

MOVLW 020

MOVWF Delay3, 0

; DECFSZ Delay4, 1

; GOTO 지연

GOTO MainLoop


 
1.만약 lkr없이는 단 1은 ASM (개체 파일 지시어를 사용하지 수있는 MPLAB '') 절대 코드를 생성하는 것입니다
2.'입술'예비 데이터 저장 또는 프로그램을 메모리에
비 (에서는 프로그램이 메모리로 간주됩니다 - relocatable 코드,)를 사용합니다

여러분의 코드에서, 2 '입술'1 지시 0xFFFF (nop)은 주먹을 생성합니다.사실, '시작'위치한
2 일, 아니 0.그래서 효과가있을 것이다.
그 13 '입술'3시),하지만 당신에 대한 경고가 아닌 - 단어 주소가 나타납니다 정렬 실행 시간에 잘못된 명령을 디코딩 (시작 encourter 것이다.

그래서 'cblock'로 george2000의 게시물로 사용할 수있는 데이터 스토리지를 선언 :코드 :

0 org 같은; 시작 코드는 0에서cblock 0x0이라는

Delay1 : 1, Delay2 : 1, Delay3 : 1

endc시작 :
 
빨리감기 16 진수를 시작으로 시작을 보시려면 코드 공간에있는 변수

빨리감기 빨리감기 nop 너무 명령어 밟은입니다

당신의 코드가 3 변수
빨리감기 빨리감기 첫 지시하지만
빨리감기 팔십삼초 지시로 그렇게하는 프로그램은 BSF 명령어를 실행하려고 시도로 빨리감기 83

이후 2 놉 지침 된 후 프로그램을 다시 4 변수로 작동했다.

이것은 칩은 코드가 생각하는 코드 공간의 변수와 함께이 문제입니다.

조지

 
에에거 썼습니다 :

여러분의 코드에서, 2 '입술'1 지시 0xFFFF (nop)은 주먹을 생성합니다.
사실, '시작'위치한 2 일, 아니 0.
그래서 효과가있을 것이다.

그 13 '입술'3시),하지만 당신에 대한 경고가 아닌 - 단어 주소가 나타납니다 정렬 실행 시간에 잘못된 명령을 디코딩 (시작 encourter 것이다.
 
hkBattousai 썼습니다 :

코드의 시작 부분에 변수 선언의 짝수이 경우에는 아무런 문제가 없을 것입니다.
왜냐하면 컴파일러는 0x00 대신 변수, 어떤 이유로 임의의 초기 값이없는 것이라고하지만, 그것의 선언을 할 수있는 적절한 장소 방법은 아니다.
 

Welcome to EDABoard.com

Sponsor

Back
Top