粗略上手玩一把,就先拿定时器点个灯吧。直接在官方代码上修改的,思路跟51时代的代码区别不是很大,先初始化定时器,填入初值。主函数调用然后开启定时器,等待定时器溢出后,在中断服务函数里重装初值以及翻转IO口即可。
查看LED灯的硬件连接,可发现:D3阴极连接到了单片机的P01口,如下图所示:
确定好硬件连接后,接下来开始配置IO口为输出。代码部分如下:
P0 &= 0xFDU;
PM0 &= 0xFDU;
PMC0 &= 0xFDU;
这里解释下各个寄存器的作用及配置。P0即为设定端口输出锁存值的寄存器;
PM0为端口模式寄存器;
PMC0为端口模式控制寄存器
这几句代码将P01口配置为数字输出模式,并且向其写0。
端口配置就介绍到这里,下面开始配置定时器。R7F0C809的定时器功能很强大,如下图所示:
由上图可以看出,R7F0C809定时器可以用作间隔定时器、方波输出、计数器、延迟计数器、多路PWM输出、分频器等功能,定时器和串口结合更可以实现串口的波特率校正,即自适应波特率。功能比51强大的多。
本次试验我只使用定时器最基本的功能,即间隔定时器。配置定时器为2ms溢出一次,溢出250次后,翻转IO口,达到500ms亮、500ms灭的效果。通过观察R7F0C809装入定时器数据寄存器的值发现,定时器的计数频率为10MHZ。是主时钟频率的一半。为什么这么说呢?看2ms填入的数值为0X9C3F=39999;1ms填入的数值为0X4E1F=19999;0.5ms对应于0x270F。由以上数据可算出计数频率为10MHZ。
将代码下到板子上,可以看到小灯开始闪烁了。