单片机 C语言入门教程

泪湿青衫 2021-02-23 17:24:59
入门教程 入门 单片机 语言 单片



学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。Keil软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(?Vision)将这些部份组合在一起。

学习之前请先安装KEILC51软件,在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法。图1-1所示电路图使用89c51单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASH ROM,可以反复擦写,非常适于做实验。89c51的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光。

单片机 C语言入门教程


1 简单的C程序介绍

例1-1: 让接在P1.0引脚上的LED发光。

/************************************************

单灯闪烁程序

*************************************************/

#include "reg51.h"//这一句是将51的常用端口,内部寄存器等的定义文件包含进这段程序

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可以看到这样的一些内容:

/*--------------------------------------------------------------------REG51.H

Header file for generic 80C51 and 80C31 microcontroller.

Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/

/* 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;

熟悉80C51内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地址的对应关系。注意其中有

sfr P1 = 0x90;

这样的一行(上文中用黑体表示),即定义P1与地址0x90对应,P1口的地址就是0x90(0x90是C语言中十六进制数的写法,相当于汇编语言中写90H)。

从这里还可以看到一个频繁出现的词:sfr

sfr并标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:

sfrt 变量名=地址值。

单片机 C语言入门教程


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;

/*延时程序

由Delay参数确定延迟时间

*/

void mDelay(unsigned int Delay)

{ unsigned int i;

for(;Delay>0;Delay--)

{ for(i=0;i<124;i++)

{;}

}

}

void main()

{ for(;;)

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

mDelay(1000);

}

}

程序分析:主程序main中的第一行暂且不看,第二行是"P1_0=!P1_0;",在P1_0前有一个符号"!",符号"!"是C语言的一个运算符,就像数学中的"+"、"-"一样,是一种运算任号,意义是"取反",即将该符号后面的那个变量的值取反。

单片机 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那段程序决定的。

版权声明
本文为[泪湿青衫]所创,转载请带上原文链接,感谢
https://www.seoxiehui.cn/article-296311-1.html

  1. Mi's projector 72 hours experience, you should be most concerned about these six issues
  2. Kwai computer hosts are not selling cheap.
  3. What are people searching for this year? Google search hot list, "new coronavirus" tops the list
  4. Fantasy fiction ranking: Douluo mainland fourth, Futian third, who is the most popular fantasy in September?
  5. 活动运营:满足这4点,没有什么活动做不好
  6. 一文看懂活动运营
  7. Netizen's "trader" reveals secrets: it's normal for a netizen to make 10000 yuan a month in three months' packaging
  8. What is constipation? How does child constipation do? It's not just fruits and vegetables
  9. Teach you to shake the voice of the 3 ways to increase the powder, 3 days to achieve the tiktok thousand!
  10. 新手怎么做电商运营?初入电商行业需要注意什么?
  11. 如何快速搞清用户运营,不用苦逼找流量?
  12. Tiktok international version of the little sister! How to create your own U.S. app store account
  13. Four essential methods for content operators, so that you don't worry about KPI any more
  14. 2021年春节假期延长至2月27日?回应来了
  15. Activity operation: to meet these four points, there is no activity that cannot be done well
  16. Understand the operation of activities
  17. How do novices do e-commerce operations? What do you need to pay attention to when you first enter the e-commerce industry?
  18. How to quickly understand the user operation, without having to force to find traffic?
  19. Will the Spring Festival holiday be extended to February 27 in 2021? Here comes the response
  20. 百家号蓝v认证会额外给企业号增加哪些功能权益?
  21. What additional functional rights and interests will Baijia blue V certification add to enterprise number?
  22. 百家号蓝v认证所需资料及认证流程?
  23. What information and certification process do you need for Baijia blue V certification?
  24. 百家号认证费用是多少,有哪些需要的资料尼?
  25. How much is the fee of hundred family number certification? What information do you need?
  26. 孩子上网校=玩手机?哪家网校环境好?我亲自体验了学而思等4家
  27. Children online school = play mobile phone? Which online school environment is good? I personally experienced four companies including XRS
  28. 支付宝和微信怎么办?华为、银联联手反击了
  29. 2020年网络十大热词 不懂你就OUT了
  30. 这么简单的PPT目录页,随便一做就是好几页
  31. 忠言逆耳,2020年苹果手机别瞎买,这3款iPhone最值得考虑
  32. What about Alipay and WeChat? Huawei and UnionPay joined hands to fight back
  33. In 2020, the top ten hot words on the Internet will be out if you don't understand them
  34. Such a simple ppt directory page, just do a few pages
  35. Don't buy Apple's mobile phones in 2020. These three iPhones are worth considering
  36. 百家号企业蓝v认证教程?
  37. Office 2021预览版发布,无需订阅即可使用
  38. 一大波新手机在路上,旧手机怎么办?用这22种方式改造它
  39. Hundred enterprises blue V certification course?
  40. Preview version of office 2021 is published and can be used without subscription
  41. A wave of new mobile phones are on the way. What about old ones? Transform it in 22 ways
  42. 名创优品上市12名员工身家超亿元 将预留总股数5%激励更多年轻人
  43. 12 employees with assets of over 100 million yuan will reserve 5% of the total shares to encourage more young people
  44. 2021年百度流量扶持企业百家号,如何抓住流量红
  45. 全球最具价值品牌50强
  46. 如果你用的是华为手机,花1分钟关掉这5个设置,再用2年都不卡
  47. 品牌如何使用工具监控舆情
  48. 2020教育品牌影响力舆情报告发布,多维呈现教育行业变革
  49. In 2021, Baidu's traffic will support enterprise Baijia. How to catch the traffic red
  50. Top 50 most valuable brands in the world
  51. If you are using a Huawei mobile phone, take one minute to turn off these five settings, and then use them for two years
  52. How brands use tools to monitor public opinion
  53. 2020 education brand influence public opinion report released, multi dimensional presentation of education industry reform
  54. 四川华西集团有限公司原党委委员、董事、副总经理杨硕被开除党籍和公职
  55. 什么是问答营销?问答营销的成功案例有那些?
  56. 买苹果还是选华为?手机店老板的回答一针见血,说到我心坎了
  57. Yang Shuo, former member of the Party committee, director and deputy general manager of Sichuan Huaxi Group Co., Ltd., was expelled from the party and public office
  58. What is question and answer marketing? What are the successful cases of Q & a marketing?
  59. Apple or Huawei? The answer from the owner of the mobile phone shop is to the point, and it's in my heart
  60. 一个赞多少钱?那些“刷量”买来的繁荣