1.2单片机简单C语言程序 简单C语言程序 假设在单片机AT89C52的P1.0脚接有一只发光二极管,二极管的负极接P1.0脚,正极通过限流电阻接+5V,现在让发光二极管每隔0.5s闪烁一次,用C语言编写的程序如下: #include<reg52.h> sbit P10=P1^0; //定义位变量 void delay(unsigned int i) //延时程序,i是形式参数 { unsigned int j; For(i=125;i>0:i–) //变量i由实际参数传入一个值,因此i不能赋初值 For(j=0;j<125;j++); } Void main() { P10=1; //灯灭 Delay(500); //将实际参数500传递给实际参数i,延时0.5s P10=0; Delay(500); //灯亮 } 下面对这个程序进行简要的分析。 程序的第一行是“文件包含”,所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来。所以,这里的程序虽然只有几行,但C编译器在处理的时候却要处理几十行或几百行。为加深理解,可以用任何一个文本编辑器打开keilc52inc文件夹下面的reg52.h来看一看里面有什么内容,在C编译器处理这个程序时,这些内容也会被处理。这个程序包含reg52.h的目的就是为了使用P1这个符号,即通知C编译器程序中所写的P1是指80C51单片机的P1端口,而不是其他变量,这是如何做到的呢?用写字板程序打开reg52.h显示如下, /*————————————————————————- REG52.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. ————————————————————————–*/ #ifndef__REG51_H__ #define__REG51_H__ /* BYTE Register */ 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; /* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0; /* TCON */ sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88; /* IE */ sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; /* IP */ sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8; /* P3 */ sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0; /* SCON */ sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98; #endif 可以看到:“sfr P1=0x90;”.即定义符号Pl与地址0x90对应,熟悉80C51内部结构的读者不难看出,Pl口的地址就是0x90。 程序的第二行用符号P10来表示P1.0引脚,在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P10,可是P10是否就是P1.0呢,所以必须给它们建立联系,这里使用了keil C的保留字sbit来定义。 main称为“主函数”,每一个C语言程序有且只有一个主函数,函数后面一定有一对大括号“{}”、在大括号里面书写其他程序。 Delay(500)的用途是延时,由于单片机执行指令的速度很快,如杲不进行延时,灯亮之后马上就灭,灭了之后马上就亮,速度太快,人眼根本无法分辨,所以需要进行适当的延时,这里采用自定义函数Delay(500),以延时0.5的时间。 需要说明的是, Delay(500)不是由keil C提供的,即你不能在任何情况下写这样一行程序以实现延时,如果在编写其他程序时写上这么一行,会发现编译通不过。注意观察本程序会发砚,在使用Delay(500)之前,第3行~9行已对Delay函数进行了事先定义,因此.在主程序中才能采用Delay(500). Delay后面有一个小括号,小括号里有数据“500”,这个“500”被称为“实际参数”用它可以在一定范围内调整延时时间的长短,这里用“500”来要求延时时间为0.5s。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/38085.html