单片机c语言中的中断问题 5

下面是一个用单片机自动演奏乐曲的程序,虽然有注释,但还是不大懂,麻烦帮忙详细解释一下,尤其是while循环中的后半部分#include<REG51.h>#defineuc... 下面是一个用单片机自动演奏乐曲的程序,虽然有注释,但还是不大懂,麻烦帮忙详细解释一下,尤其是while循环中的后半部分
#include <REG51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P15=P1^5;
code uint cyc[]={3600,3200,2880,2702,2400,2158,1920};//音阶1-7对应的计数周期数
code uchar tone[]={15,15,16,12,11,11,06,12,15,15,16,21,16,15,11,11,
06,12,15,12,11, 7, 6, 5,15,12,13,12,11,11, 6,12,
13,12,11,12,11, 7, 6, 5, 0};//乐曲《东方红》的简谱表
code uchar time[]={ 8, 4, 4,16, 8, 4, 4,16, 8, 8, 4, 4, 4, 4, 8, 4,
4,16, 8, 8, 8, 4, 4, 8, 8, 8, 4, 4, 8, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4,16, 0};//节拍表(8为1拍,约570mS)
uchar H0,L0,cnt;

void cntint0(void) interrupt 1 //定时器0中断用于产生音调
{ TH0=H0;
TL0=L0;
P15=~P15; //P1.5是音乐信号输出脚
}
void cntint1(void) interrupt 3 //定时器1中断用于产生节拍
{ cnt++; //定时器的计数初值为0,所以不用赋值
}
void main(void)
{ uchar i,a,t;
uint b;
next:
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
cnt=0;
TR1=1;
i=0;
while(1)
{ t=tone[i]; //读音调
if(t==0) break; //是0,则结束
b=cyc[t%10-1];
if(t<10) b=b*2;
if(t>20) b=b/2;
b=b/2;
H0=(65536-b)/256;
L0=(65536-b)%256;
cnt=0;
a=time[i]; //读节拍
if(a!=255) TR0=1; //255是休止符
while(a>cnt);
TR0=0;
i++;
for(b=0;b<1000;b++);
}
P15=1; //关闭喇叭
goto next; //重放一遍
}
展开
 我来答
750lgms041
2011-08-25 · TA获得超过595个赞
知道答主
回答量:452
采纳率:0%
帮助的人:270万
展开全部
1.void(中断函数返回类型(空型)) Time1 (中断函数名)(void(参数类型) interrupt 3 (中断号)
2: 中断条件发生时执行中断,比如void Time1(void) interrupt 3 是定时器1定时时间到发生中断,中断函数放在那里无所谓
3:void PxInt0(void) interrupt 0 中断名为PxInt0的0号中断
void PxInt1(void) interrupt 2 中断名为PxInt1的2号中断
void time0_int(void) interrupt 1 中断名为time0_int的1号中断
void time1_int(void) interrupt 3 中断名为time1_int的3号中断
4:中断的代码是你想中断执行的工作,中断的代码是根据任务,需要你自己写的
追问
你说得这些我明白,但是我不知道主程序和中断它们在时间上的运行,比如说,在中断执行之前,计数器一直在计数,那怎么知道主程序执行到那里的时候中断正好来了;还有计数器是每个机械周期加一,那主程序执行的时间怎么看呢?
意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式