static变量研究与单片机编程与C的区别

一、static研究

首先上一段代码让我来探究这个static变量到底是什么鬼?
在这里插入图片描述
由图可知,在循环执行下静态变量s_1发生了变化,i没有发生变化。在for循环中static变量赋值一次后(初次赋值)就在不会被重新赋值(说白了就是 static int s_1 = 1;这条语句失效)但是变量i可以继续重新被定义和赋值。

二、单片机编程中C语言之间的差别。

1、在C51中多了 特殊功能寄存器型和位类型

(1)特殊功能寄存器型分别定义格式为:

sfr 特殊功能寄存器名 = 特殊功能寄存器地址常数

sfr16 特殊功能寄存器名 =特殊功能寄存器地址常数

eg:对于MCS-51片内I/O口,定义方法如下。

sfr P1 = 0x90;//定义P1口,地址90H

sfr P2 = 0xA0;//定义P2口,地址A0H

sfr16用于定义16位特殊功能寄存器,如8052的T2定时器,可以定义为:

sfr16 T2 = 0xCC;//这里定义8052定时器2,地址为T2L=CCH,T2H=CDH

🐖:sfr16定义一个16位特殊功能寄存器时,等号后面是他的低位地址,高位地址一定要位于位于低位地址之上,所以sfr16不能用于定时器0和1的定义。

(2)位类型

定义格式:sbit 位变量名 = 位地址

sbit P1_1 = 0X91//同sfr一样sbit的为地址必须位于80H~FFH之间。

sbit 位变量名 = 位地址

sbit P3_1=P3^1

sbit 位变量名 = 字节地址^位位置

sbit P3_1 = 0xB0^1

🐖:1、位变量不能定义一个指针,如不能定义bit *aa

2、不能定义位数,如不能定义 bit array[2]

3、bit与sbit不同,bit不能指定位变量的绝对地址,当需要指针定b位变量的绝对地址(范围必须在0x80~0xff)时需要使用sbit来定义 sbit flag=P1^0.

4、变量的存储类型为bdata时,该变量的某一位可以用sbit来定义,当然也可以用bit。eg

bdata char jj;

sbit mybit7=jj^7;

3、运算符与表达式
位运算: (1)&:按位与 (2)|:按位或 (3) ^:按位异或。 (4)~:按位取反 (5)<<:位左移 (6)>>:位右移

自增自减运算符:(1)++i;//使用i之前,先使i值加1 (2)–i;++i;//使用i之前,先使i值减1 (3)i++;//使用i之后,再使i值加1 (4)i–;//使用i之后,再使i值减1

在这里插入图片描述

指针与地址运算符:(1)*:指针运算符。(2)&:取地址运算符

4、函数
函数定义:

函数类型 函数名 (形参表)[reentrant] [interrupt m] [using n]

{函数体;}

函数类型:函数类型说明了函数返回值的类型。

函数名:函数名是用户为自定义函数取的名字以便于调用函数时使用。

形式参数表:用于列录再主函数与被调函数之间进行数据传递的形式参数。

reentrant修饰符

这个修饰符用于把函数定义为可重入函数。所谓可重入函数就是允许被递归调用的函数。

interrupt m修饰符

中断函数必须通过他定义。函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把安排再程序存储器中的相应位置。

m取值为0~4

0——外部中断0 1——定时/计数器T0 2——-外部中断1 3—-定时/计数器T1 4——-串行口中断

using n 修饰符

用于指定本函数内部使用的工作组寄存器组,其中n取值0~3,表示寄存器组号。

c51编程不用加using n修饰符 由C51编译器自动选择。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏木三少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值