十分感谢SOSO和其他EEWORLD朋友、斑竹的辛勤劳动,让我终于用上了32位的单片机。以前做了一些项目,都用了PIC和AVR的8位单片机,而且PIC甚至用汇编语言。前几年有朋友要我做一个项目,并要求最好用32位单片机,我当时以8位MCU完全可以胜任的理由略过了要求。不过以后的进展表明:8位机确实可以胜任,而且做的很好。
个人愚见:完成同样的任务,特别是那些控制应用(就象红绿灯那种的),8位机的需要代码字节数要小很多(几分之一吧!);但是8位机做运算的时候精度确实太差了,有很多时候你不得不为了提供计算精度而自己写函数,就是用C语言的时候int变量也只有16位,而32机的int变量为32位能满足你大多数计算要求,现在手持仪器越来越多,计算要求越来越高。至于速度我想并不是32位机的主要强项:高速度会带来功耗的提高,而且8位机的频率也可以做到几百兆。基本控制的话8位机足够了,有特殊的计算要求采用32位机才理想。以上个人想法,如果大家有不同意见请指教。
下面是我第一个实验PWM发生器。
LPC1343有两个16位计时器和两个32位计时器,这里我用了TIMER16B0的CT16B0_MAT0(引脚PIO0_8)作为PWM输出(PWM周期为139uS),控制SysTick产生1ms的定时,定时唤醒主程序修改PWM的输出脉冲宽度。这样从LPC1343的PIO0_8输出的脉冲宽度从大到小,再从小到大,周而复始......接到PIO0_8的LED(另一端接地)也会呼吸哦!
我是从例子blinky(LED的闪烁)修改的,注意:blinky例子使用72MHz系统主时钟(由系统PLL电路和12MHz晶体获得)。
下面是PWM初始化的步骤:
1、 初始化SYSTick,这个和PWM没有关系,只是提供程序定时唤醒用的,TICK的重载值越小TICK频率越大,因为是一个24位的,所以不能大于16.7M
2、 提供了timer160的时钟后才能操作;
3、 将引脚PIO0_8设为CT16B0_MAT0功能;
4、 设置CT16B0_MAT0的匹配值;
5、 将CT16B0_MAT0的PWM模式打开;
6、 设置予分频寄存器;
7、 设置如果MR3和TC匹配,TC复位;
8、 设置CT16B0_MAT3的匹配值;
9、 设置计数控制寄存器选择计时器模式(每个PCLK上升沿;
8、 启动计数:TMR16B0TCR[0]=1;
更详细的请看附件例子的注释。
PWM例子
楼主指的32位特殊运算要求是指?难道32位不胜在速度快么?
----------------------------------------------------------------
个人认为32位机在计算速度和计算精度上是胜出的,而8位机也有资源消耗低(起码ROM、RAM要少用很多)、耗电低(资源消耗低的结果)、产品线丰富(得益于多年的积累)的特点。
大家都有优势、互相填补空白,看应用选择用哪种!