(求助)用8051 C語言 用外部中斷 使蜂鳴器播放音樂

無法使得這程式正確播放出我想要給他的頻率
請問有大大可以幫忙改一下嗎
感激不盡

#include <reg51.h>
#include <KB44.h>
sbit P1_0=P1^0;
int MUSIC_TYPE[]=
{4141,4141,3690,4141,3109,3288,4141,4141,3690,4141,3109,
3288,4141,4141,2768,3690,3690,4141,4141,3109,3109,3288,4141,3690,4141};
int a=1;
int sound;
main()
{
int j;
while(1)
{

sound=MUSIC_TYPE[a];
SP=0x60;
IE=0x88;
TMOD=0x10;
TH1=(65536-sound)/256;
TL1=(65536-sound)%256;
TR1=1;
P1_0=0;
}

} /* main */

void T1_int(void) interrupt 3 /* T1=50ms */
{
int i;
sound=MUSIC_TYPE[a];
TH1=(65536-sound)/256;
TL1=(65536-sound)%256;
P1_0=~P1_0;
delay1ms(10) ;
a++;
}
這程式是很基本的 8051 教學 C 練習程式吧 ?

所有需要的程式碼在你貼的程式裡面都有了, 只是有些程式片段是多餘的, 請自己看懂程式, 把不需要的拿掉應該就行了. 如果這樣你還做不出來, 我想你應該需要重修, 或者你並不適合走這行.
你程式這樣子寫,你中斷程式會無法觸發。因為你在主程式一直reload timer的值會造成timer無法溢位產生中斷

你可以改成這樣子去試試:

#include <reg51.h>
#include <KB44.h>
sbit P1_0=P1^0;
int MUSIC_TYPE[]=
{4141,4141,3690,4141,3109,3288,4141,4141,3690,4141,3109,
3288,4141,4141,2768,3690,3690,4141,4141,3109,3109,3288,4141,3690,4141};
int a=1;
int sound;
main()
{
int j;
TH1=(65536-sound)/256;
TL1=(65536-sound)%256;
while(1)
{

sound=MUSIC_TYPE[a];
SP=0x60;
IE=0x88;
TMOD=0x10;

TR1=1;
P1_0=0;
}

} /* main */

void T1_int(void) interrupt 3 /* T1=50ms */
{
int i;
sound=MUSIC_TYPE[a];
TH1=(65536-sound)/256;
TL1=(65536-sound)%256;
P1_0=~P1_0;
delay1ms(10) ;
a++;
}
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!