51单片机特殊编程

 特殊功能寄存器(SFR)定义

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;

这是在C语言中用于8052微控制器的特殊功能寄存器(SFR)定义。'sfr'是英文'special function register'的缩写,意为特殊功能寄存器。

在给定的代码行 'sfr P0 = 0x80;' 中,'P0' 是寄存器的名称,'0x80' 是这个寄存器在芯片内部的地址。在8052微控制器中,P0寄存器用于外部存储器访问控制。

 寄存器位定义sbit(针对-可位寻址寄存器)

/*  BIT Registers  */
/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;

这是在声明一个位变量,这个变量的名字是SM0,并且它被初始化为SCON寄存器的第7位。在C语言中,'sbit'是Keil C51编译器的一种特性,用于访问特定的位。这个声明用于直接访问和控制某个特定的位,而不必关心或直接操作那个位的其余部分。这使得代码更简洁,更易于理解和维护。

这里,'SCON^7'表示SCON寄存器的第7位。'^'是按位异或运算符,但在这里它被用作位域的标记,表示我们关心的是这个位。实际上,这个表达式的结果总是等于它自身第7位。

中断函数

void timer0() interrupt 1	//定时器工作函数,中断查询次序为1
{
	TH0=0x3c;		//进入中断后先将定时器重新赋初值
	TL0=0xb0;							 
	aa++;		//变量加1,加一次是50ms
	if(aa>=20)		//变量加一次是50ms,加20次是一秒
	{
	  aa=0;			//变量清零
	  temp++;		//秒变量加
	  if(temp==100)		//最大计时99秒
	  {
			temp=0;		//大于等于100s时清零
	  }
	  shi=temp/10;		//将秒数据分成两个一位数,比如35s,35/10=3
	  ge=temp%10;		//将秒数据分成两个一位数,比如35s,35%10=5
	}
}

16进制赋值 

TH0=64535/256;//252,0xFC
THL=64535%256;//23,0x17,合并就是0xFC17==64535

将十进制转换成16进制赋值给高8位和低8位

原理:类似123拆分成百位1和十位个位23分开赋值,123/100=1和123%100=23,因为在百位分开,而百位最大值为100,10*10=100;同理64535从低8位分开,低8位二进制最大为256,16*16=256

赋值技巧

在给一些不能位寻址的寄存器赋值时,由于只想操作其中某一位,或者说其他位也有对应的功能,不能随便赋值,否则会改变设置,此时就可以使用与/或法赋值,详细如下:

	TMOD=0x01;//0000 0001	//定义工作方式//四种工作模式/
                            //选择工作模式1(16位计数器 )
/*下面两句和上面一样的功能,但更安全,不会改动高4位*/
	TMOD=TMOD&0xF0;//把TMOD的低四位清零,高四位保持不变;
                   //按位与,1&任何数,等于任何数本身; 
                          // 0&任何数,等于0(用于清零)
	TMOD=TMOD|0x01;//把TMOD的最低位置1,其他位保持不变;
                   //按位或,1|任何数,等于1;(用于置1)
                           //0|任何数,等于任何数本身

按位运算,左移右移实现乘除法

右移一位 = 除2;右移2位 = 除4,依次类推,右移n位 = 除2的n次方;

左移一位 = 乘2;左移2位 = 乘4,依次类推,左移n位 = 乘2的n次方;

变量位置

如上图,P25如果放在①处会报错,得放在声明之后,即②位置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值