单片机c语言cy,单片机c语言基础教程

例 1-1: 让接正在 P1.0 引脚上的LED 照射。

图1-1 接有LED 的单片机根本通路

P1.0

EA/VPP

VCC

XTAL2

XTAL1

GND

RST

+5V +5V

+

R1

E1

10K

10U

27P CY

27P

PZ1 1K

D8

D1

89

#include reg51.h

sbit P1_0=P1^0;

void main()

{ P1_1=0;

}

某个顺序的作用是让接正在P1.0 引脚上的LED 点亮。上面来综合一下某个C 言语顺序包

含了哪些消息。

1)资料蕴含解决。

顺序的第一溜儿是一度资料蕴含解决。

叫做资料蕴含是指一度资料将此外一度资料的形式全副蕴含出去,因为那里的顺序

固然只要4 行,但C 意译器正在解决的时分却要解决多少十或者多少百行。那里顺序中蕴含REG51.h

资料的手段是为了要运用P1 某个记号,即告诉C 意译器,顺序中所写的P1 是指80C51 单

片机的P1 端口而没有是其它变量。这是如何做到的呢?

翻开 reg51.h 能够看到那样的一些形式:

sfr P0 = 0x80;

sfr P1 = 0x90;

sfr P2 = 0xA0;

sfr P3 = 0xB0;

sfr PSW = 0xD0;

sfr ACC = 0xE0;

sfr B = 0xF0;

sfr SP = 0x81;

sfr DPL = 0x82;

sfr DPH = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0 = 0x8A;

sfr TL1 = 0x8B;

sfr TH0 = 0x8C;

sfr TH1 = 0x8D;

sfr IE = 0xA8;

sfr IP = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

sbit CY = 0xD7;

sbit AC = 0xD6;

sbit F0 = 0xD5;

sbit RS1 = 0xD4;

sbit RS0 = 0xD3;

sbit OV = 0xD2;

sbit P = 0xD0;

sbit TF1 = 0x8F;

sbit TR1 = 0x8E;

sbit TF0 = 0x8D;

sbit TR0 = 0x8C;

sbit IE1 = 0x8B;

sbit IT1 = 0x8A;

sbit IE0 = 0x89;

sbit IT0 = 0x88;

sbit EA = 0xAF;

sbit ES = 0xAC;

sbit ET1 = 0xAB;

sbit EX1 = 0xAA;

sbit ET0 = 0xA9;

sbit EX0 = 0xA8;

sbit PS = 0xBC;

sbit PT1 = 0xBB;

sbit PX1 = 0xBA;

sbit PT0 = 0xB9;

sbit PX0 = 0xB8;

sbit RD = 0xB7;

sbit WR = 0xB6;

sbit T1 = 0xB5;

sbit T0 = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD = 0xB1;

sbit RXD = 0xB0;

sbit SM0 = 0x9F;

sbit SM1 = 0x9E;

sbit SM2 = 0x9D;

sbit REN = 0x9C;

sbit TB8 = 0x9B;

sbit RB8 = 0x9A;

sbit TI = 0x99;

sbit RI = 0x98;

相熟80C51 外部构造的观众群没有好看出,那里都是一些记号的界说,即规则记号名与地

址的对于应联系。留意内中有

sfr P1 = 0x90;

那样的一溜儿(下文顶用黑体示意),即界说P1 与地点0x90 对于应,P1 口的地点就是0x90

(0x90 是C 言语中十六进制数的写法,相等于汇编言语中写90H)。

从那里还能够看到一度屡次涌现的词:sfr

sfr 并规范C 言语的要害字,而是Keil 为能间接拜访80C51 中的SFR 而需要了一度新

的要害词,其用法是:

sfrt 变量名=地点值。

2)记号P1_0 来示意P1.0 引脚。

正在 C 言语里,假如间接写P1.0,C 意译器并没有能辨认,并且P1.0 也没有是一度非法的C

言语变量名,因为得给它另起一度名字,那里起的名为P1_0,可是P1_0 是没有是就是P1.0

呢?你这样以为,C 意译器可没有这样以为,因为必需给它们构建联络,那里运用了Keil C

的要害字sbit 来界说,sbit 的用法有三种:

第一种办法:sbit 位变量名=地点值

第二种办法:sbit 位变量名=SFR 称号^变量位地点值

其三种办法:sbit 位变量名=SFR 地点值^变量位地点值

如界说 PSW 中的OV 能够用以次三种办法:

sbit OV=0xd2 (1)注明:0xd2 是OV 的位地点值

sbit OV=PSW^2 (2)注明:内中PSW 必需先用sfr 界说好

sbit OV=0xD0^2 (3)注明:0xD0 就是PSW 的地点值

因而那里用 sfr P1_0=P1^0;就是界说用记号P1_0 来示意P1.0 引脚,假如你乐意也能够

起P10 一类的名字,只需上面顺序中也随之更改就行了。

3)main 称为主因变量。

每一度 C 言语顺序有且只要一度主因变量,因变量前面定然有一对于大括号{},正在大括号

外面书写其它顺序。

从下面的综合咱们理解了全体 C 言语的特点,上面再看一度稍简单小半的事例。

例 1-2 让接正在P1.0 引脚上的LED 闪耀照射

#include reg51.h

#define uchar unsigned char

#define uint unsigned int

sbit P10=P1^0;

void mDelay(unsigned int Delay)

{ unsigned int i;

for(;Delay0;Delay--)

{ for(i=0;i124;i++)

{;}

}

}

void main()

{ for(;;)

{ P10=!P10; //取反P1.0 引脚

mDelay(1000);

}

}

顺序综合:主顺序main 中的第一溜儿姑且没有看,第二行是P1_0=!P1_0;,正在P1_0 前有

一度记号!,记号!是C 言语的一度演算符,就像数学中的+、-一样,是一种

演算任号,意思是取反,行将该记号前面的那个变量的值取反。

留意:取反演算但是对于变量的值而言的,并没有会主动改观变量自身。能够以为 C 意译

器正在解决!P1_0时,将P1_0 的值给了一度暂时变量,而后对于某个暂时变量取反,而没有

是间接对于P1_0 取反,因而取反终了后还要运用赋值记号(=)将取反后的值再赋给P1_0,

那样,假如本来P1.0 是低电平(LED 亮),那样取反后,P1.0 就是高电平(LED 灭),反之,

假如P1.0 是高电平,取反后,P1.0 就是低电平,这条训令被重复地施行,接正在P1.0 上灯就

会一直亮、灭。

该条训令会被重复施行的要害就正在于 main 中的第一路程序:for(;;),那里没有对于此作细致

的引见,观众群临时只需晓得,这路程序偕同其后的一对于大括号{}形成了一度有限重复语

句,该大括号内的语句会被重复施行。

其三路程序是:mDelay(1000);,这路程序的用处是延时1s 工夫,因为单片机施行指

令的进度很快,假如没有停止延时,灯亮以后立即就灭,灭了以后立即就亮,进度太快,人眼

基本无奈区分。

那里 mDelay(1000)并没有是由Keil C 需要的库因变量,即你没有能正在任何状况下写那样一溜儿

顺序以完成延时。假如正在编写其它顺序时写上这样一溜儿,会发觉意译通没有过。那样那里为什

么又是准确的呢?留意视察,能够发觉某个顺序中有void mDelay()那样一溜儿,可见,

mDelay 某个词是咱们本人起的名字,况且为此编写了一些顺序行,假如你的顺序中没有这

么一段顺序行,那就没有能运用mDelay(1000)了。有人脑力快,能够立即悟出,我可没有可

以把这段顺序也复制到我其它顺序中,而后就能够用mDelay(1000)了呢?答复是,那千万

就能够了。再有小半需求注明,mDelay 某个称号是由编程者本人起名儿的,可自行更改,但

一旦更改了称号,main()因变量中的名字也要作呼应的更改。

mDelay 前面有一度小括号,小括号里无数据(1000),某个1000 被称之参数,用它

能够正在定然范畴内调动延常常间的长度,那里用1000 来请求延常常间为1000 毫秒,要做到

这小半,必需由咱们本人编写的mDelay 那段顺序决议的,细致状况正在前面重复顺序中再作

综合,那里就没有引见了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值