智能车制作

标题: 为什么我这个简单小程序的功能不能实现啊? 急死我了!!求指导!!! [打印本页]

作者: 只想更懂    时间: 2013-7-24 20:00
标题: 为什么我这个简单小程序的功能不能实现啊? 急死我了!!求指导!!!
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions  */  
void PLL_Init(void)
{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  REFDV=1;           //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
}


void main(void) {
  /* put your own code here */

    PLL_Init( );
    DDRB=0X00;//PB为输入端口
    PORTB=0X00;
    DDRA=0XFF;  //PA为输出端口
    PORTA=0X00;
    while(1)

    {
      switch(PORTB)
     {
       case 0X01ORTA=0Xf0;//PB0输入高电平则PA高4位输出高电平
       case 0X02:PORTA=0X0f;//PB1输入高电平则PA低4位输出高电平  
       default:PORTA=0X00;//其他情况PA全为低电平
       break;

     }
    }

}



作者: loveme06    时间: 2013-7-24 20:07
PORTB=0X00;是不是有问题啊,,,,自己研究一下、、、
作者: 只想更懂    时间: 2013-7-24 20:23
loveme06 发表于 2013-7-24 20:07
PORTB=0X00;是不是有问题啊,,,,自己研究一下、、、

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions  */  
void PLL_Init(void)
{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  REFDV=1;           //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
}


void main(void) {
  /* put your own code here */

    PLL_Init( );
    DDRB=0X00; //PB为输入端口

    DDRA=0XFF;  //PA为输出端口
    PORTA=0X00;
    while(1)

    {
      switch(PORTB)
     {
       case 0XFEORTA=0Xf0;//PB0输入低电平则PA高4位输出高电平
       case 0XFD:PORTA=0X0f;//PB1输入低电平则PA低4位输出高电平  
       default:PORTA=0X00;//其他情况PA全为低电平
       break;

     }
    }

}
刚刚那个是我错了  改成这个我觉得应该可以控制了啊   但是还是不行啊!!!  



作者: 理工小别    时间: 2013-7-24 20:31
好久没写程序了 你试着让PORTB赋给一个变量 让变量放在SITCH里判断试试吧
作者: loveme06    时间: 2013-7-24 20:36
只想更懂 发表于 2013-7-24 20:23
#include       /* common defines and macros */
#include "derivative.h"      /* derivative-specif ...

在线调试的时候,给变一下PORTB  的值看看,,我都现在驱动不能用了,没法发图,,
作者: 只想更懂    时间: 2013-7-24 21:46
loveme06 发表于 2013-7-24 20:36
在线调试的时候,给变一下PORTB  的值看看,,我都现在驱动不能用了,没法发图,,

变了   结果不按照程序来。。。  苦逼了{:soso_e109:}

作者: 只想更懂    时间: 2013-7-24 21:47
理工小别 发表于 2013-7-24 20:31
好久没写程序了 你试着让PORTB赋给一个变量 让变量放在SITCH里判断试试吧

还是不行啊   {:soso_e109:}

作者: 夜之音    时间: 2013-7-24 22:30
还是我来个标准答案吧,
在while(1)的前面加上一句,PUCR=0XFF;
保证解决问题,别忘了回来感谢我
作者: 穆旦阿斗    时间: 2013-7-25 05:28
同意楼上的 输入模式的时候可以选择是否上拉,就是说B口什么都不接的时候读回PORTB的值是高还是低
作者: 只想更懂    时间: 2013-7-25 09:35
夜之音 发表于 2013-7-24 22:30
还是我来个标准答案吧,
在while(1)的前面加上一句,PUCR=0XFF;
保证解决问题,别忘了回来感谢我

好激动  终于解决了  怎么谢呢   你要是女的我就以身相许吧  如果是男的。。。。来青岛请你喝正宗青岛啤酒

作者: 只想更懂    时间: 2013-7-25 09:36
穆旦阿斗 发表于 2013-7-25 05:28
同意楼上的 输入模式的时候可以选择是否上拉,就是说B口什么都不接的时候读回PORTB的值是高还是低

谢谢你的解释哈  让我知道加那句的意思  {:soso_e113:}

作者: 夜之音    时间: 2013-7-25 23:12
标题: RE: 为什么我这个简单小程序的功能不能实现啊? 急死我了!!求指导!!!
只想更懂 发表于 2013-7-25 09:36
谢谢你的解释哈  让我知道加那句的意思

这个解释有点小小的问题,上拉是指悬空时返回高电平1,但是不设置上拉却不一定返回0,因为还有可能返回随机数,比如128的AB口,AVR什么的
作者: 只想更懂    时间: 2013-7-26 10:47
夜之音 发表于 2013-7-25 23:12
这个解释有点小小的问题,上拉是指悬空时返回高电平1,但是不设置上拉却不一定返回0,因为还有可能返回随 ...

设置上拉就是为了让其悬空时返回高电平,不设置上拉的话就有可能端口悬空时也不会返回高电平,而是随机数,是这个意思吧!

作者: 穆旦阿斗    时间: 2013-7-26 10:47
夜之音 发表于 2013-7-25 23:12
这个解释有点小小的问题,上拉是指悬空时返回高电平1,但是不设置上拉却不一定返回0,因为还有可能返回随 ...

[attach]49009[/attach]  如果你设置成输入模式,没有设置是否上拉就不上拉,你悬空读回来应该是0啊,又不确定的状态?测过?是不是输入口有静电了?

作者: 只想更懂    时间: 2013-7-26 10:51
穆旦阿斗 发表于 2013-7-26 10:47
如果你设置成输入模式,没有设置是否上拉就不上拉,你悬空读回来应该是0啊,又不确定的状态?测过?是不 ...

我原先是这样想的:因为悬空相当于高电平,所以我就算不设置上拉,每次悬空应该都算是输入高电平吧,但是用单片机做实验好像不是这么回事,设置了上拉,我的程序功能才能实现,不设置就没反应。。。。

作者: 穆旦阿斗    时间: 2013-7-26 10:59
额 51的不设置输出的都是高,不要搞混了,初始化不对就在论坛找找别人的初始化,另外在看数据手册。不设置不会是随机的,你觉得飞思卡尔公司会让这种事儿发生?可能没测试的时候有静电影响了吧。你可以试一下,不设置也就是默认,再悬空读取PB口的值试试
作者: 夜之音    时间: 2013-7-26 12:12
穆旦阿斗 发表于 2013-7-26 10:47
如果你设置成输入模式,没有设置是否上拉就不上拉,你悬空读回来应该是0啊,又不确定的状态?测过?是不 ...

这个我确实亲测过的,LZ自己也说了,如果不设置上拉,所有功能都无法实现。为什么?就是因为返回了随机数,但并不是静电问题。
我用过的128和AVR系列,都必须设置,例如AVR给DDRx写0X00时,x口就会自动上拉(但128不是自动上拉的)。
而51什么都不用设置,它本身就不用设置方向,所以任何时候都是悬空自动上拉的





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2