本帖最后由 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的定时器资源丰富,操作方便,配合内置高精度高频振荡器可满足用户高标准的需求。
|