锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

单片机c语言基础教程

时间:2024-04-24 16:37:09

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

图1-1 接有LED 的单片机根本通路
P1.0
EA/VPP

XTAL2
XTAL1
GND
R
+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 = 0x81;
sfr L = 0x82;
sfr DPH = 0x83;
sfr PC = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr = 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 I1 = 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 = 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 那段顺序决议的,细致状况正在前面重复顺序中再作
综合,那里就没有引见了。


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章