D
dum311
Guest
안녕하십니까!
난 디지털 항법 보조를하고있는 중이야.그것은 P18F4620 마이크로 컨트롤러, ISD2560 음성 녹음으로 구성되어있습니다 / 재생 칩 LM4808M 앰프, 5volts 및 3.3volts 전압 레귤레이터 및 3 스위치, 녹음 스위치를 재생 전환합니다.첫째, 나는 칩에 SW3을 누르면 메시지를 기록해야합니다.그럼 SW4 누르면, 내 목소리를 재생한다.
내 목표는 1 번에 밀어 버튼 모드를 사용하여 응용 프로그램이 메시지를 재생하는 메시지를 기록하는 데 사용될 수있는 휴대용 장치를 만들 수있습니다.
MPLAB IDE를 v7.40 - C 언어를 사용하여.
내 문제 :
때 레코드 버튼을 누르면, 음성 칩에 기록되지 않습니다.재생 버튼에 대한 코드는 작동하지 않습니다.
여기에 프로그래밍합니다 :
# 포함 <p18f4620.h> / / 특별한 기능은 등록을 선언하기
# 포함 <portb.h> / / RB0/INT0에 대한 인터럽트
# 포함 <delays.h>
홍보 PORTCbits.RC2 정의 #
경찰 PORTDbits.RD7 정의 #
CE_ PORTDbits.RD6 정의 #
EOM_ PORTCbits.RC3 정의 #무효 초기화 (무효)
(
경찰 = 1;
CE_ = 1;
홍보 = 1;
PORTCbits.RC4 = 0; / / RC4는 낮은 핀 세트
PORTBbits.RB5 = 0; / / RB5 낮은 핀 세트
PORTBbits.RB4 = 0; / / RB4 낮은 핀 세트
PORTBbits.RB3 = 0; / / RB3 낮은 핀 세트
PORTAbits.RA5 = 0; / / RA5 낮은 핀 세트
PORTAbits.RA4 = 1; / / RA4 높은 핀 세트
PORTEbits.RE2 = 0; / / RE2는 낮은 핀 세트
PORTEbits.RE1 = 0; / / RE1 낮은 핀 세트
PORTEbits.RE0 = 0; / / RE0 낮은 핀 세트
)
무효 모드 (무효)
(
CE_ = 0; / / 녹음 시작 / 재생
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
CE_ = 1; / / 가전 다시 기록을 중지 높은 소요될 / 재생
)
무효 기록 (무효);
무효 재생 (무효);
= 0x8 HIGH_INTERRUPT_VECTOR #에서 Pragma 코드
무효 high_ISR (무효)
(
만약 (INTCONbits.INT0IF == 0) / / 루틴이 인터럽트
(
_asm
고토 기록
_endasm
)
만약 == 0 () INTCON3bits.INT1IF
(
_asm
고토 재생
_endasm
)
)
#에서 Pragma 코드 / / 링커 나머지 코드를 찾을 수있습니다
#에서 Pragma 기록 인터럽트
무효 기록 (무효)
(
경찰 = 0; / / 낮은 상태로 경찰이 걸릴
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
홍보 = 0; / / 홍보 낮은 핀 걸릴
CE_ = 1;
모드 ();
EOM_ = 1;
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
(! PORTBbits.RB0) 동안
(
= 0 INTCONbits.INT0IF; / / 확실히 다른 플래그를 방해하지 않도록
초기화 ();
)
)
#에서 Pragma 재생 방해
무효 재생 (무효)
(
경찰 = 0; / / 낮은 경찰로 설정
홍보 = 1; / / 하이 홍보 걸릴
CE_ = 1;
모드 ();
(! PORTBbits.RB1) 동안
(
= 0 INTCON3bits.INT1IF;
초기화 ();
)
)무효 EnableHighInterrupts (무효)
(
RCONbits.IPEN = 1; / / 우선순위 레벨 인터럽트 활성화
INTCONbits.GIEH = 1; / / 사용 모든 우선 순위가 높은 인터럽트
)
무효 WaitForButton (무효)
(
= 0 INTCONbits.RBIF;
초기화 ();
(1) 반면, / / SW3 버튼을 누르면 기다릴 수
)하기 위해서는 그것을 실행 무효 * 메인 (무효) / *이 프로그램은 키보드에서 사용자 입력을 필요로하지 않습니다 /
(
/ 초기화 * PORTA * /
Lata = 0x00; / / 초기화 간이 개간하여 출력 데이터 래치
PORTA = 0x00;
ADCON1 = 0x0F; / / 구성 / D 디지털 입력을위한
TRISA = 0x0F; / / RA "3시"로 입력, RA "4시 5분"로 출력
/ / RA "6시 7분"을 "0"이 때 포트 핀을 사용하지
CMCON = 0x07; 디지털 입력을위한 / / 구성 비교
/ PORTB * 초기화 * /
LATB = 0x00; / / 초기화 PortB 개간하여 출력 데이터 래치
TRISB = 0xC7; / / RB "2시"& RB "7시 6분"로 입력, RB "5시 3분"로 출력/ PORTC * 초기화 * /
LATC = 0x00; / / 초기화 PortC 개간하여 출력 데이터 래치
TRISC = 0x20; 입력, RC "7시 6분"& RC "4시"출력으로 / / RC5/ PORTD * 초기화 * /
/ / PORTD = 0x00;
LATD = 0x00; / / 초기화 PortD 개간하여 출력 데이터 래치
TRISD = 0x00; / / R
& D가 "7시"로 출력/ 초기화 * PORTE * /
늦게 = 0x00; / / 초기화 Porte 개간하여 출력 데이터 래치
TRISE = 0x00; / / 헤 "7시"로 출력 * /
EnableHighInterrupts ();
OpenRB0INT (PORTB_CHANGE_INT_ON & / / RB0/INT0 인터럽트 활성화
PORTB_PULLUPS_ON & 입력 / / 구성 RB0 핀
FALLING_EDGE_INT); / / 트리거 SW3 버튼을 클릭시 인터럽트
/ / 우울증
OpenRB1INT (PORTB_CHANGE_INT_ON &
PORTB_PULLUPS_ON &
FALLING_EDGE_INT);
WaitForButton ();
)매우 much.i 여러분의 답변에 최대한 빨리 찾고 감사합니다
난 디지털 항법 보조를하고있는 중이야.그것은 P18F4620 마이크로 컨트롤러, ISD2560 음성 녹음으로 구성되어있습니다 / 재생 칩 LM4808M 앰프, 5volts 및 3.3volts 전압 레귤레이터 및 3 스위치, 녹음 스위치를 재생 전환합니다.첫째, 나는 칩에 SW3을 누르면 메시지를 기록해야합니다.그럼 SW4 누르면, 내 목소리를 재생한다.
내 목표는 1 번에 밀어 버튼 모드를 사용하여 응용 프로그램이 메시지를 재생하는 메시지를 기록하는 데 사용될 수있는 휴대용 장치를 만들 수있습니다.
MPLAB IDE를 v7.40 - C 언어를 사용하여.
내 문제 :
때 레코드 버튼을 누르면, 음성 칩에 기록되지 않습니다.재생 버튼에 대한 코드는 작동하지 않습니다.
여기에 프로그래밍합니다 :
# 포함 <p18f4620.h> / / 특별한 기능은 등록을 선언하기
# 포함 <portb.h> / / RB0/INT0에 대한 인터럽트
# 포함 <delays.h>
홍보 PORTCbits.RC2 정의 #
경찰 PORTDbits.RD7 정의 #
CE_ PORTDbits.RD6 정의 #
EOM_ PORTCbits.RC3 정의 #무효 초기화 (무효)
(
경찰 = 1;
CE_ = 1;
홍보 = 1;
PORTCbits.RC4 = 0; / / RC4는 낮은 핀 세트
PORTBbits.RB5 = 0; / / RB5 낮은 핀 세트
PORTBbits.RB4 = 0; / / RB4 낮은 핀 세트
PORTBbits.RB3 = 0; / / RB3 낮은 핀 세트
PORTAbits.RA5 = 0; / / RA5 낮은 핀 세트
PORTAbits.RA4 = 1; / / RA4 높은 핀 세트
PORTEbits.RE2 = 0; / / RE2는 낮은 핀 세트
PORTEbits.RE1 = 0; / / RE1 낮은 핀 세트
PORTEbits.RE0 = 0; / / RE0 낮은 핀 세트
)
무효 모드 (무효)
(
CE_ = 0; / / 녹음 시작 / 재생
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
CE_ = 1; / / 가전 다시 기록을 중지 높은 소요될 / 재생
)
무효 기록 (무효);
무효 재생 (무효);
= 0x8 HIGH_INTERRUPT_VECTOR #에서 Pragma 코드
무효 high_ISR (무효)
(
만약 (INTCONbits.INT0IF == 0) / / 루틴이 인터럽트
(
_asm
고토 기록
_endasm
)
만약 == 0 () INTCON3bits.INT1IF
(
_asm
고토 재생
_endasm
)
)
#에서 Pragma 코드 / / 링커 나머지 코드를 찾을 수있습니다
#에서 Pragma 기록 인터럽트
무효 기록 (무효)
(
경찰 = 0; / / 낮은 상태로 경찰이 걸릴
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
홍보 = 0; / / 홍보 낮은 핀 걸릴
CE_ = 1;
모드 ();
EOM_ = 1;
Delay10KTCYx (200) / 2,000,000 명령어 사이클의 배수로 * 지연.지연 시간 500 밀리초 * 용 /
(! PORTBbits.RB0) 동안
(
= 0 INTCONbits.INT0IF; / / 확실히 다른 플래그를 방해하지 않도록
초기화 ();
)
)
#에서 Pragma 재생 방해
무효 재생 (무효)
(
경찰 = 0; / / 낮은 경찰로 설정
홍보 = 1; / / 하이 홍보 걸릴
CE_ = 1;
모드 ();
(! PORTBbits.RB1) 동안
(
= 0 INTCON3bits.INT1IF;
초기화 ();
)
)무효 EnableHighInterrupts (무효)
(
RCONbits.IPEN = 1; / / 우선순위 레벨 인터럽트 활성화
INTCONbits.GIEH = 1; / / 사용 모든 우선 순위가 높은 인터럽트
)
무효 WaitForButton (무효)
(
= 0 INTCONbits.RBIF;
초기화 ();
(1) 반면, / / SW3 버튼을 누르면 기다릴 수
)하기 위해서는 그것을 실행 무효 * 메인 (무효) / *이 프로그램은 키보드에서 사용자 입력을 필요로하지 않습니다 /
(
/ 초기화 * PORTA * /
Lata = 0x00; / / 초기화 간이 개간하여 출력 데이터 래치
PORTA = 0x00;
ADCON1 = 0x0F; / / 구성 / D 디지털 입력을위한
TRISA = 0x0F; / / RA "3시"로 입력, RA "4시 5분"로 출력
/ / RA "6시 7분"을 "0"이 때 포트 핀을 사용하지
CMCON = 0x07; 디지털 입력을위한 / / 구성 비교
/ PORTB * 초기화 * /
LATB = 0x00; / / 초기화 PortB 개간하여 출력 데이터 래치
TRISB = 0xC7; / / RB "2시"& RB "7시 6분"로 입력, RB "5시 3분"로 출력/ PORTC * 초기화 * /
LATC = 0x00; / / 초기화 PortC 개간하여 출력 데이터 래치
TRISC = 0x20; 입력, RC "7시 6분"& RC "4시"출력으로 / / RC5/ PORTD * 초기화 * /
/ / PORTD = 0x00;
LATD = 0x00; / / 초기화 PortD 개간하여 출력 데이터 래치
TRISD = 0x00; / / R
& D가 "7시"로 출력/ 초기화 * PORTE * /
늦게 = 0x00; / / 초기화 Porte 개간하여 출력 데이터 래치
TRISE = 0x00; / / 헤 "7시"로 출력 * /
EnableHighInterrupts ();
OpenRB0INT (PORTB_CHANGE_INT_ON & / / RB0/INT0 인터럽트 활성화
PORTB_PULLUPS_ON & 입력 / / 구성 RB0 핀
FALLING_EDGE_INT); / / 트리거 SW3 버튼을 클릭시 인터럽트
/ / 우울증
OpenRB1INT (PORTB_CHANGE_INT_ON &
PORTB_PULLUPS_ON &
FALLING_EDGE_INT);
WaitForButton ();
)매우 much.i 여러분의 답변에 최대한 빨리 찾고 감사합니다