打印
[PIC®/AVR®/dsPIC®产品]

单片机倍频后有啥影响

[复制链接]
3336|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rain_King|  楼主 | 2014-11-27 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我使用的单片机型号是PIC18F46K22的,以前使用的时候,是直接使用的16M外部频率,没有倍频;但是后来,由于项目的需要,需要更高频率才能处理,于是我打开了4倍频的配置;但是最后发现出现了这些问题:
    操作IO口的时候,不能连续两个IO口操作,如下:
    PORTBbits.RB3 = 1;  //设置的输出
    PORTBbits.RB4 = 1;
    如果是上面连续赋值高电平,或者低等等,第一个会没有作用,只有最后一个有效果;但是如果中间加了一个延时语句,如下:
   PORTBbits.RB3 = 1;  //设置的输出
   Delay();   //延时几个ns,或者1us
    PORTBbits.RB4 = 1;
   加了延时语句后,就正常了;我看电气特性,和芯片介绍也没有说这个问题,哪位可以解释一下,或者告诉一下资料的解释的地方也可以;

  最后,就是除了上面的问题,倍频后,程序方面哪些还需要考虑的(什么定时器设置,这个我已经考虑了),硬件上需要哪些考虑??
沙发
yklstudent| | 2014-11-27 12:48 | 只看该作者
输出用LATB寄存器啊,别用PORTB

使用特权

评论回复
板凳
wy3383818| | 2014-11-27 13:59 | 只看该作者
恩,对,要用输出寄存器进行操作。以前也遇到这个问题。

使用特权

评论回复
地板
Rain_King|  楼主 | 2014-11-27 14:13 | 只看该作者
yklstudent 发表于 2014-11-27 12:48
输出用LATB寄存器啊,别用PORTB

我又看了一下寄存器,能具体说说么.....我看芯片手册上说,写入PORTB,就是写入LATB.....有啥区别么??

使用特权

评论回复
5
zhimagod| | 2014-11-27 14:44 | 只看该作者
没用过楼主的芯片,不过输出习惯用LATA寄存器
据说是因为PIC处理寄存器变化时采用“读-修改-写”的方式进行
大概意思就是先读出PORTB的内容,然后异或然后写到LATAB里面
所以说输出要用LATA,不然引脚上的电容会影响操作。
据说(又是据说……)虽然LATAB1被置1了,但是因为引脚上的电容影响实际上这个引脚并没有立刻达到高电平,所以LATAB1置1后立刻读取PORTB1的时候会读到“0”
罗嗦了一大堆不知道表达清楚没有……语言能力欠佳啊

使用特权

评论回复
6
Rain_King|  楼主 | 2014-11-27 15:02 | 只看该作者
本帖最后由 Rain_King 于 2014-11-27 15:15 编辑
zhimagod 发表于 2014-11-27 14:44
没用过楼主的芯片,不过输出习惯用LATA寄存器
据说是因为PIC处理寄存器变化时采用“读-修改-写”的方式进行 ...

我大致明白了点...但是有些说不通啊,你这里说的是操作IO口都会有影响,但是我这里只有连续操作IO口时才有影响,.....还有PIC16是没有LATA寄存器的.....

使用特权

评论回复
7
zhimagod| | 2014-11-27 17:25 | 只看该作者
Rain_King 发表于 2014-11-27 15:02
我大致明白了点...但是有些说不通啊,你这里说的是操作IO口都会有影响,但是我这里只有连续操作IO口时才有 ...

连续操作才会有端口的寄生电容充放电现象呗
举个栗子:
PORTB初值为0x00
连续操作时:
PORTB=0x0F;//第一步
//单片机读取PORTB为0x00,然后LATAB=0x00^0x0F,得到正确结果0x0F
PORTB=0xF0;//第二步
//单片机读取PORTB为0x00(因为此时单片机引脚上的寄生电容还没充满电还处在相对低电平状态),然后LATAB=0x00^0xF0,得到错误结果0xF0
延时操作时:
PORTB=0x0F;//第一步
//单片机读取PORTB为0x00,然后LATAB=0x00^0x0F,得到正确结果0x0F
delay();//延时等待端口寄生电容充满电,端口电平会达到接近电源电压的水平
PORTB=0xF0;//第二步
//单片机读取PORTB为0x55(因为此时单片机引脚上的寄生电容已经充满电处在相对高电平的状态),然后LATAB=0x0F^0xF0,得到正确结果0xFF

至于木有LATA端口的片子么,要么想办法减少端口寄生电容,要么降低端口速度,能合并在一起的端口变化就不要分开了,比如
PORTA0=1;
PORTA1=1;
PORTA2=1;
就直接合并了
PORTA=0x07;

使用特权

评论回复
8
yewuyi| | 2014-11-29 14:16 | 只看该作者
符合MCU最高工作频率范围,则倍频后指令执行周期缩小一半。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:努力学习,积极回复,只为申请版主.......

29

主题

784

帖子

4

粉丝