RCTIME TMR0 문제 방해!

W

wylee

Guest
안녕하세요 사람,

현재 직면한 문제는 타이머 인터럽트 PicBasic, 이상한

광 센서를 만들 내가 CD를 사용하고 싶었 (사진 첨부)은 매 3 초 정도 걸릴 것이다 독서 광도 및 RS232를 통해 결과를 보내 참조하시기 바랍니다.PIC는 여기에 사용 PIC16F84A입니다

하지만 언제든지 프로그램의 명령어 세트를 불러 "readCDS"일상에 도달하면, 그냥 거기에, "명령은 이후"serout 실행되지 및 재부 팅 매달아!

난 '때문에 내가 "readCDS"댓글을'일시 중지, 100 "로 교체"교수형, 그것이 100ms하고 나서 실행을 일시 중지한다 "serout"명령을 눈치

내가 왜
이러는지 이해할
수 없다 ... 왜 그것을 실행할 수없습니다 "readCDS"RCTIME 명령을 사용합니다.인터럽트 사용하는 경우 테스트 & RCTIME 난 명령을 실현 prefectly 잘 실행됩니다.

이 TMR0 prescalar 1:256으로,
모든 TMR0 인터럽트
256us x (255 - 38으로 생성됩니다) = 55.552ms 설정되어있습니다."cntint"54 카운트하는 데 사용됩니다 약 째깍.3 초

또 하나 중요한 것은 지적하고, PicBasic Pro에서 MPLAB 내 코드에 어떤 오류는 표시되지 않습니다 필요해!

첨부된 내 PicBaisc 코드입니다 :'****************************PIC16F84A위한 '라이트 센서
"modedefs.bas"포함
기호 CDS = PORTB.3var CDS_raw 단어var CDS_val 바이트
기호 텍사스 = PORTB.2출력, 텍사스 주
상징 = PORTB.4

LED가

출력 LED가
DEFINE OSC 4DEFINE

1000년 CHAR_PACING
'인터럽트 카운터var intcnt 단어죄수 54 '3 초

int_tickVAR Wsave 바이트 $ 20 시스템 '저장 - 승 등록에 대한 위치VAR Ssave 바이트 bank0 체계 '저장 - 상태 레지스터에 대한 위치VAR Psave 바이트 bank0 체계 '할인 - PCLATH 등록에 대한 위치VAR Fsave 바이트 bank0 체계
DEFINE INTHAND ISR '인터럽트를 실행하기 위해 어떤 코드를 말해 PBP
고토 시작
은 ASMISRMovwf WsaveSwapf 상태, 승Clrf 상태Movwf SsaveMovf PCLATH, 승Movwf PsaveMovf FSR, 승Movwf Fsave
Endasm
TMR0 = 38
intcnt = intcnt 1
만약 다음 '3 초 intcnt = int_tickintcnt = 0
토글 LED가
'일시 정지 100readCDS '빛의 강도를 읽을 전화
Serout 텍사스, T2400, [ "=", # CDS_val, 10,13 CDS]
각각 endif
은 ASM출구bcf INTCON, 2; 재설정 TMR0 오버플로Movf Fsave, 승Movwf FSRMovf Psave, 승Movwf PCLATHSwapf Ssave, 승Movwf 상태Swapf Wsave로, FSwapf Wsave, 승RetfieEndasm
시작 :intcnt = 0TMR0 = 38OPTION_REG = % 00000111 'prescaler 256usINTCON = % 10100000 'TMR0 타이머 오버플로
start1 :고토 start1
readCDS :높은 CDS 'CDS 높은 핀일시 정지 버튼 5 '모자를 충전하자RCTIME CD를 1, CDS_raw '타임 & 기록 방전 시간
CDS_val = NCD CDS_raw반환

'***************************
미안하지만, 당신이 첨부 파일을보기 위해서는 로그인이 필요

 
난 사용자 PICBASIC 아니지만 personaly이 가장 싫어하는 것 :
인용구 :

start1 :

고토 start1
 
그건 이해된다.

무슨 방금 전화 (매우 짧은 서브루틴) 인터럽트 후 무한 루프 내에서 계속 .. iterrupt 플래그 설정을 생각 할 때여기서 당신은 코드의 나머지 부분을 실행 ..

 
안녕 wylee,
임 PICBASIC도 아니지만, 여기서 내 toughts 위치 :

PIC는
그다지 좋아하지 않아 내가 좋아하는 그 이유로 dont 빠른 무한 루프에 있어야합니다.때 난 내가 한때 newbe 노력하고 내 프로그램도 어딘가에 들어왔죠.가장 좋은 방법은 끝없는 도약의 기본 코드를 삽입하는 것입니다.그 코드를 실행하는 경우에만 국기를 설정했다.
방해가되면 어떻게 될 것 즉, 당신이 플래그를 설정합니다.그럼 PIC은 메인 루프로 돌아갑니다.만약 (깃발), 그리고 당신의 기본 코드를 실행합니다 루프에서해야합니다.다시 메인 코드의 플래그를 재설정해야합니다.

그리고 나는지 알아보십시오 ...
행운을 빕니다.

 
안녕하세요

the CD와 커패시터의 위치 Peplace

변경 포트 B 조
O를 위해 / P를 및 OV로 운전하여 모자를 방전

변경 포트 B 조
전 / P와 높은 클럭 펄스를 계산하기 위해 포트 b로 변경하기 전까지는 타이머를 시작합니다

셀 값이 상대적으로 빛이 senstivity입니다

전체 최고Bobi

 
gidimiz 썼습니다 :

끝없는 도약하는 가장 좋은 방법은 귀하의 기본 코드를 삽입하는 것입니다.
그 코드를 실행하는 경우에만 국기를 설정했다.

방해가되면 어떻게 될 것 즉, 당신이 플래그를 설정합니다.
그럼 PIC은 메인 루프로 돌아갑니다.
만약 (깃발), 그리고 당신의 기본 코드를 실행합니다 루프에서해야합니다.
다시 메인 코드의 플래그를 재설정해야합니다.

 
wylee 썼습니다 :

이 사실은 정말 좋은 생각입니다!!

나도 한번 해보 것이고 그것을 나중에 내 결과를 말씀
 
안녕,

좋아.기능은 당신과 함께 문제가있습니다를 보자 :
인용구 :

readCDS :

높은 CDS 'CDS 높은 핀

일시 정지 버튼 5 '모자를 충전하자

RCTIME CD를 1, CDS_raw '타임 & 기록 방전 시간

CDS_val = NCD CDS_raw
 
gidimiz,

물론 여전히 괜찮 근무 명령을 "일시
중지 5"까지, 그것이다.

RCTIME 명령은 문제를주고 있나.

불행하게도 PicBasic의 도서관
- RCTIME는 내장과 내가 ... 내가 추측할 수있는 자신의 코드를 디버깅 할 수있는 지식이없는가 "RCTIME"일상적인 일부 레지스터 또는 스택 값을 망쳐했다 수도있다

내가 최선의 방법은 내 자신이 RCTIME 루틴을 작성하는 것입니다 해결 방법은 생각

어쨌든, 당신의 노력이 날 도와 주려는 appreaciate ...

 
안녕,

Google에 수색을하고 제가 뭘 찾았는지 그게 :
인용구 :

핀에 RCTIME 펄스 폭 측정
 

Welcome to EDABoard.com

Sponsor

Back
Top