51单片机编程sbit与#define的区别

问题描述

51单片机编程sbit与#define的区别

在keil编程中:
#define dula P2^6不对
而必须sbit dula=P2^6;
请问为何?

解决方案

#define是宏定义,定义的东西编译时由编译器进行宏展开
sbit是外部位声明,就是单片机的外部端口
bit是内部20H-2FH的可寻址位定义或着是声明
以上指令都有固定的用途

解决方案二:

sbit就是定义一个标志位,也叫位变量,比如一个8位的寄存器就可以看作八个位变量。
#define就是替代或者替换的意思,

时间: 2024-10-21 11:20:03

51单片机编程sbit与#define的区别的相关文章

51单片机串口通信-51单片机编程串口通信问题

问题描述 51单片机编程串口通信问题 #include unsigned char a[]="i love"; unsigned int b=0; void love()interrupt 4 {if(TI==1) TI=0; } void delay(unsigned int a) {a--; } void main() {EA=1; ES=1; TMOD=0X20; TH1=0XFD; TL1=0; TR1=1; SM1=0; SM1=1; while(1) {for(b=0;b&

单片机编程 keil-基于51单片机运用液晶屏显示字符

问题描述 基于51单片机运用液晶屏显示字符 基于51单片机运用液晶屏显示字符时出了些问题,编译什么的都没问题,但是就是液晶屏没动静,液晶屏是1602,求助,急急急,跪谢 #includesbit lcd_en= P2^7;sbit lcd_rs = P2^6;sbit lcd_rw =P2^5;sbit lcd_data = P0;#define unchar unsigned char#define uint unsigned intunchar code table[]={"baby Che

单片机编程 小车 蓝牙-各类51单片机的智能小车

问题描述 各类51单片机的智能小车 请求智能小车的文档,有PCB,C语言源程序,其余的越多越好啦,作为新手,真诚恳请大神们施施援手 解决方案 google下,没有哪里有google的多. 解决方案二: 这个是为了去年参加某比赛的作品. ? 功能: 蓝牙启动, 变速, 蔽障, 舵机摆臂攻击, 目标搜索, 其它 ? 硬件搭建布局图: ? ? ? 在实验室写的程序,没及时备份..完整版的程序没有了! 只实现部分模块功能的源码: ? #include "reg52.h" #include #d

c语言-51单片机C语言编程问题

问题描述 51单片机C语言编程问题 這個程序是這樣的分IN0IN1JP1JP2 JP2為0時常規測試(全顯示格子1格子2)JP2為1時測試模式 當JP2為1時而且JP1為1時進入測試模式1 測試模式1:當IN0為0時顯示pic1;當IN1為0時顯示pic2; 當IN0=0&&IN1=0以及IN0=1&&IN1=1顯示blank 當JP2為1時而且JP1為0時進入測試模式2當IN1接收到一段約為50ms的脈衝將IN0拉高1.5秒如果這1.5秒內IN0有變為0就顯示pic1且持

ds18b20-关于51单片机的,DS18B20

问题描述 关于51单片机的,DS18B20 这个代码是书上的代码,我有两个问题 1.51单片机已经从DS18B20上获得了温度数据,为什么不直接拿去显示,需要用串口传递 2.comm(buff):将数组里面的温度数据传递到哪里去了? 附上代码: #include #include #define uchar unsigned char #define uint unsigned int sbit ds=P2^2; //温度传感器信号线 sbit dula=P2^6; //数码管段选线 sbit

51单片机+ 0804+ 1602-单片机:51单片机+ADC0804+LCD1602

问题描述 单片机:51单片机+ADC0804+LCD1602 #include#include#include#define uint unsigned int#define uchar unsigned char#define IO_1602 P0#define IO_0804 P1 uint temp date;uchar qianbaishige;uchar cc[16]="" M O D E ""; sbit lcdrs=P2^0;//LCD液晶的寄存器选择

51单片机定时器中断问题

问题描述 51单片机定时器中断问题 代码如下,设置断点后发现,程序不进入定时器中断函数 #include #include #define uchar unsigned char #define uint unsigned int sbit key=P3^7; uchar display[8][8]; /*rank:Z,H,B,I,T,I,心,U*/ uchar code table_cha[8][8]={0x7E, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x7

51单片机串口通信时,接收到数据后为什么在while语句中将EA置1

问题描述 51单片机串口通信时,接收到数据后为什么在while语句中将EA置1 刚进入while语句时为什么要将EA置1??程序如下: #include #define uchar unsigned char uchar numaflagbenum; sbit beep=P2^3; void init(); void main() { init(); while(1) { if(flag==1) { EA=0; flag=0; TR0=1; if(a==1) { benum=4; } if(a=

操作-以51单片机为核心的时钟,在LED显示器上显示当前的时间:

问题描述 以51单片机为核心的时钟,在LED显示器上显示当前的时间: 显示格式为"时时:分分:秒秒". 用4个功能键操作来设置当前时间.功能键K1-K4功能如下. ?K1-进入设置现在的时间. ?K2-设置小时(按一次,小时增1). ?K3-设置分钟(按一次,分钟增1). ?K4-确认完成设置. 程序执行后工作指示灯闪动,表示程序开始执行,LED显示"00:00:00",然后开始计时. 本题可以考虑用LCD(比如:LCD1602)来实现显示,则显示更加清楚. 解决方