G
Guest
Guest
안녕하세요, 저는이 문제가 PIC16F877.내가 거기 갈 때마다은 5V의 입력 포트 (포르) PIC16F877의, 출력 포트 (포르 B 조 & 포르 D)를 동일한
5V의 입력 포트로 가지고 있지 않다 ... 장소그 결과 중 하나 1.3mv 또는 0.6mv을 측정하는 멀티미터 때 사용한다는 것입니다 ...
아래의 코드입니다 :# ifndef __CPU_16F877__
# 오류 "이 프로그램은 PIC16F877 컨트롤러에 맞게"
# 각각 endif
# "io16f877.h"/ / 하드웨어 레지스터 정의 파일을 포함합니다.
int timer_value = 0xEA60; / / 10 진수 60000.
무효 DelayUs (int 카운트)
(
int 난;
int j를;
은 (i = 0; 나는 <카운트; 난 )
(
(일본 = 0; j를 <5000; j를 );
/ /이 루프에 대한 5 NOPs했습니다 &
1 20MHz의 클럭 주파수를위한 우리의 PIC는 우리를 소모하게됩니다.
)
)
무효 initialize_IO_ports (무효)
(
/ / 요구 사항에 따라 디지털 입출력 포트를 설정할 수있습니다.
TRISA =를 0xFF; / / 입력으로 포트.
TRISB = 0x00; / / 출력으로 portB.
TRISD = 0x00;
처음에 /
/ 출력 포트를 비우십시오.
PORTA = 0x00; / / portD 분명합니다.
PORTB = 0x00;
PORTD = 0x00;
)무효 initialize_timer1 (무효)
(
TMR1CS = 0;
/ /
1:8 즉 8x200ns = timer1 카운트 = 1600nS의 prescalar 값을 설정할 수있습니다.
T1CKPS1 = 1;
T1CKPS0 = 1;
/ / 인터럽트의 조직에 대한 데이터 시트를 참조하십시오.
GIE = 1; / / 글로벌 활성화를 방해했다.
PEIE = 1; / / 주변 활성화를 방해했다.
TMR1IE = 1; / / timer1 인터럽트 활성화합니다.
)/ /이 함수는 하중 timer1, timer_value & 그것 수있습니다.
무효 load_timer1 (int timer_value)
(
TMR1ON = 0; / / 비활성화 timer1의 값을로드하기 전에.
= 0 TMR1IF; / / timer1 플래그를 해제합니다.
TMR1H = (0xFFFF - timer_value)>> 8; / / timer1로드 높은 등록할 수있습니다.
TMR1L = 0xFFFF - timer_value; / / timer1로드 낮은 등록할 수있습니다.
TMR1ON = 1; / / timer1 활성화.
)
주요 int ()
(
initialize_IO_ports ();
initialize_timer1 ();
load_timer1 (timer_value);(1) 동안
((RA0 == 1)
(
RB0 = 1;
RB1 = 1;
RB2 = 1;
RD0 = 1;
RD1 = 1;
RD2 = 1;
)
그 밖의
(
RB0 = 0;
RB1 = 0;
RB2 = 0;
RD0 = 0;
RD1 = 0;
RD2 = 0;
)
)
)
/
* 프로그램의 끝 * /감사합니다!!
5V의 입력 포트로 가지고 있지 않다 ... 장소그 결과 중 하나 1.3mv 또는 0.6mv을 측정하는 멀티미터 때 사용한다는 것입니다 ...
아래의 코드입니다 :# ifndef __CPU_16F877__
# 오류 "이 프로그램은 PIC16F877 컨트롤러에 맞게"
# 각각 endif
# "io16f877.h"/ / 하드웨어 레지스터 정의 파일을 포함합니다.
int timer_value = 0xEA60; / / 10 진수 60000.
무효 DelayUs (int 카운트)
(
int 난;
int j를;
은 (i = 0; 나는 <카운트; 난 )
(
(일본 = 0; j를 <5000; j를 );
/ /이 루프에 대한 5 NOPs했습니다 &
1 20MHz의 클럭 주파수를위한 우리의 PIC는 우리를 소모하게됩니다.
)
)
무효 initialize_IO_ports (무효)
(
/ / 요구 사항에 따라 디지털 입출력 포트를 설정할 수있습니다.
TRISA =를 0xFF; / / 입력으로 포트.
TRISB = 0x00; / / 출력으로 portB.
TRISD = 0x00;
처음에 /
/ 출력 포트를 비우십시오.
PORTA = 0x00; / / portD 분명합니다.
PORTB = 0x00;
PORTD = 0x00;
)무효 initialize_timer1 (무효)
(
TMR1CS = 0;
/ /
1:8 즉 8x200ns = timer1 카운트 = 1600nS의 prescalar 값을 설정할 수있습니다.
T1CKPS1 = 1;
T1CKPS0 = 1;
/ / 인터럽트의 조직에 대한 데이터 시트를 참조하십시오.
GIE = 1; / / 글로벌 활성화를 방해했다.
PEIE = 1; / / 주변 활성화를 방해했다.
TMR1IE = 1; / / timer1 인터럽트 활성화합니다.
)/ /이 함수는 하중 timer1, timer_value & 그것 수있습니다.
무효 load_timer1 (int timer_value)
(
TMR1ON = 0; / / 비활성화 timer1의 값을로드하기 전에.
= 0 TMR1IF; / / timer1 플래그를 해제합니다.
TMR1H = (0xFFFF - timer_value)>> 8; / / timer1로드 높은 등록할 수있습니다.
TMR1L = 0xFFFF - timer_value; / / timer1로드 낮은 등록할 수있습니다.
TMR1ON = 1; / / timer1 활성화.
)
주요 int ()
(
initialize_IO_ports ();
initialize_timer1 ();
load_timer1 (timer_value);(1) 동안
((RA0 == 1)
(
RB0 = 1;
RB1 = 1;
RB2 = 1;
RD0 = 1;
RD1 = 1;
RD2 = 1;
)
그 밖의
(
RB0 = 0;
RB1 = 0;
RB2 = 0;
RD0 = 0;
RD1 = 0;
RD2 = 0;
)
)
)
/
* 프로그램의 끝 * /감사합니다!!