微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个困扰我很久的问题!急需解决,在线等!

一个困扰我很久的问题!急需解决,在线等!

时间:10-02 整理:3721RD 点击:
这是我写的程序
#include <pic.h>
__CONFIG(0x3f36);
#define uchar unsigned char
#define uint unsigned int
#define QT  RD0
#define ZF  RD1
#define DPP  RD2   //脉冲
#define DI    RC5
#define NUM   103
#define Y_XW  RB0//压紧的限位
#define S_XW  RB1//伸缩的限位
uchar flag_m=0;
uchar flag_y=0;//挤压
uchar flag_s=0;//松
uchar table_R[24];
uchar g;
uchar temp;
void init(void);
void init_usart(void);
void init_WDT(void);
void init_time(void);
void fasong(uchar task_num,uchar zt);//task_num=1压 task_num=0缩
void Delay(uchar i);
void maichong(void);
void mian()
{
        init();
   while(1)
                {
               
                        if(flag_s)
                                {
                                        flag_s=0;
                                    ZF=0;        //前进
                                        QT=1;
                                        maichong();
                                        fasong(0x04,0x02);//缩回完成
                                }
                        CLRWDT();
                        if(flag_y)
                                {
                                        flag_y=0;
                                        ZF=1;
                                        QT=1;
                                        maichong();
                                        fasong(0x04,0x01);//挤压完成
                                }
                       
                }
}
void Delay(uchar i)
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);       
}
void init_usart()
{
  TRISC=0X9F;
  PORTC=0X00;
  TXSTA=0X24;
  RCSTA=0X90;
  SPBRG=71;      //配置波特率
  GIE=1;
  PEIE=1;
  RCIE=1;        //串口接收中断使       
}
void  init_wdt()
{
        PSA=1;           //预分频器分配给WDT使用
    PS2=1;
    PS1=1;
    PS0=1;           //预分频器128分频
}
void init_time( )
{
       
        T1CON=1;
        TMR1IF=0;
        TMR1IE=1;
        TMR1H=0xFE;
        TMR1L=0xEB;
}
void init()
{
        init_WDT();
        init_usart();
        DI=0;//接收模式
}
void fasong(uchar task_num,uchar zt)
{
        table_R[1]=NUM;
        table_R[2]=0x00;
        table_R[3]=zt;
        table_R[4]=task_num;
          DI=1;
          for(uchar j=0;j<24;j++)
           {
            TXREG=table_R[j];
            while(!TRMT);
           }  
    DI=0;
}
void maichong()
{
        init_time();
        if(flag_m)
                {
                        flag_m=0;
                        DPP=1;
                        DPP=0;
                }
        if(Y_XW == 0)        //控制停
                {
                        Delay(15);
                        if(Y_XW == 0)
                        {
                                        while(!Y_XW);
                                        TMR1IE=0;
                                        QT=0;
                               
                        }
                }       
                       
}
void interrupt com()
{
        if(TMR1IE&&TMR1IF)
                {
                        TMR1IF=0;
                        TMR1H=0xFE;
                        TMR1L=0xEB;         //每100us中断一次
                        flag_m=1;
                }
       
  if(RCIF&&RCIE)
   {  
               
        if(FERR||OERR){CREN=0;CREN=1;}
    temp=RCREG;
    for(g=0;g<=22;g++)  //以队列的方式将接受的数据传入数组 先进先出 后进后出
                   {
                     table_R[g]=table_R[g+1];
                   }
             table_R[23]=temp;
    if((table_R[0]==0xbb)&&(table_R[23]==0xee))//过滤接收数据
      {
               
                if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x01))
           {
                                flag_y=1;//压
                        }
                if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x02))
           {
                                flag_s=1;//缩
                        }
      }
   }
}

最后报错(看截图)
困扰我两天了,在线等谢谢啦各位!


MAIN函数没定义  要么放最后面 要么在最前面声明一下

已经换过 两次编译器 还是无果!

把MAIN函数放到走后门

谢谢您  ,我的问题找到了  刚才您一提醒 ,我观察了一下我的main函数  我把main拼错了 拼成了mian  我自己都笑了  找了两天的错误 呵呵哒!  最后谢谢您!

建议小编再贴代码的会应该使用论坛的代码编辑窗口,看着比较养眼

原来是这样 看来我的眼神也不好啦

新人不懂啊 ,望见谅

  1. #include <pic.h>
  2. __CONFIG(0x3f36);
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define QT  RD0
  6. #define ZF  RD1
  7. #define DPP  RD2   //脉冲
  8. #define DI    RC5
  9. #define NUM   103
  10. #define Y_XW  RB0//压紧的限位
  11. #define S_XW  RB1//伸缩的限位

  12. uchar flag_m=0;
  13. uchar flag_y=0;//挤压
  14. uchar flag_s=0;//松
  15. uchar table_R[24];
  16. uchar g;
  17. uchar temp;

  18. void init(void);
  19. void init_usart(void);
  20. void init_WDT(void);
  21. void init_time(void);
  22. void fasong(uchar task_num,uchar zt);//task_num=1压 task_num=0缩
  23. void Delay(uchar i);
  24. void maichong(void);

  25. void mian()
  26. {
  27.         init();
  28.    while(1)
  29.                 {
  30.                
  31.                         if(flag_s)
  32.                                 {
  33.                                         flag_s=0;
  34.                                     ZF=0;        //前进
  35.                                         QT=1;
  36.                                         maichong();
  37.                                         fasong(0x04,0x02);//缩回完成
  38.                                 }
  39.                         CLRWDT();
  40.                         if(flag_y)
  41.                                 {
  42.                                         flag_y=0;
  43.                                         ZF=1;
  44.                                         QT=1;
  45.                                         maichong();
  46.                                         fasong(0x04,0x01);//挤压完成
  47.                                 }
  48.                         
  49.                 }
  50. }

  51. void Delay(uchar i)
  52. {
  53.         uchar x,j;
  54.         for(j=0;j<i;j++)
  55.         for(x=0;x<=148;x++);        
  56. }
  57. void init_usart()
  58. {

  59.   TRISC=0X9F;
  60.   PORTC=0X00;
  61.   TXSTA=0X24;
  62.   RCSTA=0X90;
  63.   SPBRG=71;      //配置波特率
  64.   GIE=1;
  65.   PEIE=1;
  66.   RCIE=1;        //串口接收中断使        
  67. }
  68. void  init_wdt()
  69. {
  70.         PSA=1;           //预分频器分配给WDT使用
  71.     PS2=1;
  72.     PS1=1;
  73.     PS0=1;           //预分频器128分频
  74. }
  75. void init_time( )
  76. {
  77.         
  78.         T1CON=1;
  79.         TMR1IF=0;
  80.         TMR1IE=1;
  81.         TMR1H=0xFE;
  82.         TMR1L=0xEB;

  83. }
  84. void init()
  85. {
  86.         init_WDT();
  87.         init_usart();
  88.         DI=0;//接收模式
  89. }
  90. void fasong(uchar task_num,uchar zt)
  91. {
  92.         table_R[1]=NUM;
  93.         table_R[2]=0x00;
  94.         table_R[3]=zt;
  95.         table_R[4]=task_num;
  96.           DI=1;
  97.           for(uchar j=0;j<24;j++)
  98.            {
  99.             TXREG=table_R[j];
  100.             while(!TRMT);
  101.            }  
  102.     DI=0;
  103. }
  104. void maichong()
  105. {
  106.         init_time();
  107.         if(flag_m)
  108.                 {
  109.                         flag_m=0;
  110.                         DPP=1;
  111.                         DPP=0;
  112.                 }
  113.         if(Y_XW == 0)        //控制停
  114.                 {
  115.                         Delay(15);
  116.                         if(Y_XW == 0)
  117.                         {
  118.                                         while(!Y_XW);
  119.                                         TMR1IE=0;
  120.                                         QT=0;
  121.                                 
  122.                         }
  123.                 }        
  124.                         
  125. }
  126. void interrupt com()
  127. {
  128.         if(TMR1IE&&TMR1IF)
  129.                 {
  130.                         TMR1IF=0;
  131.                         TMR1H=0xFE;
  132.                         TMR1L=0xEB;         //每100us中断一次
  133.                         flag_m=1;
  134.                 }
  135.         
  136.   if(RCIF&&RCIE)
  137.    {  
  138.                
  139.         if(FERR||OERR){CREN=0;CREN=1;}
  140.     temp=RCREG;
  141.     for(g=0;g<=22;g++)  //以队列的方式将接受的数据传入数组 先进先出 后进后出
  142.                    {
  143.                      table_R[g]=table_R[g+1];

  144.                    }
  145.              table_R[23]=temp;
  146.     if((table_R[0]==0xbb)&&(table_R[23]==0xee))//过滤接收数据
  147.       {
  148.                
  149.                 if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x01))
  150.            {
  151.                                 flag_y=1;//压
  152.                         }
  153.                 if((table_R[1]==0x00)&&(table_R[2]==NUM)&&(table_R[3]==0x01)&&(table_R[4]==0x02))
  154.            {
  155.                                 flag_s=1;//缩
  156.                         }
  157.       }
  158.    }

  159. }

复制代码

我把你的代码贴在了9楼,你看一下是不是觉得清爽一些了

太爽啦 哈哈!谢谢!

您用PIC控制过伺服电机吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top