D
DarkSilver
Guest
안녕
저는 마이크로 컨트롤러는 현재 작업에 라이브러리를위한 PIC는 서브루틴 매크로 / 작은 그래서 내가 앞으로 더 유창하게 할 수에서 작동합니다.그러나, 내가 해결할 수없는 전 그냥 실행에있어 문제.
내가하고 싶은) 테스트 목적만을위한 읽기까지 값을 아날로그 디지털 속도로 다양한에서 사용을 전환, 그 값은 LED를 깜박하는 (.문제는 역사적 사실입니다 ADC가 그것이 계속 깜박이에서 상수 값을 왜 내 속도에 상관없이.내가 대신 ADC는 정상적인 변수를 읽을 수있는 노력을 교체했고 그것은 완벽했습니다.난 할 수 PORTC 디스플레이 그것의 가치에 이후, 작품 또한 알지 ADC가.
문제는 그것을하는 것은, 내가이 무엇인지 알아낼 수없는 잘못 그냥, 그래서 고칠 수 없어 난.
<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="우는 또는 아주 슬픈" border="0" />여기에 코드는 어셈블리 :
코드 :
;************************************************* *********************
; 프로젝트 이름 : 기본 사항
; 저자 : 데니스 Fredriksson
; 작성 날짜 : 2010년 7월 9일
; 프로젝트 단계 : 알파
;************************************************* *********************
; 프로세서 : PIC는 16F690
; 핀 할당 :
; - 없음
;************************************************* *********************
; 댓글 :
; 없음까지
;************************************************* *********************;************************************************* *********************
; 컴파일러 설정
;************************************************* *********************
리스트 P는 = 16F690
#은 <p16F690.inc> 포함-302 errorlevel;************************************************* *********************
; 그림 구성
;************************************************* *********************
_CP_OFF & _CPD_OFF 및 _BOR_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF __CONFIG;************************************************* *********************
; 변수
;************************************************* *********************
INT_VAR UDATA_SHR
vDC1 해상도 1
vDC2 해상도 1
vDC3 해상도 1
vAdc 해상도 1
vTest 해상도 1;************************************************* *********************
; 매크로 / 함수
;************************************************* *********************; RegSet - 설정 특정 레지스터의 비트 1
; reg가 : 목적지 레지스터
; 비트 : 비트가 1로 목적지에 등록을 설정할 수
RegSet 매크로 reg, 비트
banksel reg
bsf의 reg, 비트
endm; RegClear - 설정 특정 레지스터의 비트 0
; reg가 : 목적지 레지스터
; 비트 : 비트가 0으로 대상에 등록을 설정할 수
RegClear 매크로 reg, 비트
banksel reg
bcf의 reg, 비트
endm
; REGEDIT을 - 데이터를 특정 레지스터를 부여
; reg가 : 목적지 레지스터
; 날엔 : 8 비트 데이터 레지스터는 목적지에가는
RegEdit 매크로 reg, 날엔
banksel reg
movlw의 날엔
movwf reg
endm; RegEditF는 -; 다른 레지스터에서 일부 데이터를 특정 레지스터를 부여
; regD가 : 목적지 레지스터
; Rego : 데이터가 목적지에 등록 보내 원산지 등록
RegEditF 매크로 regD, Rego
banksel Rego
movfw의 Rego
banksel regD
movwf regD
endm; DelayMs이 - 엑스 마이크로 초 정도 지연을 추가합니다
; 석사 : 마이크로 초의 양을
DelayMs 매크로 석사
movlw 처지
전화 sDelay10
endm; DelayMsF이 - 엑스 마이크로 초 동안 지연, 데이터 레지스터에서 가져온 추가
; 어떤 마이크로 초의 양은 저장됩니다 reg : 원산지 등록
DelayMsF 매크로 reg
movfw의 reg
전화 sDelay10
endm; A2DConv - Preforms / 디 전환
; 필요 하드웨어 설정을 사용하기 전에 (,), PIC는 특정 ADCON1 및 ANSEL ADCON0를 참조하십시오
A2DConv 매크로
전화 sAdcCon
endm; IfEqual가 - 마면 = B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfEqual 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfsc 상태, 지
전화 하위
NOP
endm; IfNotEqual가 - 마면! = B 확인
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfNotEqual 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfss 상태, 지
전화 하위
NOP
endm; IfGreater가 - 마면> B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfGreater 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfss 상태으로 C
전화 하위
NOP
endm; IfLesser가 - 마면 <B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfLesser 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfsc 상태으로 C
전화 하위
NOP
endm;************************************************* *********************
; 주요 프로그램은 여기서 시작
;************************************************* *********************
0 org에서;************************************************* *********************
; 기본 프로그램 설정
;************************************************* *********************
시작
RegEdit의 TRISC, 0x00
RegEdit의 TRISA, 0xFF
RegEdit ADCON1, 0x10
RegEdit의 ANSEL, 0xFF
RegEdit ADCON0, 나타내고 0x01
RegEdit의 vTest, 0.10;************************************************* *********************
; 메인 루프
;************************************************* *********************
MainLoop
A2DConvRegEdit의 PORTC, 0xFF
DelayMsF vAdc
RegEdit의 PORTC, 0x00
DelayMsF vAdc고토 MainLoop;************************************************* *********************
; 서브루틴
;************************************************* *********************
sDelay10가; 밀리초 X의 시간을 10 정도 지연을 추가합니다
movwf vDC3
sDelay2
movlw 0.13
movwf vDC2
clrf vDC1
sDelay1
decfsz vDC1, f를
고토 sDelay1
decfsz vDC2, f를
고토 sDelay1
decfsz vDC3, f를
고토 sDelay2반환sAdcCon; / 패 전환 서브루틴
NOP
NOP
NOP
NOP
NOP
bsf은 ADCON0 이만
btfss ADCON0 이만
고토 $ -1
banksel ADRESH
swapf ADRESH, 우
movwf vAdc반환;************************************************* *********************
; 최종 지시자
;************************************************* *********************
끝
저는 마이크로 컨트롤러는 현재 작업에 라이브러리를위한 PIC는 서브루틴 매크로 / 작은 그래서 내가 앞으로 더 유창하게 할 수에서 작동합니다.그러나, 내가 해결할 수없는 전 그냥 실행에있어 문제.
내가하고 싶은) 테스트 목적만을위한 읽기까지 값을 아날로그 디지털 속도로 다양한에서 사용을 전환, 그 값은 LED를 깜박하는 (.문제는 역사적 사실입니다 ADC가 그것이 계속 깜박이에서 상수 값을 왜 내 속도에 상관없이.내가 대신 ADC는 정상적인 변수를 읽을 수있는 노력을 교체했고 그것은 완벽했습니다.난 할 수 PORTC 디스플레이 그것의 가치에 이후, 작품 또한 알지 ADC가.
문제는 그것을하는 것은, 내가이 무엇인지 알아낼 수없는 잘못 그냥, 그래서 고칠 수 없어 난.
<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="우는 또는 아주 슬픈" border="0" />여기에 코드는 어셈블리 :
코드 :
;************************************************* *********************
; 프로젝트 이름 : 기본 사항
; 저자 : 데니스 Fredriksson
; 작성 날짜 : 2010년 7월 9일
; 프로젝트 단계 : 알파
;************************************************* *********************
; 프로세서 : PIC는 16F690
; 핀 할당 :
; - 없음
;************************************************* *********************
; 댓글 :
; 없음까지
;************************************************* *********************;************************************************* *********************
; 컴파일러 설정
;************************************************* *********************
리스트 P는 = 16F690
#은 <p16F690.inc> 포함-302 errorlevel;************************************************* *********************
; 그림 구성
;************************************************* *********************
_CP_OFF & _CPD_OFF 및 _BOR_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF __CONFIG;************************************************* *********************
; 변수
;************************************************* *********************
INT_VAR UDATA_SHR
vDC1 해상도 1
vDC2 해상도 1
vDC3 해상도 1
vAdc 해상도 1
vTest 해상도 1;************************************************* *********************
; 매크로 / 함수
;************************************************* *********************; RegSet - 설정 특정 레지스터의 비트 1
; reg가 : 목적지 레지스터
; 비트 : 비트가 1로 목적지에 등록을 설정할 수
RegSet 매크로 reg, 비트
banksel reg
bsf의 reg, 비트
endm; RegClear - 설정 특정 레지스터의 비트 0
; reg가 : 목적지 레지스터
; 비트 : 비트가 0으로 대상에 등록을 설정할 수
RegClear 매크로 reg, 비트
banksel reg
bcf의 reg, 비트
endm
; REGEDIT을 - 데이터를 특정 레지스터를 부여
; reg가 : 목적지 레지스터
; 날엔 : 8 비트 데이터 레지스터는 목적지에가는
RegEdit 매크로 reg, 날엔
banksel reg
movlw의 날엔
movwf reg
endm; RegEditF는 -; 다른 레지스터에서 일부 데이터를 특정 레지스터를 부여
; regD가 : 목적지 레지스터
; Rego : 데이터가 목적지에 등록 보내 원산지 등록
RegEditF 매크로 regD, Rego
banksel Rego
movfw의 Rego
banksel regD
movwf regD
endm; DelayMs이 - 엑스 마이크로 초 정도 지연을 추가합니다
; 석사 : 마이크로 초의 양을
DelayMs 매크로 석사
movlw 처지
전화 sDelay10
endm; DelayMsF이 - 엑스 마이크로 초 동안 지연, 데이터 레지스터에서 가져온 추가
; 어떤 마이크로 초의 양은 저장됩니다 reg : 원산지 등록
DelayMsF 매크로 reg
movfw의 reg
전화 sDelay10
endm; A2DConv - Preforms / 디 전환
; 필요 하드웨어 설정을 사용하기 전에 (,), PIC는 특정 ADCON1 및 ANSEL ADCON0를 참조하십시오
A2DConv 매크로
전화 sAdcCon
endm; IfEqual가 - 마면 = B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfEqual 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfsc 상태, 지
전화 하위
NOP
endm; IfNotEqual가 - 마면! = B 확인
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfNotEqual 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfss 상태, 지
전화 하위
NOP
endm; IfGreater가 - 마면> B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfGreater 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfss 상태으로 C
전화 하위
NOP
endm; IfLesser가 - 마면 <B 체크
; reg : 원산지 등록 ()
, 씨엠 피 :이 숫자가 비교 (B)를
사실이 경우, 하위 : 서브루틴이 호출
IfLesser 매크로 reg, 씨엠 피, 하위
movfw의 reg
sublw의 씨엠 피
btfsc 상태으로 C
전화 하위
NOP
endm;************************************************* *********************
; 주요 프로그램은 여기서 시작
;************************************************* *********************
0 org에서;************************************************* *********************
; 기본 프로그램 설정
;************************************************* *********************
시작
RegEdit의 TRISC, 0x00
RegEdit의 TRISA, 0xFF
RegEdit ADCON1, 0x10
RegEdit의 ANSEL, 0xFF
RegEdit ADCON0, 나타내고 0x01
RegEdit의 vTest, 0.10;************************************************* *********************
; 메인 루프
;************************************************* *********************
MainLoop
A2DConvRegEdit의 PORTC, 0xFF
DelayMsF vAdc
RegEdit의 PORTC, 0x00
DelayMsF vAdc고토 MainLoop;************************************************* *********************
; 서브루틴
;************************************************* *********************
sDelay10가; 밀리초 X의 시간을 10 정도 지연을 추가합니다
movwf vDC3
sDelay2
movlw 0.13
movwf vDC2
clrf vDC1
sDelay1
decfsz vDC1, f를
고토 sDelay1
decfsz vDC2, f를
고토 sDelay1
decfsz vDC3, f를
고토 sDelay2반환sAdcCon; / 패 전환 서브루틴
NOP
NOP
NOP
NOP
NOP
bsf은 ADCON0 이만
btfss ADCON0 이만
고토 $ -1
banksel ADRESH
swapf ADRESH, 우
movwf vAdc반환;************************************************* *********************
; 최종 지시자
;************************************************* *********************
끝