• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

紧急!求助大神。PIC18F25K80单片机

KENSHIN 2014-11-19 浏览量:2580
本人新手,要求写个程序测试PIC18F25K80单片机,测试两个端口分别高电平和低电平输出,每10秒出现波纹!下面我写的对么?应该怎么写?

#include              //包含单片机内部资源预定义

AD1PCFG = 0xFFFF;                //设置所有IO口为数字IO口,而非模拟IO口。
TRISA = 0xFFFE;                  //bit0 置为0,其他bit置为1.
LATAbits.LATA0 = 0;              // A0脚输出0电平。
void init();                     //I/O口初始化函数申明

void IOports(void)
{
AD1PCFG = 0xFFFF;
TRISA = 0xFFFD; // 配置A0,A1为数字输出口


while(10)
{
LATAbits.LATA0 = 0;              // A0脚输出低电平。
Delayms(10);                       // 延时10ms
LATAbits.LATA1 = 1;              // A1脚输出高电平。
Delayms(10);                       // 延时10ms
}
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • #include              //包含单片机内部资源预定义
    AD1PCFG = 0xFFFF;                //设置所有IO口为数字IO口,而非模拟IO口。
    TRISA = 0xFFFE;                  //bit0 置为0,其他bit置为1.
    LATAbits.LATA0 = 0;              // A0脚输出0电平。
    void init();                     //I/O口初始化函数申明

    void Delayms(int ms);//延时函数声明

    void main()

    {
        int a=0;

        int b=1;

        IOports();//IO初始化

         while(1)
        {
           LATAbits.LATA0 = ~a;              // A0脚输出高低电平。
           Delayms(10);                       // 延时10ms
           LATAbits.LATA1 = ~b;              // A1脚输出高低电平。
           Delayms(10);                       // 延时10ms
        }
    void Delayms(int ms)

    {

        int i,j;

    for(i=0;i<20;i++)

    for(j=0;j

    }                      
    void IOports(void)
    {
    AD1PCFG = 0xFFFF; 
    TRISA = 0xFFFC; // 配置A0,A1为数字输出口1111111111111100--->A0,A1配置为输出
    }

    • 发布于 2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:14
  • 入口函数呢,延时函数在哪里声明的
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果要精确延时,建议采用定时器……不要用延时函数……
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • #include              //包含单片机内部资源预定义

    AD1PCFG = 0xFFFF;                
    TRISA = 0xFFFE;                  //bit0 置为0,其他bit置为1.
    LATAbits.LATA0 = 0;              // A0脚输出0电平。
    void delay();                     //I/O口初始化函数申明

    void main()                 
    {
        TRISA = 0xFFFD;                // 配置A0,A1为数字输出口
        while (1)         
        {
            LATAbits.LATA0 = 0;              // A0脚输出低电平。
            delay();
            LATAbits.LATA1 = 1;              // A1脚输出高电平。
            delay();
        }
    }
     
    void delay()              
    {
        int i;                 //定义整形变量
        for (i = 500;i--;);     //延时

    }


    请问这样OK么?

    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 应该还有端口重置  这样你的IO口一直重置1或者0  是这样测试吗?
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0


  •  

    #i nclude
    __CONFIG(0x3B32);
     
    int main(void)

    {

    unsigned char pv; //总线操作输出数据,以B口为例:
    TRISB=0x00;//先设置B口的方向为输出方式(相应位设0为输出,设1为输入)
    PORTB=0xaa;//赋值,B口输出数据0xaa  //总线操作读取数据,以B口为例:
    TRISB=0xff;//先设置B口的方向为输入方式(相应位设0为输出,设1为输入)
    pv=PORTB;//读取B口的数据放到pv变量  //位操作,以B口的第0位为例:
    TRISB=0xfe;//先设置B口的第0位(RB0)的方向为输出方式(相应位设0为输出,设1为输入)
    RB0=1;//B口的第0位输出高电平
    RB0=0;//B口的第0位输出低电平
    return 0;
    }

    参考一下吧

     

    写程序
    一般先初始化,设定IO口方向 输入还是输出        TRIS
                  设定IO口初态 高电平还是低电平     PORT 
    此步骤完成后
    对IO口通常都不是直接操作 比如RA0=0;(可以这样写但不推荐)
    通常的做法是设定中间变量 TEMP
    在执行函数中对TEMP进行一系列赋值和运算
    最终在主函数中把TEMP的值付给(比如)A口
    PORTA=TEMP

     

    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • #include       //包含单片机内部资源预定义

    AD1PCFG = 0xFFFF;                //设置所有IO口为数字IO口,而非模拟IO口。
    TRISA = 0xFFFE;                  //bit0 置为0,其他bit置为1.
    LATAbits.LATA0 = 0;              // A0脚输出0电平。
    void init();                     //I/O口初始化函数申明

    void Delayms(int ms);//延时函数声明

    void main()

    {
        int a=0;

        int b=1;

        IOports();//IO初始化

         while(1)
        {
           LATAbits.LATA0 = ~a;              // A0脚输出高低电平。
           Delayms(10);                       // 延时10ms
           LATAbits.LATA1 = ~b;              // A1脚输出高低电平。
           Delayms(10);                       // 延时10ms
        }
    void Delayms(int ms)

    {

        int i,j;

    for(i=0;i<20;i++)

    for(j=0;j

    }                      
    void IOports(void)
    {
    AD1PCFG = 0xFFFF;
    TRISA = 0xFFFC; // 配置A0,A1为数字输出口1111111111111100--->A0,A1配置为输出,不是>--0xFFFD--<
    }


     应该是这样的,我也没学过PIC单片机。上网搜了一下,应该是这样写的

    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 谢谢各位详细解答。可是编译不过去。报错...

    ----------------------------------------------------------------------
    Debug build of project `E:PICDemodemo1test2.mcp' started.
    Preprocessor symbol `__DEBUG' is defined.
    Wed Nov 19 14:40:03 2014
    ----------------------------------------------------------------------
    Make: The target "E:PICDemodemo1pic_test2.o" is out of date.
    Executing: "D:MicrochipMCC18binmcc18.exe" -p=18F25K80 "E:PICPIC2 LED1-1pic_test2.c" -fo="pic_test2.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
    Unknown processor '18F25K80'
    Halting build on first failure as requested.
    ----------------------------------------------------------------------
    Debug build of project `E:PICDemodemo1test2.mcp' failed.
    Preprocessor symbol `__DEBUG' is defined.
    Wed Nov 19 14:40:04 2014
    ----------------------------------------------------------------------
    BUILD FAILED

    什么意思...总是出现Preprocessor symbol `__DEBUG' is defined.

    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • Unknown processor '18F25K80,编译器没配置好芯片?
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 没用过额,你去网上搜一下,都有教程的
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • http://www.pic16.com/bbs/dispbbs.asp?boardID=23&ID=7641&page=1

    http://pic16.com/bbs/dispbbs.asp?boardid=8&id=44078&move=next

    http://wenku.baidu.com/view/33ef8897dd88d0d233d46a0d.html

    参考

    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 当然编译过不去,你看看程序是怎样写的啊。


    #include              //包含单片机内部资源预定义

    AD1PCFG = 0xFFFF;                //设置所有IO口为数字IO口,而非模拟IO口。
    TRISA = 0xFFFE;                  //bit0 置为0,其他bit置为1.
    LATAbits.LATA0 = 0;              // A0脚输出0电平。
    void init();                     //I/O口初始化函数申明

    void IOports(void)
    {
    AD1PCFG = 0xFFFF; 
    TRISA = 0xFFFD; // 配置A0,A1为数字输出口


    while(10)
    {
    LATAbits.LATA0 = 0;              // A0脚输出低电平。
    Delayms(10);                       // 延时10ms
    LATAbits.LATA1 = 1;              // A1脚输出高电平。
    Delayms(10);                       // 延时10ms
    }
    }


    你看看高亮的那些代码,不再任何函数中,这样语法上会正确吗。



    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 每十秒出现纹波?什么样的纹波  可以上图吗?有可能是复位电路出问题了   我反正遇到过    就是工作一下 就复位了   复位的一瞬间就是纹波 
    • 发布于2014-11-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

紧急!求助大神。PIC18F25K80单片机