找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 845|回复: 4
收起左侧

51单片机定义变量error C129: missing ';' before '^1

[复制链接]
ID:1066823 发表于 2023-3-25 11:39 | 显示全部楼层 |阅读模式
大家好!我是单片机新手。定义变量我不想用sbit=p^x这种现成的,我想用unsigned int a;/unsigned char a;编译不了
unsigned int a;//unsigned char a;也试试
P2^0=a;
K1=P2^0;
unsigned int b;
P2^1=b;
K2=P2^1;
unsigned int c;
P1^0=c;
L1=P1^0;

弄成这样,如何实现呢?
下载 (1).png

回复

使用道具 举报

ID:883242 发表于 2023-3-25 14:32 | 显示全部楼层
^是异或,P2^0=a;是标准的语法错误——左值不可以参与运算。
回复

使用道具 举报

ID:277550 发表于 2023-3-25 15:12 | 显示全部楼层

unsigned int b;
P2^1=b;

P2第n位,不可以直接赋值。使用unsign char类型,加以位运算,如与、或等

要把第2位设置高,使用
P2 |= 2;

要把第2位设置低,使用
P2 &= 0xfd;

其它位,类推
回复

使用道具 举报

ID:883242 发表于 2023-3-25 15:35 | 显示全部楼层
devcang 发表于 2023-3-25 15:12
unsigned int b;
P2^1=b;

错!P2是可以位寻址的,位地址从0xa0~0xa7,P2.1的位地址是0xa1。

你和楼主的错误就是不知道c语言里面^是个运算符,不能随心所欲地做位地址来用,那样子会跟c语言基本语法发生矛盾。Keil C51为了使用位地址,采用的是sbit和^配合使用来定义位地址,比如sbit P21=P2^1;这样的写法,因为标准c语言里面没有sbit这个关键字,是c51自行扩展出来的,所以这种写法不会与c语言语法发生矛盾。
回复

使用道具 举报

ID:1034262 发表于 2023-3-25 22:52 | 显示全部楼层
楼主要好好看看C语言,同时看一下C51。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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