stc单片机编程如何设置内部时钟
stc是单片机吗?
stc是单片机吗?
stc是单片机。
STC是中国自己产的一种单片机,是宏晶科技生产的单时钟/机器周期(1T)的单片机。
STC单片机是高速/低功耗/抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S)。
比如音乐的数据表,频率表都是怎么得到的?
一首音乐是许多不同的音符组成的,而每个音符对应着不同的频率,这样我们利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来说,产生不同的频率非常方便。我们可以利用单片机的定时器/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系设置正确即可。 若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将I/O口反相,然后重复计时再反相。就可以在该I/O口引脚上得到频率的脉冲。 STC89C52RC单片机的一个计数周期需要12个时钟周期,采用12MHz晶振,一个计数周期即1us。利用单片机内部的定时器,使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。例如,中音DO频率为523Hz,其周期T1/5231912us,因此只要令计数器计时956us/1us956,每计数956次将I/O口反相,就可得到中音DO。 计数脉冲值与频率的关系式是: Nfi÷2÷fr 式中,N是计数值;fi是机器频率(晶振为12MHz时,其频率为1MHz);fr是想要产生的频率。 其计数初值T的求法如下: T65536-N65536-fi÷2÷fr 单片机12MHz晶振,高中低音符与计数值对照如表 3 1所示。 表 3 1 C大调各音符频率与计数值对照表 音符
频率Hz
周期(T值)
音符
频率Hz
周期(T值) 低音区
低音DO
262
63628
中音区
#FA
740
0676 #DO
277
63731
中SO
784
0638 低RE
294
63836
#SO
831
0602 #RE
311
63928
中LA
880
0568 低M
330
64020
#LA
932
0536 低FA
349
64103
中SI
988
0506 #FA
370
64186
高音区
高DO
1046
0478 低SO
392
64260
#DO
1109
0451 #SO
415
64331
高RE
1175
0426 低LA
440
64400
#RE
1245
0402 #LA
466
64464
高M
1318
0372 低SI
494
64524
高FA
1397
0358 中音区
中DO
523
64580
#FA
1480
0338 #DO
554
64633
高SO
1568
0319 中RE
578
64694
#SO
1661
0292 #RE
622
64732
高LA
1760
0284 中M
659
64777
#LA
1865
0268 中FA
698
64820
高SI
1976
0253 注:#代表该音符升半调。 我们要为这些音符建立一个表格,让单片机通过查表的方法来获得音符的计数值。 unsigned int code note_value[][14]{ {0,63628,63835,64021,64103,64260,64400,64524,63731,63928,0,64185,64331,64463},
//低音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值
{0,64580,64684,64777,64820,64898,64968,65030,64633,64732,0,64860,64934,64994}, //中音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值
{0,65058,65110,65157,65178,65217,65252,65283,65085,65134,0,65198,65235,65268} //高音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值 }; 音乐的节拍,一个节拍为一个单位。如表 3 2所示。 表 3 2 曲调值表 曲调值
延时(ms)
曲调值
延时(ms) 调4/4
125
调4/4
62 调3/4
187
调3/4
94 调2/4
250
调2/4
125 实在不好意思,之前一直没有用文字整理出来,所以才给你回答,希望对你有帮助。