어셈블리 코드 bankselect 문제

C

ceibawx

Guest
친애하는 친구,

내가 코드를 컴파일했다.그것은 지난 금요일 시뮬레이션을 통과했다.그러나 오늘의 문제가 등장 .-------------------------------------------- -----------
메시지 [302]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 62 : 등록 피연산자의 은행 0없습니다.그 은행 비트가 정확한지 확인하십시오.
메시지 [302]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 63 : 등록 피연산자의 은행 0없습니다.그 은행 비트가 정확한지 확인하십시오.
메시지 [302]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 64 : 등록 피연산자의 은행 0없습니다.그 은행 비트가 정확한지 확인하십시오.
메시지 [302]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 67 : 등록 피연산자의 은행 0없습니다.그 은행 비트가 정확한지 확인하십시오.
메시지 [302]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 71 : 등록 피연산자의 은행 0없습니다.그 은행 비트가 정확한지 확인하십시오.
오류 [113]에서 C : \ Documents 및 Settings \ GRACEE \ 내 문서 \ PNS2 \ PNS2.ASM 122 : 심벌 이전 (LoopThree)
정의되지 않은요청으로 첫 번째 실패를 건설 저지.
난 내 코드에 존재하는 오류를 생각하지 않아요.하지만 시뮬레이션이처럼 말했다.
당신이 내게 코드의 오류를 보는 데 도움이 될까?

거기 Bankselect 방법의 두 가지 종류가있다.하나를 사용하여 "banksel"예를 들어, "banksel TXSTA"는 그 코드를 의미합니다 bank1로 작동합니다.다른 사용 "BSF"입니다."BSF 상태, 5"와 "BCF 상태, 6"bank1에 근무하실 수있습니다.내가 잘못을 작성하지 않았다.시뮬레이션을 통과하지 못한 이유.

두 번째는 "LoopThree".제 생각에는 아무 문제 없어.왜 그것도 시뮬레이션에 전달되지 않습니다?;************************************************* *********************= 16F877; 목록 지시어 목록 프로세서를 정의 p 하이라이트
# 포함 <p16f877.inc>; 프로세서는 특정 변수의 정의; '__CONFIG'지시문.은 ASM 파일 내에 구성 데이터를 포함하는 데 사용됩니다.
;는 지시만 레이블 다음 각. inc 파일에 위치하고있습니다.
; 구성 단어에 대한 자세한 내용은 각각의 데이터 시트를 참조하십시오.

; __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC
; & _WRT_OFF & _LVP_OFF & _CPD_OFF

DAC는 ;******************은 PIC를 **************************** ********* 8
FS PORTC, 1 정의 #; TLV5614에 대한 FS
SCLK PORTC,
2 정의 #; SCLK TLV5614에
대한은 DIN PORTC,
3 정의 #; 데이터 TLV5614에
대한; *

; C0 클럭 입력됩니다
;에 C1 비트 데이터 입력
VARIABLE ;***** 정의

w_temp EQU 0x7D; 변수 컨텍스트 절약에
사용status_temp EQU 0x7E; 변수 컨텍스트 절약에
사용pclath_temp EQU 0x7F; 변수 컨텍스트 절약에
사용
BitCount EQU 0x38
ByteCount EQU 0x39
DeciCount EQU 0x40
DinB0 EQU 0x60; MCP3302, MCP3204, & PIC16F767 ADC는 MSB는
DinB1 EQU 0x61; ADC의 중요도가 가장 적은 바이트
DinB2 EQU 0x62; 데이터 수신
DinB3 EQU 0x63; 데이터 전송을
위해DinB4 EQU 0x64; 일반 목적 온도 등록
DinB5 EQU 0x65; 무슨 전화 번호의 다이얼 자리 계산해야합니다.
DinB6 EQU 0x66; 카운터 32B 사인파 단계를 결정하는
DinB7 EQU 0x67; 사인파 생성기에 대한 ouput 등록
;************************************************* *********************
ORG를이 0x0000; 프로세서 리셋 벡터
고토 대문; 프로그램의 시작으로 이동
;************************************************* *********************
; ISR 코드 또는 다른 지역으로 갈 수있는 전화를 서브루틴
위치
ORG를 0x0004; 벡터
인터럽트 위치
MOVWF w_temp; 현재 승 등록 내용을
저장movf 상태, 승; 승으로 이동 상태를 등록 등록
MOVWF status_temp; 상태 레지스터의 내용을 저장
movf PCLATH, 승; 승 등록에 등록 pclath
이동MOVWF pclath_temp; PCLATH 등록의 내용을 저장

movf pclath_temp, 승; PCLATH 등록 사본을 검색할
MOVWF PCLATH; 사전 등록 내용을 복원 - ISR PCLATH
movf status_temp, 승; 상태 레지스터의 복사본을 검색할
MOVWF 상태; 중고
- ISR 상태 레지스터의 내용을 복원
swapf w_temp로, F
swapf w_temp, 승; 중고 - ISR 승 등록 내용을 복원
retfie; 반환에서 인터럽트
대문 :
BSF 상태, 5
BCF TRISC, 1; C6 = 0 출력으로
BCF TRISC, 2; c0 = 0 출력으로
BCF TRISC, 3;에 C1 = 0 출력으로
;의 UART 모듈 설치
MOVLW 15; 57600으로의 RS232 보오드
MOVWF SPBRG; SPBRG 등록 Baud 평가
활성화MOVLW b'00101110 ';의 UART 비동기 모드
; 8 - 비트 전송
; 높은 Baud 평가
MOVWF TXSTA; 변속기
활성화BCF 상태, 5

MOVLW b'10010000 '; 8 - 비트 리셉션 활성화
MOVWF RCSTA

이진로 DAC_Din에 대한 4 개의 아날로그 ********************** 값을 문자열로 변환 ;****************
;
PIC는 메모리 B0에 저장된
~ B7,
MOVLW b'00011001 ';, channelA, 01, 2, 2495년
MOVWF 0x60
MOVLW b'10111111 ';
MOVWF 0x61
MOVLW b'01011011 '; channelB, 01; 2.32, 2852년
MOVWF 0x62
MOVLW b'00100100 ';
MOVWF 0x63
MOVLW b'10010011 '; channelC, 01; 0.765, 940
MOVWF 0x64
MOVLW b'10101100 ';
MOVWF 0x65
MOVLW b'11011000 '; channelD, 01, 1.7, 2090년
MOVWF 0x66
MOVLW b'00101010 ';
MOVWF 0x67

;********************** TLV5614 ************************** *************
; CS를, 낮은 지연, FS, 지연 낮은;; SCLK 필한테 낮음 높음
1 바이트를 전송하기 전까지;;; 그 다음 바이트를 전송합니다.
;에서 비트를 MSB는 LSB가 비트.; 16bits 전송됩니다;; 다음 FS 높은;; CS는 높습니다
WriteToMCP492X :
MOVLW 0x60
MOVWF FSR
MOVLW 0x04
MOVWF DeciCount
OneChannel :
MOVLW 0x02
MOVWF ByteCount
DinTrans :
BANKSEL PORTC
CLRF PORTC
BCF FS; FS 낮습니다

LoopOne :
MOVLW 0x08
MOVWF BitCount
LoopTwo :
BSF SCLK; SCLK
낮은 idles.; SCK의 가장자리 상승 후 데이터 출력
; 8bit 왼쪽으로 회전
; 첫 BSF 비트 value.use 확인하면 1; 사용 BCF 경우 0.
BCF SCLK
BTFSS INDF, 7
고토 LoopThree;! = 1
BSF는 DIN; = 1
RLF INDF, 1
DECFSZ BitCount, 1
고토 LoopTwo
INCF FSR, 1
DECFSZ ByteCount, 1
고토 LoopOne
BSF FS

DECFSZ DeciCount, 1
고토 OneChannel
최종
LoopThree :
BCF는 DIN
RLF INDF, 1
DECFSZ BitCount, 1
이 완료되지 않습니다 고토 LoopTwo; 8bits
INCF FSR, 1
DECFSZ ByteCount, 1; 8bits가 완료됩니다.
고토 LoopOne
BSF FS

DECFSZ DeciCount, 1
고토 OneChannel
최종; 최종 코드

10 진수로 변환하는 ;************* 이진 ******************************** *

;************************************************* *******************/

 
ceibawx 썼습니다 :

거기 Bankselect 방법의 두 가지 종류가있다.
하나를 사용하여 "banksel"예를 들어, "banksel TXSTA"는 그 코드를 의미합니다 bank1로 작동합니다.
다른 사용 "BSF"입니다.
"BSF 상태, 5"와 "BCF 상태, 6"bank1에 근무하실 수있습니다.
내가 잘못을 작성하지 않았다.
시뮬레이션을 통과하지 못한 이유.
 
감사합니다 :)

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="매우 행복" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top