Forum: Mikrocontroller und Digitale Elektronik AT89C51SND1C Programmieren Interruptproblem


von Christof (Gast)


Lesenswert?

Hallo,
bin dabei mir einen Mp3 Player zu basteln. Nun habe ich ein kleines 
problem und zwar kriege ich meinen AT89C51SND1C nicht zum abspielen. 
Besser gesagt ich kriege ich nicht zum Interrupt. Hier mein Code.
1
#include <stdio.h>
2
#include <at8xc51snd1.h>
3
4
code unsigned char *Adresse;
5
6
extern void initlcd (void);
7
extern void loeschenlcd (void);
8
extern void textlcd (unsigned char *text, unsigned char zeile);
9
10
void InitMP3();
11
void InitAudio();
12
void InitPLL();
13
14
void MP_ISR(void) interrupt 5;
15
16
unsigned char zeile1[16];
17
unsigned char zeile2[16];
18
  
19
void main (void)
20
{
21
  initlcd();
22
  loeschenlcd();
23
  Adresse=0x2000;
24
25
  InitMP3();
26
  InitAudio();
27
  InitPLL();
28
  
29
  P5_3=1;
30
  
31
  //Interrupt & MP3 Interrupt ein
32
  EA = 1;
33
  EMP3 = 1;
34
  
35
  //Bit MSKREQ löschen
36
  MP3CON = 0b10011000;
37
38
  AUDCON1 = AUDCON1&&0b00000001;
39
  
40
  IPH0 = IPH0&&0b00100000;
41
  IPL0 = IPL0&&0b00100000;
42
43
  while(1)  
44
  {
45
    sprintf(zeile1, "NO Interrupt");
46
    textlcd (zeile1,1);
47
  }
48
}
49
50
void InitMP3()
51
{
52
  MP3CLK=3;
53
  MP3VOL = MP3VOR = 0x0F;
54
  //MP3CON=0xA0;
55
}
56
57
void InitAudio()
58
{
59
  AUDCLK=7;
60
  AUDCON0=0x86;
61
  AUDCON1=0x41;
62
}
63
64
void InitPLL()
65
{
66
  PLLNDIV=125;
67
  PLLRDIV=0x8E;
68
  PLLCON=0b00000010;
69
}
70
71
void MP3_Decoder_ISR(void) interrupt 5
72
{
73
  sprintf(zeile2, "Interrupt OK");
74
  textlcd (zeile2,2);
75
  if(MP3STA1&&0b00001000)
76
  {
77
    MP3DAT = *Adresse;
78
    Adresse++;
79
  }
80
    
81
}

Hoffe ich könnt mir helfen!!

gruß
Christof

von Robert S. (razer) Benutzerseite


Lesenswert?

>  AUDCON1 = AUDCON1&&0b00000001;

Das ist so nicht richtig. Ich nehme an du willst bitweise verunden.

Dann muss es so lauten:   AUDCON1 = AUDCON1&0b00000001;

Bei den anderen dann auch so

von Christof (Gast)


Lesenswert?

Danke für die hilfe!
mein problem besteht weiterhin, der interrupt wird nicht aufgerufen.

Ich bitte um weitere Hilfe. Vielleicht hat jemand von euch schon mit dem 
SND1C gearbeitet der mir dann helfen kann.

von Günter W. (bojar)


Lesenswert?

Hi

kommentier mal das while(1) aus, so wie es ausschaut sollte das zum test 
eh nicht nötig sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.