虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

是否

  • 基于单片机虚拟串口驱动LCD1602的电路仿真

    基于M ult isim 10 仿真软件, 设计单片机的虚拟串口驱动LCD1602 液晶电路。实现了虚拟串口扩展并行输出的功能。该设计适用单片机UART 串口被占用时, 以最少的单片机IöO 口驱动LCD1602, 满足显示电路中复杂信息的需求。与传统的设计手段相比, 在M ult isim 10 平台支撑下, 设计电路更方便快捷, 并可通过仿真结果直接观测和验证设计电路是否达到要求, 具有省时、低耗、高效的优越性。

    标签: 1602 LCD 单片机 虚拟串口

    上传时间: 2013-10-11

    上传用户:xywhw1

  • QL310多功能识别主人电话遥控报警芯片用户手册

    □基于来电显示技术,识别主人,利用手机或固定电话实现免接通,免费用的绝密遥控关及撤防。□单芯片多功能可编程设计,MCU内核,有着十分灵活广泛的应用(可定制特殊功能)。自动拨号的电话报警器方面:室内手动延时布防,手机或固定电话免接通遥控撤防;拨号报警+现场报警(可选)。电话遥控开关方面:用于开启电控门锁,保险柜电控锁,车库电动门,电器开关...等。更多应用......。□单芯片最多可存入6组电话号码(6个主人)不重码,最后一组号码可刷新,掉电不丢失,可保100年。□非主人拨入无效,主人需20秒内连续拨通两次遥控才有效(撤防或开关),操纵成功后会自动回拨遥控者电话一次,以表示遥控成功。绝不影响电话的正常使用。□循环拨打1-6组主人电话号码报警15次,接听报警时警声提示,可同时选择现场报警。无注册用户时,触发报警将自动转入连续现场报警1分钟。□接警处理功能,接听报警期间,手机或固定电话按"#"键退出报警。未接警的号码继续打报警。□仅设计两按钮实现用户注册、信息删除、室那手动布防撤防、输出开关控制、报警模式设定,报警期间无法手动撤防。□两种反复可编程报警模式。掉电不丢失。模式1:报警完毕自动撤防;模式2:报警完毕保持布防。□两种自适应电路模式:DTMF解码器接入模式和DTMF解码器不接入模式。自动实现不同的电路设计实现不同的输出控制功能。同一电路设计,通过增减硬部件即可实现不同的输出功能,QL310上电时自动识别DTMF解码器是否存在。□两路警声输出:其中一路输出用于操作音提示及报警时加载到电话线路中供监听用。另一路为现场报警使用(可根据需要选用,这路只有在报警时才有输出,设计时可通过加大功率提高警声)。□状态记忆功能:布撤防状态都有记忆功能(掉电不丢失)。可避免布撤防期间的偶然的停电再上电是状态发生变化。比如,当前为布防状态,掉电再上电后还是保持布防状态。□手动布撤防提示音,布撤防LED指示灯。□上电开机报警模式提示音,模式1发一声提示音;模式2发两声提示音。□触发端的信号智能检测,因此可适应任何触发信号:或高电平,或低电平,或高/低脉冲信号;无源的开关信号,如继电器,干簧管或门磁开关等(由于触发端内部有上拉电阻)。标准的TTL电平,通过外接简单的限幅电路可实现更高电平或脉冲的输入(红外探头,防火探头等)。特强抗干扰处理,长距离布线可抗强电磁干扰。□20脚PDIP封装及20脚SOP封装。□5V低功耗。使用3.58M晶振。□工业级设计,工作温度:-40℃~+85℃

    标签: 310 QL 多功能 识别

    上传时间: 2013-11-13

    上传用户:lacsx

  • 单片机在压电陶瓷超声波换能器中的应用

    摘要:共振频率是压电陶瓷超声波换能器的一个重要参数,它随负载及工作温度等因素的变化而变化,或随使用时间的增加而变化,换能器馈电电路的工作频率是否能自动跟踪其共振频率尤其重要,应用单片机控制标称共振频率为28kHz的压电陶瓷超声波换能器馈电电路的工作频率可取得理想的效果。关键词:共振频率;压电陶瓷;超声波;换能器;单片机

    标签: 单片机 中的应用 压电陶瓷 超声波

    上传时间: 2013-11-01

    上传用户:hj_18

  • AVR mega128学习板

    AVR mega128学习板 联系  杨迪 15336417867  0531-55508458 QQ:1347978253  http://www.easyele.cn AVR mega128学习板是AVRVI设计生产的AVR学习开发生产工具,以Atmega128为核心,采用底板,核心板的组织形式,子板和母板组合,也可以分开。集成AVR JTAG ICE仿真器和STK500 ISP编程器,用户只需要再拥有一台计算机即可进行系统的学习。为了更好的支持客户的学习和开发,AVR mega128学习板板通讯接口升级为USB接口,方便计算机没有串口的朋友。货号:EasyAVRM128SK-A  规格: 套  重量:300克 单价498/套。 AVR mega128学习板他还是一个强大的开发工具。通过它进行学习后,你会觉得毕业设计如此简单,轻松应对电子设计大赛,机器人大赛,对电子产品的设计有进一步的认知,建立起学习ARM,DSP,FPGA的良好基础。AVR mega128学习板这个性价比高的专业工具是你的不二选择。购买本产品赠送LCD1602液晶一块。AVR mega128学习板是仿真器,编程器,开发板,核心板四合一的集功能于一体的产品,并且可以分开独立使用。 AVR mega128学习板于2008年开发,基于AVR中较高档芯片ATmega128设计,采用子板和母版叠加的方式,集成仿真和下载功能,原串口版本得到广大用户的支持和认可,2009年底升级为USB版本,使用更方便,兼容开发型号:ATmega64,特别适合新手学习,工程师快速产品开发。 AVR mega128学习板的关键特点: 1.采用核心板和主板分离的形式,在系统的学习之后,可以把核心板直接用于产品中,快速搭建系统。 2.AVR mega128学习板上集成了AVR JTAG ICE仿真器和AVR ISP编程器。 您只需要再拥有一台计算机,而不需要购买仿真器和编程器就可以学习开发了。 3.信号调理电路,输入0~10V,轨至轨信号调理。 学习阶段:AVR mega128学习板让你熟悉AVR的各种资源的应用,板载的常用外设,可以让你方便的进行各种学习实验。板载编程器和仿真器,让你无需担心自己的接线是否正确,即插即用。开发阶段:AVR mega128学习板的核心板可以用于产品核心,板子虽小,五脏俱全,最小系统板的基本电路,让你得心应手,标准的插针,可以将核心板直接插在万用板上使用,扩展方便。仿真器功能,让你开发变得更加简单,轻松找到程序中的各种问题,予以解决,加快开发。AVR mega128学习板的ISP 功能可以让你禁用JTAG接口,节省IO,并且让AD转换更加准确。生产阶段:编程器提供官方推荐的ISP在线下载方式,速度快,编程完成后不占用CPU的任何资源。 AVR mega128学习板是进入嵌入式开发领域的专业入门学习和开发工具,是学生,初学者,工程师的必备良弓。我们还为客户提供可选配件18B20温度传感器 10元 1602液晶 20元 12864液晶 80元 7.5/12V电源 12元 mini128核心板 147元 mini64核心板 138元。欢迎有志之士咨询选购。 想找一份好工作吗? 你想成为一名电子设计工程师吗? 你对电子设计有浓厚兴趣,而没有工具吗? 看了很久的程序方面的书籍,却没有实践的机会吗? 需要开发产品,想快速入门? 想参加电子设计大赛,机器人大赛吗?     这个性价比高的专业工具是你的不二选择。

    标签: mega AVR 128

    上传时间: 2013-11-13

    上传用户:ljj722

  • 基于80C51单片机的多路智能遥控节电器

    设计了一种多路智能遥控节电器。该节电器通过检测各路用电器的工作电流来判断各路上的用电器是否处于待机状态,同时通过遥控器为每路用电器的待机时长设定一个限制时间t,在t时间内自动控制该路用电器电源的断开与闭合。该节电器功能灵活、适用范围广、造价低、实用性强。

    标签: 80C51 单片机 多路 智能遥控

    上传时间: 2013-10-28

    上传用户:sz_hjbf

  • ICCAVR 入门

    ICCAVR简介ICCAVR 是一种使用ANSI 标准C 语言来开发微控制器(MCU)程序的一个工具,它是一个综合了编辑器和工程管理器的集成工作环境(IDE)。源文件全部被组织到工程之中,文件的编辑和工程(project)的构筑也在IDE 的环境中完成。编译错误在状态窗口中显示,用鼠标单击编译错误时,光标会自动跳转到出错行。这个工程管理器还能直接产生INTEL HEX格式的烧写文件和可以在AVR Studio 中调试的COFF 格式的调试文件。这里特别要提一下ICCAVR 中的应用构筑向导,可以在Tools 栏中选择“ApplicationBiulder”或者直接点击快捷工具栏中的“Application Biulder”图标,就可以打开应用构筑向导对话框,可以根据需要设定芯片种类,各个端口初始值,是否使用定时器,中断,UART等,选好以后单击“OK”就可以得到所需的硬件初始化程序段,非常可靠而且方便。图1给出了初始化UART 的一个例子:下面介绍一下创建并编译一个工程文件的简要步骤:1.新建一个源文件从file 菜单中选择new,创建一个新文件,在改文件中输入源程序并进行编辑和修改,然后存盘,在存盘时必须指定文件类型,如命名为:try.c 。写一个新文件的步骤:首先用Biulder 初始化需要用到的硬件资源,生成初始化程序,然后再写需要的代码实现所要的功能。2.新建一个project从projrct 菜单中选择new 命令,IDE 会弹出一个对话框,在对话框中用户可以指定工程存放的文件夹和工程的名称。在建立一个新工程之后,在工程管理器的窗口会出现三个子目录,Files, Headers, Documents,这时就可以将要编译的文件添加到project 中了。3.把文件添加到工程中可以在project-files 里单击右键,选择需要添加的文件;也可以在编辑窗口中单击右键选择弹出窗口的“Add To Project”命令。4.编译源文件在编译之前特别要注意在Project Options 中选择与硬件相应的芯片。如本次实验就选择ATMEGA8515,如图2 所示。在project 中选择make project,也可以直接单击快捷键F9,这时要是有错则会弹出出错信息,修改调试正确以后单击快捷键ISP 就可以烧写到硬件中去了。

    标签: ICCAVR

    上传时间: 2013-10-25

    上传用户:569342831

  • 学习单片机总结宝典

    学习单片机总结宝典 基于本人学习单片机的痛苦经历,特编写本教程,以此献给广大 的单片机初学者,希望您能从中受益。 作者提示:本教程乃最通俗易懂之单片机教材也,如果您还是看 不懂,请千万不要涉足此行,以免误入歧途,耽误您的前程*_* 拿到这本教程您首先就会想,什么是 IAP 教学法?是不是一种什么全新的教学方法?当然不是, 我可没有那么大的本事,其实这只是我杜撰的一个新名词,意思就是In Applications Program(在应 用中编程),当然这只是针对单片机教学,说法是否正确,还得您说了算。 至于为什么要提这种说法,那我倒想说几句。大家都知道,学习电子技术是一件非常无聊和枯燥 的事情,为什么会有这种想法,就是因为我们传统的教学方法只重理论而忽略了实践,要一个人记住那 些空洞而有无聊的理论知识实在不是一件容易的事,好在我们总算熬过来了,不管如何,也多多少少的 学习了一些电子基础知识。 接下来我们应该进一步掌握些什么知识呢,凡涉足此行的朋友都知道,那就是单片机。不过这可 不是一件容易的事,倒不是因为单片机很难学,而实在是我们身边很难找到一本专为单片机入门者而编 写的教材。翻一下传统的单片机教材,都好象是为已经懂单片机的人而写的,一般总是以单片机的结构 为主线,先讲硬件原理,然后是指令,接着讲软件编程,再是系统扩展和外围器件,最后举一些实例(随 便说一点:很多书中的实例都是有错误的),很少涉及单片机的基础知识,如果按照此种学习方法,想 进行产品开发,就必须先把所有的知识全部掌握了才可以进行实际应用。孰不知,单片机不象模拟电路 和数字电路那样,只要搞懂了电路原理,再按照产品要求设计好相应的电路就可以了。它是一种以简单 的硬件结构,复杂而有灵活的软件系统来完成设计的通用性产品,不同的设计者只会使用其不同的功能, 几乎没有人会把它的全部指令都使用起来,所以学习使用单片机只能靠循序渐进的积累,而不可能先把 它全部掌握了再去做产品开发(当然天才就例外了*_*)。

    标签: 单片机 宝典

    上传时间: 2013-10-15

    上传用户:小码农lz

  • 单片机指令系统原理

    单片机指令系统原理 51单片机的寻址方式 学习汇编程序设计,要先了解CPU的各种寻址法,才能有效的掌握各个命令的用途,寻址法是命令运算码找操作数的方法。在我们学习的8051单片机中,有6种寻址方法,下面我们将逐一进行分析。 立即寻址 在这种寻址方式中,指令多是双字节的,一般第一个字节是操作码,第二个字节是操作数。该操作数直接参与操作,所以又称立即数,有“#”号表示。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如:MOV  A,#3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。MOV  DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。这里也特别说明一下:在80C51单片机的指令系统中,仅有一条指令的操作数是16位的立即数,其功能是向地址指针DPTR传送16位的地址,即把立即数的高8位送入DPH,低8位送入DPL。 直接寻址 直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。例如:MOV  A,30H  这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是:1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形式给出。2、位寻址区。20H-2FH地址单元。3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV  IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是这条指令可以以MOV  IE,#85H 的形式表述,也可以MOV  80H,#85H的形式表述。 关于数据存储器RAM的内部情况,请查看我们课程的第十二课。 直接寻址是唯一能访问特殊功能寄存器的寻址方式! 大家来分析下面几条指令:MOV  65H,A       ;将A的内容送入内部RAM的65H单元地址中MOV  A,direct    ;将直接地址单元的内容送入A中MOV  direct,direct;将直接地址单元的内容送直接地址单元MOV  IE,#85H      ;将立即数85H送入中断允许寄存器IE 前面我们已学过,数据前面加了“#”的,表示后面的数是立即数(如#85H,就表示85H就是一个立即数),数据前面没有加“#”号的,就表示后面的是一个地址地址(如,MOV 65H,A这条指令的65H就是一个单元地址)。 寄存器寻址 寄存器寻址的寻址范围是:1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。2、部份专用寄存器。例如,累加器A、通用寄存器B、地址寄存器DPTR和进位位CY。 寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能得到操作数。例如:MOV A,R0这条指令的意思是把寄存器R0的内容传送到累加器A中,操作数就在R0中。INC R3这条指令的意思是把寄存器R3中的内容加1 从前面的学习中我产应可以理解到,其实寄存器寻址方式就是对由PSW程序状态字确定的工作寄存器组的R0-R7进行读/写操作。 寄存器间接寻址 寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。 MCS-51单片机规定工作寄存器的R0、R1做为间接寻址寄存器。用于寻址内部或外部数据存储器的256个单元。为什么会是256个单元呢?我们知道,R0或者R1都是一个8位的寄存器,所以它的寻址空间就是2的八次方=256。例:MOV  R0,#30H  ;将值30H加载到R0中    MOV  A,@R0    ;把内部RAM地址30H内的值放到累加器A中    MOVX A,@R0    ;把外部RAM地址30H内的值放到累加器A中 大家想想,如果用DPTR做为间址寄存器,那么它的寻址范围是多少呢?DPTR是一个16位的寄存器,所以它的寻址范围就是2的十六次方=65536=64K。因用DPTR做为间址寄存器的寻址空间是64K,所以访问片外数据存储器时,我们通常就用DPTR做为间址寄存器。例:MOV   DPTR,#1234H  ;将DPTR值设为1234H(16位)    MOVX  A,@DPTR      ;将外部RAM或I/O地址1234H内的值放到累加器A中 在执行PUSH(压栈)和POP(出栈)指令时,采用堆栈指针SP作寄存器间接寻址。例:PUSH  30H    ;把内部RAM地址30H内的值放到堆栈区中堆栈区是由SP寄存器指定的,如果执行上面这条命令前,SP为60H,命令执行后会把内部RAM地址30H内的值放到RAM的61H内。 那么做为寄存器间接寻址用的寄存器主要有哪些呢?我们前面提到的有四个,R0、R1、DPTR、SP 寄存器间接寻址范围总结:1、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。 2、外部RAM 64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。例如MOVX  A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。 堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。 寄存器间接寻址方式不可以访问特殊功能寄存器!! 寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址我寄存器间接寻址的区别,在寄存器间接寻址方式式中,寄存器的名称前面加前缀标志“@”。 基址寄存器加变址寄存器的变址寻址 这种寻址方式以程序计数器PC或DPTR为基址寄存器,累加器A为变址寄存器,变址寻址时,把两者的内容相加,所得到的结果作为操作数的地址。这种方式常用于访问程序存储器ROM中的数据表格,即查表操作。变址寻址只能读出程序内存入的值,而不能写入,也就是说变址寻址这种方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式。例:MOVC  A,@A+DPTR这条指令的功能是把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A假若指令执行前A=54H,DPTR=3F21H,则这条指令变址寻址形成的操作数地址就是54H+3F21H=3F75H。如果3F75H单元中的内容是7FH,则执行这条指令后,累加器A中的内容就是7FH。 变址寻址的指令只有三条,分别如下:JMP    @A+DPTRMOVC   A,@A+DPTRMOVC   A,@A+PC 第一条指令JMP @A+DPTR这是一条无条件转移指令,这条指令的意思就是DPTR加上累加器A的内容做为一个16位的地址,执行JMP这条指令是,程序就转移到A+DPTR指定的地址去执行。 第二、三条指令MOVC   A,@A+DPTR和MOVC   A,@A+PC指令这两条指令的通常用于查表操作,功能完全一样,但使用起来却有一定的差别,现详细说明如下。我们知道,PC是程序指针,是十六位的。DPTR是一个16位的数据指针寄存器,按理,它们的寻址范围都应是64K。我们在学习特殊功能寄存器时已知道,程序计数器PC是始终跟踪着程序的执行的。也就是说,PC的值是随程序的执行情况自动改变的,我们不可以随便的给PC赋值。而DPTR是一个数据指针,我们就可以给空上数据指针DPTR进行赋值。我们再看指令MOVC   A,@A+PC这条指令的意思是将PC的值与累加器A的值相加作为一个地址,而PC是固定的,累加器A是一个8位的寄存器,它的寻址范围是256个地址单元。讲到这里,大家应可明白,MOVC   A,@A+PC这条指令的寻址范围其实就是只能在当前指令下256个地址单元。所在,这在我们实际应用中,可能就会有一个问题,如果我们需要查询的数据表在256个地址单元之内,则可以用MOVC   A,@A+PC这条指令进行查表操作,如果超过了256个单元,则不能用这条指令进行查表操作。刚才我们已说到,DPTR是一个数据指针,这个数据指针我们可以给它赋值操作的。通过赋值操作。我们可以使MOVC   A,@A+DPTR这条指令的寻址范围达到64K。这就是这两条指令在实际应用当中要注意的问题。 变址寻址方式是MCS-51单片机所独有的一种寻址方式。 位寻址 80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。 位寻址的范围,也就是哪些部份可以进行位寻址: 1、我们在第十二课学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。它的单元地址是20H-2FH。共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的名字就是00H-7FH。这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学习中00H、01H。。。。7FH等等,所表示的都是一个字节(或者叫单元地址),而在这里,这些数据都变成了位地址。我们在指令中,或者在程序中如何来区分它是一个单元地址还是一个位地址呢?这个问题,也就是我们现在正在研究的位寻址的一个重要问题。其实,区分这些数据是位地址还是单元地址,我们都有相应的指令形式的。这个问题我们在后面的指令系统学习中再加以论述。 2、对专用寄存器位寻址。这里要说明一下,不是所有的专用寄存器都可以位寻址的。具体哪些专用寄存器可以哪些专用寄存器不可以,请大家回头去看看我们前面关于专用寄存器的相关文章。一般来说,地址单元可以被8整除的专用寄存器,通常都可以进行位寻址,当然并不是全部,大家在应用当中应引起注意。 专用寄存器的位寻址表示方法: 下面我们以程序状态字PSW来进行说明 D7 D6 D5 D4 D3 D2 D1 D0 CY   AC  F0  RS1  RS0  OV    P  1、直接使用位地址表示:看上表,PSW的第五位地址是D5,所以可以表示为D5H   MOV  C,D5H 2、位名称表示:表示该位的名称,例如PSW的位5是F0,所以可以用F0表示   MOV  C,F0 3、单元(字节)地址加位表示:D0H单元位5,表示为DOH.5    MOV  C,D0H.5 4、专用寄存器符号加位表示:例如PSW.5    MOV C,PSW.5 这四种方法实现的功能都是相同的,只是表述的方式不同而已。 例题:   1. 说明下列指令中源操作数采用的寻址方式。   MOV R5,R7 答案:寄存器寻址方式   MOV A,55H 直接寻址方式   MOV A,#55H 立即寻址方式   JMP @A+DPTR 变址寻址方式   MOV 30H,C 位寻址方式   MOV A,@R0 间接寻址方式   MOVX A,@R0 间接寻址方式 改错题   请判断下列的MCS-51单片机指令的书写格式是否有错,若有,请说明错误原因。   MOV R0,@R3 答案:间址寄存器不能使用R2~R7。   MOVC A,@R0+DPTR 变址寻址方式中的间址寄存器不可使用R0,只可使用A。   ADD R0,R1 运算指令中目的操作数必须为累加器A,不可为R0。   MUL AR0 乘法指令中的乘数应在B寄存器中,即乘法指令只可使用AB寄存器组合。

    标签: 单片机指令 系统原理

    上传时间: 2013-11-11

    上传用户:caozhizhi

  • 单片机串行通信发射机

    单片机串行通信发射机 我所做的单片机串行通信发射机主要在实验室完成,参考有关的书籍和资料,个人完成电路的设计、焊接、检查、调试,再根据自己的硬件和通信协议用汇编语言编写发射和显示程序,然后加电调试,最终达到准确无误的发射和显示。在这过程中需要选择适当的元件,合理的电路图扎实的焊接技术,基本的故障排除和纠正能力,会使用基本的仪器对硬件进行调试,会熟练的运用汇编语言编写程序,会用相关的软件对自己的程序进行翻译,并烧进芯片中,要与对方接收机统一通信协议,要耐心的反复检查、修改和调试,直到达到预期目的。单片机串行通信发射机采用串行工作方式,发射并显示两位数字信息,既显示00-99,使数据能够在不同地方传递。硬件部分主要分两大块,由AT89C51和多个按键组成的控制模块,包括时钟电路、控制信号电路,时钟采用6MHZ晶振和30pF的电容来组成内部时钟方式,控制信号用手动开关来控制,P1口来控制,P2、P3口产生信号并通过共阳极数码管来显示,软件采用汇编语言来编写,发射程序在通信协议一致的情况下完成数据的发射,同时显示程序对发射的数据加以显示。毕业设计的目的是了解基本电路设计的流程,丰富自己的知识和理论,巩固所学的知识,提高自己的动手能力和实验能力,从而具备一定的设计能力。我做得的毕业设计注重于对单片机串行发射的理论的理解,明白发射机的工作原理,以便以后单片机领域的开发和研制打下基础,提高自己的设计能力,培养创新能力,丰富自己的知识理论,做到理论和实际结合。本课题的重要意义还在于能在进一步层次了解单片机的工作原理,内部结构和工作状态。理解单片机的接口技术,中断技术,存储方式,时钟方式和控制方式,这样才能更好的利用单片机来做有效的设计。我的毕业设计分为两个部分,硬件部分和软件部分。硬件部分介绍:单片机串行通信发射机电路的设计,单片机AT89C51的功能和其在电路的作用。介绍了AT89C51的管脚结构和每个管脚的作用及各自的连接方法。AT89C51 与MCS-51 兼容,4K字节可编程闪烁存储器,寿命:1000次可擦,数据保存10年,全静态工作:0HZ-24HZ,三级程序存储器锁定,128*8 位内部RAM,32 跟可编程I/O 线,两个16 位定时/计数器,5 个中断源,5 个可编程串行通道,低功耗的闲置和掉电模式,片内震荡和时钟电路,P0和P1 可作为串行输入口,P3口因为其管脚有特殊功能,可连接其他电路。例如P3.0RXD 作为串行输出口,其中时钟电路采用内时钟工作方式,控制信号采用手动控制。数据的传输方式分为单工、半双工、全双工和多工工作方式;串行通信有两种形式,异步和同步通信。介绍了串行串行口控制寄存器,电源管理寄存器PCON,中断允许寄存器IE,还介绍了数码显示管的工作方式、组成,共阳极和共阴极数码显示管的电路组成,有动态和静态显示两种方式,说明了不同显示方法与单片机的连接。再后来还介绍了硬件的焊接过程,及在焊接时遇到的问题和应该注意的方面。硬件焊接好后的检查电路、不装芯片上电检查及上电装芯片检查。软件部分:在了解电路设计原理后,根据原理和目的画出电路流程图,列出数码显示的断码表,计算波特率,设置串行口,在与接受机设置相同的通信协议的基础上编写显示和发射程序。编写完程序还要进行编译,这就必须会使用编译软件。介绍了编译软件的使用和使用过程中遇到的问题,及在编译后烧入芯片使用的软件PLDA,后来的加电调试,及遇到的问题,在没问题后与接受机连接,发射数据,直到对方准确接收到。在软件调试过程中将详细介绍调试遇到的问题,例如:通信协议是否相同,数码管是否与芯片连接对应,计数器是否开始计数等。

    标签: 单片机 串行通信 发射机

    上传时间: 2013-10-19

    上传用户:uuuuuuu

  • 单片机入门基础知识大全免费下载

    单片机入门基础知识大全免费下载 单片机第八课(寻址方式与指令系统) 通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051的指令部份。 一、概述 1、指令的格式 我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。 2、汇编 我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。 二、寻址 让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH这些指令都是将一些数据送到相应的位置中去,为什么要送数据呢?第一个因为送入的数可以让灯全灭掉,第二个是为了要实现延时,从这里我们可以看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。下面我们就从数据传递类指令开始吧。 分析一下MOV P1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。 这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们可以明确地知道,P1中的值是0FFH,但是并不是任何时候都可以直接给出数本身的。例如,在我们前面给出的延时程序例是这样写的: MAIN: SETB P1.0     ;(1)    LCALL DELAY ;(2)     CLR P1.0      ;(3)    LCALL DELAY   ;(4)     AJMP MAIN    ;(5) ;以下子程序 DELAY: MOV R7,#250   ;(6) D1: MOV R6,#250   ;(7) D2: DJNZ R6,D2    ;(8)    DJNZ R7,D1   ;(9)    RET        ;(10)    END        ;(11)     表1  MAIN: SETB P1.0     ;(1)    MOV 30H,#255     LCALL DELAY ;     CLR P1.0      ;(3)     MOV 30H,#200     LCALL DELAY   ;(4)     AJMP MAIN    ;(5) ;以下子程序 DELAY: MOV R7,30H   ;(6) D1: MOV R6,#250   ;(7) D2: DJNZ R6,D2    ;(8)    DJNZ R7,D1   ;(9)    RET        ;(10)    END        ;(11) 表2    这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序还能满足要求吗?不能,怎么办?我们可以把延时程序改成这样(见表2):调用则见表2中的主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元中传过来的数确定。这样就可以满足要求。 从这里我们可以得出结论,在数据传递中要找到被传递的数,很多时候,这个数并不能直接给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作数所在单元的地址称之为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。除了这种方法之外,还有一种,如果我们把数放在工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOV A,R0就是将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H,和MOV A,R0不就没什么区别了吗?为什么要加以区分呢?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8h)就可以了。 这么斤斤计较!不就差了一个周期吗,如果是12M的晶振的话,也就1个微秒时间了,一个字节又能有多少? 不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上1000次,就是1毫秒,如果要执行1000000万次,就是1S的误差,这就很可观了,单片机做的是实时控制的事,所以必须如此“斤斤计较”。字节数同样如此。 再来提一个问题,现在我们已知,寻找操作数可以通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗? 看这个问题,要求从30H单元开始,取20个数,分别送入A累加器。 就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?是31H单元的,怎么取呢?还是只能用MOV A,31H,那么20个数,不是得20条指令才能写完吗?这里只有20个数,如果要送200个或2000个数,那岂不要写上200条或2000条命令?这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的值是30H,那么就到30H单元中去取,如果是31H就到31H单元中去取,就可以解决这个问题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就可以通过一定的方法让这里面的值发生变化,比如取完一个数后,将这个寄存器单元中的值加1,还是执行同一条指令,可是取数的对象却不一样了,不是吗。通过例子来说明吧。    MOV R7,#20    MOV R0,#30H LOOP:MOV A,@R0    INC R0    DJNZ R7,LOOP 这个例子中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。 这也是一种寻找数据的方法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,在间址寻址中,只能用R0或R1存放等寻找的数据。 二、指令 数据传递类指令 1) 以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 2)以寄存器Rn为目的操作的指令 MOV Rn,A   MOV Rn,direct   MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

    标签: 单片机 免费下载 基础知识

    上传时间: 2013-10-13

    上传用户:3294322651