msp430编译出错

2019-03-24 11:34发布

undefined first referenced
>> Compilation failure
  symbol       in file     
--------- ----------------
P1DIR     ./cry1602.obj   
P1IN      ./cry1602.obj   
P1OUT     ./cry1602.obj   
P2DIR     ./cry1602.obj   
P2IN      ./cry1602.obj   
P2OUT     ./cry1602.obj   
TA0CCR0   ./cry1602.obj   
TA0CTL    ./cry1602.obj   
WDTCTL    ./cry1602.obj   
这是什么意思?求大神帮忙,P2DIR之类的不是在头文件里面有定义了吗?为什么还会出现这样的情况 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
jqh_111
1楼-- · 2019-03-24 16:41
< 都不知道你这是什么意思。
qinkaiabc
2楼-- · 2019-03-24 17:04
 精彩回答 2  元偷偷看……
qinkaiabc
3楼-- · 2019-03-24 17:36
cry1602.c文件里面的所有内容能贴出来吗?
anyhing
4楼-- · 2019-03-24 18:30
qinkaiabc 发表于 2014-5-9 08:35
cry1602.c文件里面的所有内容能贴出来吗?



#include <msp430g2553.h>
typedef unsigned char uchar;
typedef unsigned int  uint;

/**************宏定义***************/
#define DataDir     P1DIR
#define DataPort    P1OUT
#define Busy            0x80
#define CtrlDir     P2DIR
#define CLR_RS      P2OUT&=~BIT0;    //RS = P2.0
#define SET_RS      P2OUT|=BIT0;
#define CLR_RW      P2OUT&=~BIT1;        //RW = P2.1
#define SET_RW      P2OUT|=BIT1;
#define CLR_EN      P2OUT&=~BIT2;        //EN = P2.2
#define SET_EN      P2OUT|=BIT2;
#define DHT11_OUTPUT     P2DIR|=BIT3//P2.3
#define DHT11_INPUT      P2DIR&=~BIT3 //P2.3
#define DHT11_H          P2OUT|=BIT3//P2.3
#define DHT11_L          P2OUT&=~BIT3 //P2.3
#define DHT11_IN         (P2IN&BIT3)
uchar shuzi[] = {"0123456789."};
uchar tem[2];
void DispNchar(unsigned char x,unsigned char y, unsigned char n,unsigned char *ptr);
void LocateXY(unsigned char x,unsigned char y);
void Disp1Char(unsigned char x,unsigned char y,unsigned char data);
void LcdReset(void);
void LcdWriteCommand(unsigned char cmd,unsigned char chk);
void LcdWriteData( unsigned char data );
void WaitForEnable(void);
void Delay5ms(void);
void Delay400ms(void);
unsigned char start_DHT11(void);
unsigned char DHT11_ReadChar(void);
void dht11(void);
void Delayus(int n);
unsigned char DHT11T_Data_H;//温度高8位
unsigned char DHT11T_Data_L;//温度低8位
unsigned char DHT11RH_Data_H; //湿度高8位
unsigned char DHT11RH_Data_L; //适度低8位
/*******************************************
函数名称:DispNchar
功    能:让液晶从某个位置起连续显示N个字符
参    数:x--位置的列坐标
          y--位置的行坐标
          n--字符个数
          ptr--指向字符存放位置的指针
返回值  :无
********************************************/
void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
{
    uchar i;

        for (i=0;i<n;i++)
        {
                Disp1Char(x++,y,ptr);
                if (x == 0x0f)
                {
                   x = 0;
           y ^= 1;
                }
        }
}
/*******************************************
函数名称:LocateXY
功    能:向液晶输入显示字符位置的坐标信息
参    数:x--位置的列坐标
          y--位置的行坐标
返回值  :无
********************************************/
void LocateXY(uchar x,uchar y)
{
    uchar temp;

        temp = x&0x0f;
        y &= 0x01;
        if(y)   temp |= 0x40;  //如果在第2行
        temp |= 0x80;

        LcdWriteCommand(temp,1);
}
/*******************************************
函数名称:Disp1Char
功    能:在某个位置显示一个字符
参    数:x--位置的列坐标
          y--位置的行坐标
          data--显示的字符数据
返回值  :无
********************************************/
void Disp1Char(uchar x,uchar y,uchar data)
{
        LocateXY( x, y );
        LcdWriteData( data );
}
/*******************************************
函数名称:LcdReset
功    能:对1602液晶模块进行复位操作
参    数:无
返回值  :无
********************************************/
void LcdReset(void)
{
    CtrlDir |= 0x07;                 //控制线端口设为输出状态
    DataDir  = 0xFF;                 //数据端口设为输出状态

           LcdWriteCommand(0x38, 0);            //规定的复位操作
        Delay5ms();
        LcdWriteCommand(0x38, 0);
        Delay5ms();
        LcdWriteCommand(0x38, 0);
        Delay5ms();

        LcdWriteCommand(0x38, 1);                //显示模式设置
    LcdWriteCommand(0x08, 1);                //显示关闭
           LcdWriteCommand(0x01, 1);            //显示清屏
        LcdWriteCommand(0x06, 1);                //写字符时整体不移动
        LcdWriteCommand(0x0c, 1);                //显示开,不开游标,不闪烁
}
/*******************************************
函数名称:LcdWriteCommand
功    能:向液晶模块写入命令
参    数:cmd--命令,
          chk--是否判忙的标志,1:判忙,0:不判
返回值  :无
********************************************/
void LcdWriteCommand(uchar cmd,uchar chk)
{

        if (chk) WaitForEnable();   // 检测忙信号?

        CLR_RS;
        CLR_RW;
        _NOP();

        DataPort = cmd;             //将命令字写入数据端口
        _NOP();

        SET_EN;                     //产生使能脉冲信号
        _NOP();
        _NOP();
        CLR_EN;
}

/*******************************************
函数名称:LcdWriteData
功    能:向液晶显示的当前地址写入显示数据
参    数:data--显示字符数据
返回值  :无
********************************************/
void LcdWriteData( uchar data )
{
        WaitForEnable();        //等待液晶不忙

        SET_RS;
        CLR_RW;
        _NOP();

    DataPort = data;        //将显示数据写入数据端口
    _NOP();

        SET_EN;                 //产生使能脉冲信号
        _NOP();
        _NOP();
        CLR_EN;
}
/*******************************************
函数名称:WaitForEnable
功    能:等待1602液晶完成内部操作
参    数:无
返回值  :无
********************************************/
void WaitForEnable(void)
{
    P1DIR &= 0x00;  //将P4口切换为输入状态

        CLR_RS;
        SET_RW;
        _NOP();
        SET_EN;
        _NOP();
        _NOP();

        while((P1IN & Busy)!=0);  //检测忙标志

        CLR_EN;

        P1DIR |= 0xFF;  //将P4口切换为输出状态
}

/*******************************************
函数名称:Delay5ms
功    能:延时约5ms
参    数:无
返回值  :无
********************************************/
void Delay5ms(void)
{
    uint i=40000;
    while (i != 0)
    {
        i--;
    }
}
/*******************************************
函数名称:Delay400ms
功    能:延时约400ms
参    数:无
返回值  :无
********************************************/
void Delay400ms(void)
{
    uchar i=50;
        uint j;

        while(i--)
        {
                j=7269;
                while(j--);
        }
}
void Delayus(int n)
{
        CCR0 = n;
        TACTL |= TACLR;
        TACTL |= MC_1;
        while(!(TACTL & BIT0)); //等待
        TACTL &= ~MC_1;//停止计数
        TACTL &= ~BIT0;//清除中断标志
}

///////////主函数///////////////////
void main(void)
{
        unsigned int readflag = 0;
        WDTCTL = WDTPW + WDTHOLD;
        TACTL|= TASSEL_2 + ID_3;//时钟选择SMCLK,1/8分频,计数器1M频率
        //unsigned char humidity=0;
        //unsigned char humidity_l=0;
        unsigned char temperature_l=0;
        unsigned char temperature = 0;
        LcdReset();//显示提示信息
        Disp1Char(8,0,'C');//显示温度单位
        while(1)
                {
                        readflag = start_DHT11();
                        if(1)
                                {
                                        temperature = DHT11T_Data_H;//温度值,没有考虑小数
                                        temperature_l= DHT11T_Data_L;
                                        //humidity = DHT11RH_Data_H;//湿度值,没有考虑小数
                                        //humidity_l=DHT11RH_Data_L;
                                        tem[0]=temperature/10;//验证是否执行到此
                                        tem[1]=temperature%10;
                                        Disp1Char(2,0,shuzi[tem[0]]);
                                        Disp1Char(3,0,shuzi[tem[1]]);
                                }
                        Disp1Char(1,1,shuzi[readflag]); //读出readflag的值
                }
}
////////////////////////////////////////////
//函数名称:start_DHT11
//功能:DHT11初始化及读取湿度值和温度值
//调用:DHT11_ReadChar()
//返回:无
///////////////////////////////////////////
unsigned char start_DHT11(void)
{
        unsigned char TData_H_temp = 0;//温度高8位中间变量
        unsigned char TData_L_temp = 0;//温度低8位中间变量
        unsigned char RHData_H_temp =0;//湿度高8位中间变量
        unsigned char RHData_L_temp = 0; //湿度低8位中间变量
        unsigned char CheckData_temp = 0;//校验位8位中间变量
        char checktemp = 0;//校验值

        unsigned char flag = 0;
        unsigned int count = 0;

        DHT11_OUTPUT;//设置P2.0输出 #define DHT11_OUTPUT P2DIR|=BIT0??
        DHT11_H; //输出高??#define DHT11_H P2OUT|=BIT0
        Delayus(10);//延时10us
        DHT11_L; //输出低 #define DHT11_L P2OUT&=~BIT0
        //拉低18ms以上
        Delayus(30000);
        DHT11_H;//输出高
        DHT11_INPUT;//设置P2.0输入 #define DHT11_INPUT P2DIR&=~BIT0??
        Delayus(60);//延时60us
        if(!(DHT11_IN))//检测P2.O输入电平,若为低电平
                {
                        count=2;//计数值设置为2
                        while((!DHT11_IN)&&count++);
                        count=2;
                        while((DHT11_IN)&&count++);
                        RHData_H_temp = DHT11_ReadChar();
                        RHData_L_temp = DHT11_ReadChar();
                        TData_H_temp = DHT11_ReadChar();
                        TData_L_temp = DHT11_ReadChar();
                        CheckData_temp = DHT11_ReadChar();
                        DHT11_OUTPUT;//设置P2.0输出
                        DHT11_H;//P2.0输出高,释放总线
                        checktemp = (RHData_H_temp + RHData_L_temp + TData_H_temp + TData_L_temp); //判断校验位是否正确
                        if (checktemp == CheckData_temp)
                                        {
                                                DHT11RH_Data_H = RHData_H_temp;
                                                DHT11RH_Data_L = RHData_L_temp;
                                                DHT11T_Data_H = TData_H_temp;
                                                DHT11T_Data_L = TData_L_temp;
                                                flag=1;
                                        }
                }
        return flag;//返回flag,若返回1说明读取正确
}
////////////////////////////////////////////
//函数名称:DHT11_ReadChar
//功能:DHT11读取1字节数据
//调用:
//返回:无
///////////////////////////////////////////
unsigned char DHT11_ReadChar(void)
{
        unsigned char dat=0;
        unsigned int count;//计数防止死等
        unsigned char i;
        for(i=0;i<8;i++)
                {
                        count=2;
                        while((!DHT11_IN)&&count++);//等待50us低电平结束,程序进入死循环退出 #define DHT11_IN (P2IN&BIT0)
                        Delayus(35);
                        dat <<= 1;
                        if(DHT11_IN)//50us低电平+28us高电平表示'0',50us低电平+70us高电平表示'1'
                        {
                                dat |= 1;
                        }
                        count=2;
                        while((DHT11_IN)&&count++); //程序进入死循环退出
                        /*while(DHT11_IN);
        if(count==1)//超时则跳出for循环
        {
        break;
        }*/
                }
return dat;
}



qinkaiabc
5楼-- · 2019-03-24 21:43
 精彩回答 2  元偷偷看……
anyhing
6楼-- · 2019-03-25 03:03
qinkaiabc 发表于 2014-5-9 09:17
开发环境CCS吗?

程序都打包传上来吧

是ccs,就这一个程序了

一周热门 更多>

相关问题

    相关文章