c语言单片机基础教程.docx
《c语言单片机基础教程.docx》由会员分享,可在线阅读,更多相关《c语言单片机基础教程.docx(46页珍藏版)》请在咨信网上搜索。
1、第一课 建立您的第一个C工程使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好 的程序。KEIL UVISI0N2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架 构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常 用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很 多开发51应用的工程师或普通的单片机爱好者,都对它十肥也欢。以上简单介绍了 KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对 乎我们这些
2、普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本 可以满足一般的个人学习和小型应用的开发。(安装的方法和普通软件相当这里就不做介绍了)安装好后,你是不是迫不及待的想建立自己的第一个C程序工程呢?下面就让我们一起来建立一个小 程序工程吧。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件 仿真看到程序运行的结果。首先当然是运行KEIL51软件。怎么翻开?噢,天!那你要从头学电脑了。呵呵,开个玩笑,这个问题 我想读者们也不会提的了: P。运行几秒后,出现如图的屏幕。接着按下面的步骤建立您的第一个工程:(1)点击Projec
3、t菜单,选择弹出的下拉式菜单中的New Project,如图12。接着弹 出一个标准Windows文件对话窗口,如图1-3,这个东东想必大家是见了 N次的了,用法 技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在“文件名”中输入您的第 一个C程序工程名称,这里我们用“test”,这是笔者惯用的名称,大家不必照搬就是了,只 要符合Windows文件规那么的文件名都行。“保存”后的文件扩展名为uv2,这是KEILuVision2 工程文件扩展名,以后我们可以直接点击此文件以翻开先前做的工程。图 1 2 New Project 菜单图1一3文件窗口(2)选择所要的单片机,这里我们选择常用
4、的Atcml公司的AT89c51。此时屏幕如图 1一4所示。AT89C51有什么功能、特点呢?不用急,看图中右边有简单的介绍,稍后的章 节会作较详细的介绍。完成上面步骤后,我们就可以进行程序的编写了。(3)首先我们要在工程中创立新的程序文件或加入旧程序文件。如果你没有现成的程图3 2工程选项窗口图3 2工程选项窗口=1 Files 苧xJ2JBuild target Target 11compiling test 1.c.linking.Program Size: data=30.1 xdata=0 code=1100creatinq hex file from test”.test - 0
5、Error(s), 0 Warning(s).小 Build 卜 Command 入 Find in Files /图33编译信息窗口或许您已把编译好的文件烧到了芯片上,如果您购买或自制了带串口输出元件的学习实验板,那您就 可以把串口和PC机串口相联用串口调试软件或Windows的超级终端,将其波特率设为1200,就可以看到不 停输出的Hell。World!”字样。也许您还没有实验板,那这里先说说AT89c51的最小化系统,再以一实例 程序验证最小化系统是否在运行,这个最小化系统也易于自制用于实验。图34便是AT89c51的最小化系 统,不过为了让我们可以看出它是在运行的,我加了一个电阻和一个
6、LED,用以显示它的状态,晶振可以根 据自己的情况使用,一般实验板上是用11.0592MHz或12MHz,使用前者的好外是可以产生标准的串口波特 率,后者那么一个机器周期为1微秒,便于做精确定时。在自己做实验里,注意的是VCC是+5V的,不能高 于此值,否那么将损坏单片机,太低那么不能正常工作。在31脚要接高电平,这样我们才能执行片内的程序, 如接低电平那么使用片外的程序存储器。下面,我们建个新的工程名为OneLED来验证最小化系统是否可以 工作。程序如下: #include 预处理命令 void ma in (void) /主函数名 这是第一种注释方式unsigned int a; 定义变量
7、a为int类型 这是第二种注释方式do /do while组成循环for (a=0; a50000; a+); 这是一个循环 Pl_0 = 0; 设Pl. 0 口为低电平,点亮LED for (a=0; a50000; a+); /这是一个循环 Pl 0 = 1; 设PL 0 口为高电平,熄火LED )while(l);12J 56034DI57 EED6svrc C ,1312Cl 30pF15R1 S.2K17C316Fj=lOuFAT89C51P1.0PO.O(ADO)P1.1PO.1(AD1)P1.2P0.2(AD2)P1.3P0.3(AD3)P1.4P0.1(AIM)P1.5PO.5
8、(AD5)P1.6P0.6(AD6)P1.7P0.7(AD7)INT1(P3.3)P2.0(A8)INT0(P3.2)P2.1(A9)TL(P3.5)P2.2(A10)P2.3(A11)T0(P3.4)P2.4(A12)EA.WP2.5(A13)P2.6(A14)XTAL1XTAL2P2.7(A15)VCCRESETGND RXD(P3.0)TXD(P3.1)RD(P3.7)ALEZPMGWR(P3.6)PSEN9320010 91-1-3 2ovccGNDvcc图3 - 4 AT89c51最小化系统这里先讲讲KEILC编译器所支持的注粒语句。一种是以/”符号开始的语句,符号之后的语句都被视
9、为注鄂,直到有回车换行。另一种是在/*和*/符号之内的为注释。注释不会被C编译器所编译。一个 C应用程序中应有一个main主函数,main函数可以调用别的功能函数,但其它功能函数不允许调用main 函数。不管main函数放在程序中的那个位置,总是先被执行。用上面学到的知识编译写好的OneLED程序, 并把它烧到刚做好的最小化系统中。上电,刚开始时LED是不亮的(因为上电复位后所有的10 口都置1引 脚为高电平),然后延时一段时间(for (a=0: a50000; a+)这句在运行),LED亮,再延时,LED熄灭, 然后交替亮、灭。第一个真正的小应用就做完,呵呵,先不要管它是否实用哦。如果没有
10、这样的效果那么 您就要认真检查一下电路或编译烧写的步骤了第四课数据类型先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是 语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定 时器1,可以写做“Timerl,如果程序中有TIMER/,那么这两个是完全不同定义的标识符。标识符由字 符串,数字和卜.划线等组成,注意的是第一个字符必须是字母或卜划线,如ITimer”是错误的,编译时便 会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标 识符在命名时应当简单,含义清晰,这样有助于
11、阅读理解程序。在C51编译器中,只支持标识符的前32位 为有效标识,一般情况下也足够用了,除非你要写天书:P。关健字那么是编程语言保存的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键资亦同。在KEIL uVision2中的关键字除了有ANSI C标准的32个关键字外还根据51单片机的特点扩展 了相关的关键字。其实在KEIL uVision2的文本编辑器中编写C程序,系统可以把保存字以不同颜色显示, 缺省颜色为天蓝色。(标准和扩展关键字请看附录一中的附表1T和附表1-2)先看表41,表中列出了 KEIL uVision2 C51编译器所支持的数据类型。在标准C语言中基本的数据
12、 类型为 char, int, short, long, float 和 double,而在 C51 编译器中 int 和 short 相同,float 和 double 相 同,这里就不列出说明了。下面来看看它们的具体定义:数据类型长度值域unsigned char单字节0-255signed char单字节-128+127unsigned int双字节0-65535signed int双字节-32768+32767unsigned long四字节0-4294967295signed long四字节-2147483648+2147483647float四字节1. 175494E-38 3J0
13、2823E+38*13字节对象的地址bit位0或1sfr单字节0-255sfrl6双字节0-65535sbit位。或1表KEIL uVision2 C51编译器所支持的数据类型char字符类型char类型的长度是个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsigned char和有符号字符类型signed char,默认值为signed char类型。unsigned char类型用字节中所有的 位来表示数位,所可以表达的数值范围是255。signed char类型用字节中最高位字节表示数据的符号, 0衣示正数,1”表示负数,负数用补码及示。所能表示的数值范围是T28+1
14、27。unsigned char常用 于处理ASCII字符或用于处理小于或等于255的整型数。*正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。1. int整型int整型长度为两个字节,用于存放一个双字节数据。分有符号int整型数signed int和无符号整型 数unsigned int,默认值为signed int类型。signed int表示的数值范围是-32768+32767,字节中最 高位表示数据的符号,0表示正数,1”表示负数。unsigned int表示的数值范围是0-65535。好了,先停一下吧,我们来写个小程序看看unsigned char和unsigne
15、d int用于延时的不同效果,说 明它们的长度是不同的,呵,尽管它并没有实际的应用意义,这里我们学习它们的用法就行。依旧用我们 上一课的最小化系统做实验,不过要加多一个电阻和LED,如图4-1。实验中用D1的点亮说明正在用 unsigned int数值延时,用D2点亮说明正在用unsigned char数值延时。vcco-131215143119I?9RI S.2K17-1-C3 16Ff=lOuF一PLOPO.O(ADO)Pl.lPO.1(AD1)Pl.2P0.2(AD2)Pl .3P0.3(AD3)Pl.4P0.4(ADd)Pl.5PO.5(AD5)Pl .6P0.6(AD6)Pl .7P
16、0.7(AD7)INT1(P3.3)P2.0(A8)INT0(P3.2)P2.1(A9)P2.2(A10)T1(P3.5)P2.3(A11)T0(P3.4)P2.4(A12)P2.5(A13)EA/VPXTAL1P2.6(A14)P2.7(A15)XTAL2VCCGNDRESETRXD(P3.0)RD(P3.7)TXP(P3.1)ALEZPROGWR(P3.6)PSENATS9C519 8 7 6-5432- 13 3 3 3-3333- 2252627280 0 0-1094 2 1-13 2cVCOVCC图4-1第4课实验用电路我们把这个工程称为TwoLED,实验程序如下: include
17、 预处理命令void ma in (void) 主函数名unsigned int a; 定义变量 a 为 unsigned int 类型unsigned char b; 定义变量 b 为 unsigned char 类型do /do while组成循环for (a=0; a65535; a+)Pl_0 = 0; /65535次设PLO 口为低电平,点亮LEDPl_0 = 1; 设PLO 为高电平,熄灭LEDfor (a=0: a30000: a+); 空循环for (b=0; b255; b+)Pl_l = 0; 255次设PL1 口为低电平,点亮LEDPl 1 = 1; 设PL1 为高电平,
18、熄灭LEDfor (a=0; a30000; a+); /空循环)while(l);)同样编译烧写,上电运行您就可以看到结果了。很明显D1点亮的时间长于D2点亮的时间。程序中的 循环延时时间并不是很好确定,并不太适合要求精确延时的场合,关于这方面我们以后也会做讨论。这里 必须要讲的是,当定义一个变量为特定的数据类型时,在程序使用该变量不应使它的值超过数据类型的值 域。如本例中的变量b不能赋超出0255的值,如for (b=0; b255; b+)改为for (b=0; b256; b+), 编译是可以通过的,但运行时就会有问题出现,就是说b的值永远都是小于256的,所以无法跳出循环执 行下一句
19、从而造成死循环。同理a的值不应超出065535。大家可以烧片看看实验的运行结果, 同样软件仿真也是可以看到结果的。2. long长整型long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signed long和无符 号长整型unsigned long,默认值为signed long类型。signed int表示的数值范围是-2147483648 +2147483647,字节中最高位表示数据的符号,0”表示正数,1”表示负数。unsigned long表示的数值范 国是。4294967295。3. float浮点型float浮点型在十进制中具有7位有效数字,是符合IEEE
20、 -754标准的单精度浮点型数据,占用四个 字节。因浮点数的结构较复杂在以后的章节中再做详细的讨论。4. *指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占据一定的 内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为13个字节。指针变量也具有类型, 在以后的课程中有专门课做探讨,这里就不多说 6. bit位标量bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不 能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和 False。7. sfr特殊功能寄存器
21、sfr也是一种扩充数据类型,点用一个内存单元,值域为。255。利用它可以访问51单片机内部的所 有特殊功能寄存器。如用sfr Pl = 0x90这一句定Pl为Pl端口在片内的寄存器,在后面的语句中我们用 以用P1 = 255 (对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。* AT89c51的特殊功能寄存器表请看附录二sfrl6 16位特殊功能寄存器sfrl6占用两个内存单元,值域为065535。sfrl6和sfr一样用于操作特殊功能寄存器,所不同的 是它用于操作占两个字节的寄存器,好定时器TO和T1。8. sbit可录址位sbit同位是C51中的一种扩充数据类型,利用它可以访
22、问芯片内部的RAM中的可寻址位或特殊功能寄 存器中的可寻址位。如先前我们定义了sfr Pl = 0x90; 因Pl端口的寄存器是可位寻址的,所以我们可以定义sbit Pl_l = Pl A 1; /Pl_l 为 Pl 中的 PL1 引脚同样我们可以用Pl. 1的地址去写,如sbit Pl_l = 0x91;这样我们在以后的程序语句中就可以用Pl_l来对PL 1引脚进行读写操作fo通常这些可以直接使用系统 提供的预处理文件,里面已定义好各特殊功能寄存器的简单名字,直接引用可以省去一点时间,我自己是 一直用的。当然您也可以自己写自己的定义文件,用您认为好记的名字。关于数据类型转换等相关操作在后面的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 单片机 基础教程
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。