新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C8051F320-时钟和4in1八段管

C8051F320-时钟和4in1八段管

作者:时间:2012-08-16来源:网络收藏

小结:T2可以工作在3种方式下,单个16位,2个8位,USB起始帧捕捉。使用前,必须设置TM2RCN控制字的D4D3决定工作方式。还必须设置源,在CKCON和TMR2H都有涉及。

对于16位时钟,计数值存放在TMR2H和TMR2L,有专门的重载寄存器TMR2RLH和TMR2RLL。启动时可能是用TR2,开中断用IE.5(ET2),计数到标志位叫TF2H,另有TF2L,必须专门在控制字的D5进行设置才能使用。

对于8位时钟,和上面基本差不多,共用一个中断。

T3和T2没啥区别,名字数字改改,中断允许叫ET3,但位置不在IE,无所谓。

四、程序实测

1、T2 单16位,16位中断实测

初始化:

CKCON=0x00; //D1D0定了分频数,就是在系统分频振荡器后,定时器还能分频一次。
//D3D2比较爽,写个0x0c,不分频直接给时钟用,很快。。。
TMR2CN=0x00; //D5不允许低8位中断 D4禁止SOF D3单16位 D2暂不启动 D0使用12分频时钟
TMR2L=0x78;
TMR2H=0xEC;
TMR2RLH =0xEC;
TMR2RLL =0x78;
EA=1;
ET2=1;

启动:TR2=1;

中断号 :5

中断里面必须加 TF2H=0;

结果,成功

2、T2 单16位,允许低八位中断,尝试根据中断标志决定处理或者不处理低八位。

上面的初始化改一句 TMR2CN=0x20; 由于低八位计数到就中断,且低八位中断没清除,分针又跑得飞快了

中断多一句清除指令 TF2L=0; 秒针走很快,合理。因为每255就中断一次

中断最前面多一段 if(TF2L==1){TF2L=0;return;} 忽略低八位时钟中断,秒针正常了

3、T2双8位,实在懒得测试了。 测试一下T3的中断号

悲剧了,T3的寄存器都没有定义!查资料。。。

修正1 : 在头文件里把TMR2CN的位定义复制一份,改成3,成功

修正2 : 在头文件里手动编写EIE1的位定义

/* EIE1 */
sbit ET3 = EIE1 ^ 7;
sbit ECP1 = EIE1 ^ 6;
sbit ECP0 = EIE1 ^ 5;
sbit EPCA0 = EIE1 ^ 4;
sbit EADC0C = EIE1 ^ 3;
sbit EWADC0 = EIE1 ^ 2;
sbit EUSB0 = EIE1 ^ 1;
sbit ESMB0 = EIE1 ^ 0;

失败,提示该地址无效?(invalid base address)

修正3: 直接用 EIE1 |= 0x80; 编译通过

运行后还是不走,估计是中断号有错!!!

直接在main函数中查询T3中断标志位,手动跳转到中断程序,可以运行,但是速度慢得没天理。

可见T3中断确实不是这么用的,待查。。。。

还有一个猜测,是不是keil对interrupt 14不支持??

又多了个疑点,改回T2,同样用查询方式,手动跳转,速度非常正常!看来T3的PDF没有看是个严重错误!


上一页 1 2 下一页

关键词: C8051F320 时钟 八段管

评论


相关推荐

技术专区

关闭