找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9179|回复: 2
打印 上一主题 下一主题
收起左侧

error C213: left side of asn-op not an lvalue 单片机程序编译错误

[复制链接]
跳转到指定楼层
楼主
ID:703121 发表于 2020-3-16 03:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:红色部分是第52行
#include <reg51.H>
#include <intrins.h>
#define uc unsigned char
#define ut unsigned int
#define FOSC 11059200L          //系统频率
#define BAUD 9600             //串口波特率
#define T1MS 1536               //1ms定时器
//宏定义ADC的操作命令
#define ADC_POWER   0x80                        //ADC电源控制位
#define ADC_START   0x08                        //ADC启动控制位
#define ADC_FLAG    0x10                        //ADC完成标志位
#define ADC_SPEEDLL 0x00                        //420时钟速度控制位

//#define unsigned int p3

#define AUXR 0x00
#define relay 0
#define touch  0
#define TMOD 0x01
#define TLO T1MS
#define TL0 T1MS
#define TH0 T1MS
#define TR0 1
#define        ET0 1
#define        EA 1
#define        P1 P1M0
#define        P1M0 0xff
#define        P1M1 0x00
#define        ADC_DATA 0xC6
sfr ADC_CONTR=0xC5;
sfr p3 = 0xB0;
sfr p1 = 0x90;

sbit RELAY = p3^7;//继电器输出
sbit TOUCH = p1^0;//触摸检测
uc sec,temp;
ut milsec;

void delay(uc i)
{
  while(i) i--;
}
void InitUart(void);
void InintTimer0(void);
void InitADC(void);
uc GetADCResult(uc ch);

void main()
{
        bit chanal;
        ut save_times,light,voice;
        AUXR=0x00;
        InintTimer0();
        InitADC();
        sec=0;
        relay=0;
        while(1)
        {
                if(chanal)
                {
                        light+=GetADCResult(2);//光照强度检测
                        save_times++;
                }
                else
                {
                        voice+=GetADCResult(6);//声音分贝检测
                }
                chanal=~chanal;
                if(save_times==256)     //消抖
                {
                        save_times=0;
                        light/=256;
                        voice/=256;
                }
                if((light>200)||(voice>50)||(touch==0))relay=1;
                if(sec>=20)relay=0;      //延时输出20秒后灭灯
                delay(200);
                delay(200);
        }
}
/*
void InitUart(void)
{
  SCON=0x50;                 //8个数据位,无校验
  TMOD|=0x20;                 //8位自动装载
  TH1=TL1=-(FOSC/12/32/BAUD);//设置波特率
  TR1=1;                     //使能定时1
}
*/
void InintTimer0(void)
{
  TMOD|=0x01;
  TL0=T1MS;
  TH0=T1MS>>8;
  TR0=1;
  ET0=1;
  EA=1;
}

void InitADC(void)
{
  P1=P1M0=0xff;
  P1M1=0x00;
  ADC_DATA=0;
  ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
  delay(2);
}

uc GetADCResult(uc ch)
{
  ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  while(!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  ADC_CONTR &=~ADC_FLAG;
  return ADC_DATA;
}
void tm0_isr() interrupt 1 using 1
{
        TL0=T1MS;
        TH0=T1MS>>8;
        milsec++;
        if(milsec==1000)
        {
                if(sec<20)sec++;
        }
}


错误如下:
Build target 'Target 1'
compiling lili.c...
LILI.C(52): error C213: left side of asn-op not an lvalue

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:703121 发表于 2020-3-17 12:11 | 只看该作者
请前辈们帮帮忙,谢谢
回复

使用道具 举报

板凳
ID:267719 发表于 2020-3-17 16:16 | 只看该作者
第一:你的特殊寄存器都在REG51.h里用sfr 定义寄存器定义过了,所以AUXR、TMOD、TH0等等关键字被再次宏定义会乱掉的。
其次:你标红的AUXR是你在开头第16行宏定义的,不是变量,所以不能赋值的。
第三:如果发现reg51里没有定义,那就要找到对应单片机的头文件来使用,或者自己在头文件里用sfr来定义添加这个寄存器的地址。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表