AT89C51单片机开头赋值P2M1=0;P2M0=0;后,编译出现error:redefinition怎么办

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于AT89C5单片机的出租车计价器系统设计.doc 22页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
基于AT89C5单片机的出租车计价器系统设计
你可能关注的文档:
··········
··········
课程设计(综合实验)报告(年度第2学期)名称:单片机与嵌入式系统课程设计题目:基于51单片机的出租车计价器设计院系:控制与计算机工程学院班级:测控1101班学号:学生姓名:李权指导教师:吕跃刚设计周数:一周成绩:日期:日 一、课程设计图2P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。因此作为输入时,P2口的管脚被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(定时器/计数器0外部输入)P3.5T1(定时器/计数器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.1.3使用I/O口的注意事项(1)P1,P2,P3口的输出缓冲器可驱动4个LSTTL电路。对于HCMOS芯片单片机的I/O口,在正常情况下,可任意由TTL或NMOS电路驱动。HMOS及CMOS性的单片机I/O口有集电极开路或漏极开路的输出来驱动时,不必外加上拉电阻(2)对于74LS系列,CD4000系列以及一些大规模集成电路芯片(如,8279等),都可以和MCS-51系列单片机直接接口。具体使用时,可以查阅有关器件手册或参考典型电路(3)对一些线性组件,特别是应用键盘、码盘、LED显示器等输入/输出设备时,应当尽量增加驱动部分的容量,否则,单片机将提供不出足够的驱动电流供给负载使用1.289C51中断系统所谓中断,是指当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊情求,CPU暂停执行现行程序,转去对随机发生地更紧迫事件进行处理;处理完毕后,CPU自动返回原来的程序继续执行。中断允许软件设计不需要关心系统其他部分定时要求,算术程序不需要考虑隔几个指令检查I/O设备是否需要服务。相反,算术程序编写时好像有无限的时间作算术运算而无其他工作在进行。若其它事件需要服务时,则通过中断告诉系统。89C51单片机有5个中断源,有两个中断优先级,每个中断源的优先级可以编程控制。中断允许受到CPU开中断和中断源开中断的两级控制。1.2.1中断源中断源是指任何引起计算机中断的事件,一般一台机器允许有许多个中断源。89C51系列单片机至少有5个中断源。增加很少的硬件
正在加载中,请稍后...君,已阅读到文档的结尾了呢~~
课件的第2章,介绍了51单片机得硬件结构,主要功能,外部引脚,以及内部的基本单元,包括处理器,定时器等。
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
第二章:51单片机硬件电路
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51单片机文档总结 pdf
51单片机文档总结 pdf
【单片机栏目提醒】:本文主要为网学会员提供“51单片机文档总结 pdf - 技术总结”,希望对需要51单片机文档总结 pdf - 技术总结网友有所帮助,学习一下!
AT89C51串口编程 前言 本文档是为单片机初学者写的有关串口通讯编程的说明文档。&&&&使用的单片机硬件是最通用的AT89C51单片机编程语言为C语言。&&&&本文档不是系统的介绍单片机知识的教程而是为了使您尽快掌握串口编程方法的技术说明。&&&& 本文档前几部分大量内容摘自平凡老师的单片机教程此教程是单片机入门的良好教材但由于那本教程是由汇编语言描述的对于时间不充足的同学来说学习汇编会浪费一些时间所以我还是整理了我们要了解的内容写到了本文档中。&&&&对于时间比较充分也有兴趣学习汇编语言的同学可以先阅读平凡老师的“单片机教程”然后从本文档第六部分看起。&&&&该教程网址/pmcu/dpjjx/ndpjjx2.htm 我也已经下载了此教程存在本实验室电脑中。&&&& 一单片机的基本认识 一台能够工作的计算机要有这样几个部份构成CPU进行运算、控制、RAM数据存储、ROM程序存储、输入/输出设备例如串行口、并行输出口等。&&&&在个人计算机上这些部份被分成若干块芯片安装一个称之为主板的印刷线路板上。&&&&而在单片机中这些部份全部被做到一块集成电路芯片中了所以就称为单片单芯片机而且有一些单片机中除了上述部份外还集成了其它部份如A/DD/A等。&&&& 天电脑中的CPU一块就要卖上千块钱这么多东西做在一起还不得买个天价再说这块芯片也得非常大了。&&&& 不价格并不高从几元人民币到几十元人民币体积也不大一般用40脚封装当然功能多一些单片机也有引脚比较多的如68引脚功能少的只有10多个或20多个引脚有的甚至只8只引脚。&&&& 为什么会这样呢 功能有强弱另外这种芯片的生产量很大技术也很成熟51系列的单片机已经做了十几年所以价格就低了。&&&& 既然如此单片机的功能肯定不强干吗要学它呢 话不能这样说实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能一个控制电冰箱温度的计算机难道要用P4应用的关键是看是否够用是否有很好的性能价格比。&&&& 二实现一个发光二极管的闪烁体会对单片机的C语言编程 买回来一块c51单片机要想使用它 首先要做必要的连线。&&&&我们实验室通常会给我们提供已经接好线的板子所以我们不必自己去连线这里需要说明的一点是一块单片机要工作起来首先需要复位所谓复位就是在单片机的RST引脚持续的加上两个机器周期的高电平使单片机回到工作的状态。&&&&机器周期在串口波特率的计算中介绍我做实验时使用的板子是一块较复杂的板子的一部分那块板子的复位方式是其他器件FPGA的程序给单片机复位可是我做实验时那个器件不需要工作所以单片机一直不能复位。&&&&如果你遇到这种情况请按任何一本书上介绍的加电复位选择合适的电容和电阻按书上的连线图焊接好如果你用的是我以前用过的板子这块板子已经接好了复位电路无须多考虑。&&&&请打开一本单片机的书找到单片机的引脚图。&&&&我们用的板子在p1.0脚接有一个发光二极管当p1.0为高电压时二极管点亮为低电压时二极管熄灭。&&&&我们现在想让小灯每隔0.5s闪烁一次实际上就是要灯亮0.5s再灭0.5s也就是说要P10不断地输出高和低电平。&&&&怎样实现这个要求呢我们首先给出程序然后对照程序分析。&&&& 实验1//程序开始 includeltreg51.hgtc51单片机编程特有的头文件 define uint unsigned int //单片机更容易处理unsigned型 define uchar unsigned char sbit P10P10//sbit是单片机c程序新的关键字用于定义位变量 //P1是在reg51.h中定义的p1口的标识符P10表示p1.0引脚即p1的第一位。&&&& void Delayuint i//延时程序i是时间参数
uint j forigt0i-- forj0jlt125j
P100 //单片机内部给p10脚加低电平关闭小灯 Delay500//延时0.5s P101 //单片机内部给p10脚加高电平点亮小灯 Delay500 //延时 0.5S
在以上程序中我们可以看出p101这条语句的含义就是p10加高电压这个高电压不是1v而是5v。&&&&p100则是p10加低电压。&&&&为什么是p101是给p10加5v电压而不是1v我们不用管因为单片机的IO电压为5v。&&&&现在从主函数看起主函数内部是个for循环此循环是让程序不停的在循环体内部转圈。&&&&循环体中首先让灯暗然后调用延时函数delay此函数的作用是延时0.5s然后点亮小灯然后又是延时延时完了进入下一次的循环……这样程序就每隔0.5s就给p10加一次电压加的电压高低更替并且永远循环下去。&&&&其结果是让小灯不停的闪烁。&&&&Delay函数纯粹是用软件的运行来消耗时间以达到延时的目的至于为什么参数是500时延时为0.5s以后在讲到单片机的机器周期和指令周期的时候再谈。&&&& 写好了程序下一步我们的任务是把程序烧写到单片机的存储器中去但是单片机是不认识c语言的所以需要我们预先编译成单片机认识的.hex格式文件此步骤用keil c软件实验室有。&&&&然后将.hex文件用编程器实验室也有写到单片机里把单片机插回板子加上电就可以看到小灯在闪烁了。&&&&Keil c和编程器的用法语言描述不太直观如果您没有用过建议您现场请教实验室其他同学。&&&& 三、几个基本概念 1.位的含义 通过上面的实验我们已经知道一盏灯亮或者说一根线的电平的高低可以代表两种状态0和1。&&&&实际上这就是一个二进制位因此我们就把一根线称之为一“位”用BIT表示。&&&&单片机允许对存储器中的一些位进行直接位寻址如内部RAM中的位寻址区一些寄存器的位可定义位变量上面程序中的语句sbit P10P10中sbit就是定义位变量的新的关键字。&&&&这和普通C语言有些差别在普通C语言里位数最少的char型也有8位。&&&& 2.字节的含义 一根线可以表于0和1两根线可以表达四种状态也就是可以表于0到3而三根可以表达0-7计算机中通常用8根线放在一起同时计数就可以表过到0-255一共256种状态。&&&&这8根线或者8位就称之为一个字节BYTE。&&&&为什么一个字节是8位数而不是其它数这只是人为地的规定。&&&& 3、存储器简介 存储器就是用来存放数据的地方。&&&&它是利用电平的高低来存放数据的也就是说它存放的实际上是电平的高、低而不是我们所习惯认为的1234这样的数字。&&&& 存储器按功能可以分为只读和随机存取存储器两大类。&&&&所谓只读从字面上理解就是只可以从里面读不能写进去它类似于我们的书本发到我们手回之后我们只能读里面的内容不可以随意更改书本上的内容。&&&&只读存储器的英文缩写为ROMREAD ONLY MEMORY我们只有用编程器对之进行编程。&&&& 所谓随机存取存储器即随时可以改写也可以读出里面的数据它类似于我们的黑板我可以随时写东西上去也可以用黑板擦擦掉重写。&&&&随机存储器的英文缩写为RAMREAD RANDOM MEMORY这两种存储器的英文缩写一定要记牢 ffH 80H 7fH 30H 2fH 20H 1fH 00H 8051内部数据存储器RAM示意图 特殊功能寄存器区 数据缓冲区 位寻址区 工作寄存器区 拿8051单片机为例它的内部含有地址为0000H-0fffHH表示16进制数共4K的ROM称为内部程序存储器主要用来存放程序比如例1这个用户程序烧到单片机后就存在这里。&&&&8051还含有地址为00H-7fH共256字节的RAM称为内部数据存储器主要用来存放运算的中间结果。&&&&这256字节的内部数据存储器又分为四部分00H-1fH为工作寄存器区20H-2fH为位寻址区30H-7fH为数据缓冲区80H-ffH为特殊功能寄存器区。&&&&用单片机C语言编程对这些暂时可不了解很深。&&&& 这里对工作寄存器做一简单介绍。&&&&00H-1fH这么大的空间被分为4个区每个区有8个通用寄存器R0-R7在后面将要介绍的中断中会对此说明一下。&&&& 另外如内部存储器不够用还可外接存储器ROMRAM都可外接分别称为外部程序存储器和外部数据存储器这是后话。&&&& 4、寄存器的认识 如前面介绍RAM分为4部分其中前三部分是供用户使用的用来存放用户自定义的变量如上面程序中的uint i既是存放于此而80H-ffH的特殊功能寄存器一般是存放系统已定义的有特殊功能的变量的中间值。&&&&这些变量一般都对应单片机的特定的部件是用来表征它们的状态的。&&&&如上面程序中的P1即是一个寄存器它的地址是90H代表一个I/O口正如上面所说P101这个语句就是让p1.0输出高电平。&&&& 单片机中的寄存器多数是八位的也就是每个寄存器可以放8个二进制数每个二进制数就是一位了。&&&&下面的文档中会直接用到几个单片机中的特殊寄存器这些寄存器都有自己的名字如TCODSCONTMODSCONIPIEP1TL0等他们都有自己特定的功能我想等到用到那一个在说哪一个如果你不习惯可以去查单片机的书。&&&& 5、晶振频率、机器周期指令周期 单片机是时序电路必然会有产生时序脉冲的装置这个任务交给了晶振。&&&&本实验用的晶振是11.0592MH的也就是每秒钟产生11.0592M个脉冲。&&&&单片机的机器周期是晶振振动周期的十二倍也就是十二分频。&&&&一个机器周期也就是us大概是1us。&&&&指令周期是一条指令的执行时间单片机中的指令周期按指令不同有单周期双周期和四周期指令但指令周期均是机器周期的整数倍等这些一般不用记用到了查单片机公司给的手册就可以了。&&&& 在上面程序中延时0.5秒我们用了for循环就是因为每一条指令的执行都会用一定的时间可以计算出当给形参500时大概延时0.5秒。&&&&至于怎么计算可暂不做了解。&&&&顺便说明一下这种延时不太精确在对精确度要求高的场合一般定时器实现这在本文档后面会说不过它相对要稍微复杂一点没有for循环简单易行。&&&& 6.引脚 通俗的说引脚就是单片机与外部的接线可以拿实验室的单片机看一看一个小片上有许多“爪子”那就是引脚。&&&&外部的电路或芯片都是接在特定的引脚上的。&&&& 89C51有40个引脚图参看其他参考书可大致分为以下几类 1.电源引脚Vcc电源Vss接地端 2.时钟XTAL1XTAL2 3.控制总线ALE/PROGPSENEA/VppRST/VPD等主要用来发出控制信号对内外部分进行控制这些在外接芯片时要注意连线平时编程可不必太注意 4.并行输入/输出接口:共4832个分别是P0口P1口P2口P3口各八位.这些引脚是用户编程时最需要注意的因它们一般由用户直接用软件赋值.其中P0P2一般是访问外设时的地址总线P0P3是数据总线而P3口的每一位都定义了第二功能可参考其他书.如前面所说使一个引脚为0则表示输出低电平为1则表示高电平.这些引脚的用法大家在以后的编程中可慢慢体会. 四、 数器与定时器介绍 鉴于初进实验室的同学可能尚未接触数字电路中计数器的概念15条对记述和定时作详细介绍如已学习过数字电路可快速浏览以下15条。&&&& 1、计数概念的引入 从选票的统计谈起画“正”。&&&&这就是计数生活中计数的例子处处可见。&&&&例录音机上的计数器、家里面用的电度表、汽车上的里程表等等再举一个工业生产中的例子线缆行业在电线生产出来之后要计米也就是测量长度怎么测法呢用尺量不现实太长不说要一边做一边量呢怎么办呢行业中有很巧妙的方法用一个周长是1米的轮子将电缆绕在上面一周由线带轮转这样轮转一周不就是线长1米嘛所以只要记下轮转了多少圈就可以知道走过的线有多长了。&&&&单片机也有计数功能通过一定的方式它可以对外部的一些事件计数。&&&&举个例子它可以计传送带上传送产品的数量。&&&& 2、计数器的容量 从一个生活中的例子看起一个水盆在水龙头下水龙没关紧水一滴滴地滴入盆中。&&&&水滴不断落下盆的容量是有限的过一段时间之后水就会逐渐变满。&&&&录音机上的计数器最多只计到999….那么单片机中的计数器有多大的容量呢89c51单片机中有两个计数器分别称之为T0和T1这两个计数器分别是由两个8位的RAM单元组成的即每个计数器都是16位的计数器最大的计数量是65536。&&&&确切地说计数器是特殊功能寄存器但一般特殊功能寄存器都是一个字节它们有两个字节如T0有两个字节它们的名称分别是TH0和TL0分别表示T0的高低字节。&&&&T1也一样有TH1TL1。&&&&给它们赋值时像用P1一样可以直接用名称。&&&& 3、定时 89C51中的计数器除了可以作为计数之用外还可以用作时钟时钟的用途当然很大如打铃器电视机定时关机空调定时开关等等那么计数器是如何作为定时器来用的呢 一个闹钟我将它定时在1个小时后闹响换言之也可以说是秒针走了3600次所以时间就转化为秒针走的次数的也就是计数的次数了可见计数的次数和时间之间的确十分相关。&&&&那么它们的关系是什么呢那就是秒针每一次走动的时间正好是1秒。&&&& 由此单片机中的定时器和计数器是一个东西只不过计数器是记录的外界发生的事情而定时器则是由单片机提供一个非常稳定的计数源。&&&& 提供给定时器的计数源是由单片机的晶振经过12分频后获得的一个脉冲源12分频是指晶振频率的12分之一。&&&&可以这么说如果定时器在工作单片机每运行一个机器周期的时间即12个晶振周期计数器就加1。&&&&晶振的频率当然很准所以这个计数脉冲的时间间隔也很准。&&&&例如一个12M的晶振它提供给计数器的脉冲时间间隔是12/12M等于0.000001s也就是记数周期为1个微秒即每隔1us计数器就加一。&&&& 4、溢出 让我们再来看水滴的例子当水不断落下盆中的水不断变满最终有一滴水使得盆中的水满了。&&&&这时如果再有一滴水落下就会发生什么现象水会漫出来用个术语来讲就是“溢出”。&&&& 水溢出是流到地上而计数器溢出后将使得TF0变为“1”。&&&&至于TF0是什么我们稍后再谈。&&&&一旦TF0由0变成1就是产生了变化产生了变化就会引发事件就象定时的时间一到闹钟就会响一样。&&&&至于会引发什么事件我们下次再介绍现在我们来研究另一个问题要有多少个计数脉冲才会使TF0由0变为1。&&&& 5、任意定时及计数的方法 刚才已研究过计数器的容量是16位也就是最大的计数值到65536因此计数计到65536就会产生溢出。&&&&这个没有问题问题是我们现实生活中经常会有少于65536个计数值的要求如包装线上一打为100瓶一瓶药片为100粒怎么样来满足这个要求呢 我们采用预置数的方法我要计100那我就先放进65436再来100个脉冲不就到了65536了吗。&&&& 定时也是如此每个脉冲是1微秒则计满65536个脉冲需时65.536毫秒但现在我只要10毫秒就可以了怎么办10个毫秒为10000个微秒所以只要在计数器里面放进5536就可以了。&&&& 6、计数定时器的方式控制字 我们上面说过c51中有两个计数定时器T1 和T0每个计数器都有两个八位寄存器即是十六位的寄存器。&&&&TH1、TL1分别是计数器T1的高八位和低八位存储区TH0、TL0分别是计数器0的高八位和低八位存储区。&&&&在单片机中还有两个特殊功能寄存器与定时/计数有关这就是TMOD和TCON。&&&&TMOD和TCON是寄存器的名称在reg51.h头文件中已把这些寄存器的名称定义成标识符如上面程序中的P1所以我们在写程序时就可以直接用这个名称来指定它们。&&&& 图1 内部定时器/计数器方式控制寄存器TMOD示意图 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 图2 内部定时器/计数器控制寄存器TCON:示意图 从图1中我们可以看出TMOD被分成两部份每部份4位。&&&&分别用于控制T1T0前四位控制T1后四位控制T0至于这里面是什么意思我们GATE C/T M1 M0 GATE C/T M1 M0 下面介绍。&&&& 可以看出TCON也被分成两部份高4位用于定时/计数器低4位则用于中断我们暂不管。&&&&而TF10我们上节课已提到了当计数溢出后TF10就由0自动变为1。&&&&原来TF10在这儿 TR0、TR1分别是控制T0和T1工作状态的位。&&&& 对图1 TMOD进行说明 1. M1M0 定时/计数器一共有四种工作方式就是用M1M0来控制的2位正好是四种组合00方式101方式110方式211方式3。&&&& 2.C/T 前面我们说过定时/计数器即可作定时用也可用计数用到底作什么用由我们根据需要自行决定也说是决定权在我们编程者。&&&&如果C/T为0就是用作定时器如果C/T为1就是用作计数器。&&&& 3.GATE:门控信号 GATE1时定时器/计数器的启动受到双重控制即要求TR0/TR1和INT0/INT1同时为高电平时定时器/计数器才可工作。&&&&这里INT0/INT1是另外一个寄存器里――P3里的两位P3.2P3.3分别是外部中断01的请求输入端前面介绍引脚时说过P3口每位有第二功能这里即是一例.举例说明设P3.2接外部一矩形波在其前半周期为高电平如设定GATE1在P3.2高电平时T01计数此时可测出矩形波的占空比。&&&&这里只是说明GATE的意义暂时可不做深入了解. GATE0时T/C的启动仅受TR0或TR1控制。&&&& 看到这里我们先不管四种工作方式是什么意思我们举例讨论两个计数/定时器和工作方式的选择。&&&&例如如果我们要使T1工作在方式2那么只需要给M1M0赋值10见上面第一点我们还想只用TR1控制T1那么给GATE赋0即可见以上第三点如果我们把T1用做一个定时器则给C/T赋0就可以了见以上第二点条。&&&&T0部分我们先不使用全部赋值0。&&&&给这么好几个东西赋值其实只需要一条c语言语句。&&&&对照着表一我们只需要把二进制数赋给寄存器TMOD即可实现以上全部的赋值。&&&&而二进制数就是十六进制数0x200x为十六进制数的标志。&&&&所用的赋值语句为TMOD0x20。&&&&简单吧顺便说一下有时候在程序中间可能只需要对寄存器中的某些位符值如我们要GATE为1这时候我们可直接写GATE1。&&&&这时不影响TMOD的其他位。&&&&只所以可以这么做同样是因为TMOD是可以直接位寻址的在reg51.h中以把它定义成标识符。&&&& 对图2 TCON进行说明 1.TF1: T1溢出标志当T1溢出时它会自动置1申请中断后自动清0 2.TR1: T1运行位当用户程序把T1符值为1时T1就开始工作了 3.TF0TR0: 是T0控制位和TF1TR1类似。&&&& 后四位与中断有关暂不做介绍。&&&& 下面我们来介绍定时计数器的四种工作方式。&&&& 1.方式0M1M000: 定时器/计数器的工作方式0称之为13位定时/计数方式。&&&&它由TL1的低5位和TH0/1的8位构成13位的计数器此时TL1/0的高3位未用。&&&& 2 .方式1M1M001: 工作方式1是16位的定时/计数方式将M1M0设为01即可其它特性与工作方式0相同。&&&&满计数值是2的16次方。&&&& 3.工作方式2M1M010: 在介绍这种式方式之前先让我们思考一个问题上一次课我们提到过任意计数及任意定时的问题比如我要计1000个数可是16位的计数器要计到65536才满怎么办呢我们讨论后得出的办法是用预置数先在计数器里放上64536再来1000个脉冲不就行了吗是的但是计满了之后我们又该怎么办呢要知道计数总是不断重复的流水线上计满后马上又要开始下一次计数下一次的计数还是1000吗当计满并溢出后计数器里面的值变成了0为什么可以参考前面课程的说明因此下一次将要计满65536后才会溢出这可不符合要求怎么办当然办法很简单就是每次一溢出时执行一段程序可以在这段程序中做把预置数64536送入计数器中的事情。&&&&所以采用工作方式0或1都要在溢出后做一个重置预置数的工作做工作当然就得要时间软件也要费一些事情为了省时省力有了此种方式:自动再装入预置数的工作方式。&&&& 既然要自动得新装入预置数那么预置数就得放在一个地方要不然装什么呢那么预置数放在什么地方呢它放在T0/1的高8位这样高8位不就不参与计数了。&&&&在工作方式2中只有低8位参与计数而高8位不参与计数用作预置数的存放这样计数范围就小多了当然做任可事总有代价的关键是看值不值如果我根本不需要计那么多数那么就可以用这种方式。&&&&每当计数溢出高八位中的预置的数值自动进入低8位。&&&&这是由硬件自动完成的不需要由人工干预。&&&& 通常这种式作方式用于波特率发生器也是本文档程序中用的最多的一种方式。&&&&用于这种用途时定时器就是为了提供一个时间基准。&&&&计数溢出后不需要做事情要做的仅仅只有一件就是重新装入预置数再开始计数而且中间不要任何延迟可见这个任务用工作方式2来完成是最妙不过了。&&&& 7 .定时器/计数器的定时/计数范围 工作方式013位定时/计数方式因此最多可以计到2的13次方也就是8192次。&&&& 工作方式116位定时/计数方式因此最多可以计到2的16次方也就是65536次。&&&& 工作方式2和工作方式3都是8位的定时/计数方式因此最多可以计到2的8次方也说是256次。&&&& 预置值计算用最大计数量减去需要的计数次数即可。&&&& 例流水线上一个包装是12盒要求每到12盒就产生一个动作用单片机的工作方式0.
【】【】【】【】【】

我要回帖

更多关于 C编译的时候会赋值吗 的文章

 

随机推荐