本帖最后由 lisingch 于 2020-4-1 20:43 编辑
本次实验基于SC95F8617内部的定时器3产生100ms计时输出至P50端口,并利用逻辑分析仪对输出信号进行捕捉、观察。直观感受SC95F8617内建振荡频率可调的高精度高频振荡器“HRC”。
一、实验资源
1、SC95F8617 demo板;
2、SC-LINK;
3、Keil C51 V9.60;
4、逻辑分析仪及配套软件Logic 1.1.15;
二、相关资源简介
1、系统时钟
SC95F8617内建振荡频率可调的高精度高频振荡器,出厂时被精确地调校至32MHz(5V/25℃),压漂(2.0V~5.5V)以及(-40℃~105℃)的温漂会在 ±2% 以内,精度还是挺高的。应用中还可通过“Code Option”进行1/2/4/8进行分频,非常灵活。
2、定时器
SC95F8617的定时器资源非常丰富,除了TIMER0/1外 还有TIMER2/3/4 。这其中的TIMER3/4只有一种16位自动重载模式。因为TIMER2/3/4共用了同一组地址(C8H-CDH)的控制寄存器,使用中要通过TXINX[2:0]进行指定。
三、程序实现
TIMER配置:
//定时器3使用MCU内建高精度高频振荡器HRC
void Timer3_Config(void)
{
TXINX = 0X03; //TimerX寄存器组指向Timer3
TXMOD = 0X80; //Timer3时钟频率为FSYS=32MHz
THX = (65535-32000) / 256; //1ms
TLX = (65535-32000) % 256;
RCAPXH = (65535-32000) / 256;
RCAPXL = (65535-32000) % 256;
TRX = 1; //启动Timer3
IE1 = 0X40; //ET3=0 使能T中断
EA = 1; //开总中
断
}
TIMER3中断服务:
void Timer3_INT() interrupt 13 //Timer3中断服务函数
{
static unsigned char T3_Cont = 0;
TXINX = 0X03; //进入Timer3中断服务函数首先将TimerX寄存器组指向Timer3
TFX = 0; //清除Timer3中断标志位
T3_Cont++;
if(T3_Cont >= 100)
{
T3_Cont = 0;
P50 = ~P50;
}
}
主函数:
void main(void)
{
P5CON = 0xff; //设置P5为强推挽输出模式
Timer3_Config();
while(1)
{
}
}
四、实验结果
五、总结
SC95F8617的定时器资源丰富,操作方便,配合内置高精度高频振荡器可满足用户高标准的需求。
|