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

机会就会明白不研究

  • 自动检测80C51串行通讯中的波特率

    自动检测80C51串行通讯中的波特率:本文介绍一种在80C51 串行通讯应用中自动检测波特率的方法。按照经验,程序起动后所接收到的第1 个字符用于测量波特率。这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率定时间隔。显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。可是,在RS-232 模式下,许多ASCII 字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在一定范围内发生变化。此外,许多系统采用8 位数据、无奇偶校验的格式传输ASCII 字符。在这种格式里,普通ASCII 字节不会有MSB 设定,并且,UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起动定时器T0。在其后的串行数据的每一个上升沿,将定时器T0 的数值捕获并保存。当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位)过程所持续的时间。

    标签: 80C51 自动检测 串行通讯 波特率

    上传时间: 2014-08-22

    上传用户:dajin

  • Study-3 51单片机开发板原理图

    Study-3 51单片机开发板原理图:1-单片机的管脚除下载的几个(P30,P31,P15,P16,P17,RST)之外,均直接扩展出来,原理图中对应绿色的网络2-红色的网路对应的是这个板子上的外设,比如 液晶 数码管等等3-其他颜色的就是对应的各个部分的网络4-这个原理图的布局是根据PCB的布局来设计的,这样方便查阅5-在PCB中的右面扩展出来的万能板上,外面的一排是GND,里面的一排是VCC,扩展的时候,可以把电源直接接到这里就可以了6-板子的左上角有2个跳线,一个是控制液晶的背光用的,一个是2位数码管的能信号,因为采用了74ls164串转并的方案,所以数码管和串口不能同时使用,但是下载程序不影响,即平时短接就可以当作串口试验的时候,建议把跳线断开7-关于S系列单片机的使用,这个板子兼容S系列的单片机使用,留有下载线的接口8-下载程序说明,STC单片机采用串口下载,下载前一定要冷启动即断电,点击下载,上电,程序就会下载进去了

    标签: Study 51单片机 开发板原理图

    上传时间: 2013-10-29

    上传用户:372825274

  • 用GPIO做步进电机控制

    用GPIO做步进电机控制:步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。步进电机靠一种叫环形分配器的电子开关器件,通过功率放大器使励磁绕组按照顺序轮流接通直流电源。由于励磁绕组在空间中按一定的规律排列,轮流和直流电源接通后,就会在空间形成一种阶跃变化的旋转磁场,使转子步进式的转动,随着脉冲频率的增高,转速就会增大。步进电机的旋转同时与相数、分配数、转子齿轮数有关。现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。步进电机和普通电机的区别主要就在于其脉冲驱动的形式,正是这个特点,步进电机可以和现代的数字控制技术相结合。不过步进电机在控制的精度、速度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机。在精度不是需要特别高的场合就可以使用步进电机,步进电机可以发挥其结构简单、可靠性高和成本低的特点。使用恰当的时候,甚至可以和直流伺服电动机性能相媲美。

    标签: GPIO 步进电机控制

    上传时间: 2013-11-05

    上传用户:xinzhch

  • 用MCP定时器控制步进电机

    用MCP定时器控制步进电机:步进电机简介1.1.1 步进电机步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。步进电机靠一种叫环形分配器的电子开关器件,通过功率放大器使励磁绕组按照顺序轮流接通直流电源。由于励磁绕组在空间中按一定的规律排列,轮流和直流电源接通后,就会在空间形成一种阶跃变化的旋转磁场,使转子步进式的转动,随着脉冲频率的增高,转速就会增大。步进电机的旋转同时与相数、分配数、转子齿轮数有关。现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。步进电机和普通电机的区别主要就在于其脉冲驱动的形式,正是这个特点,步进电机可以和现代的数字控制技术相结合。不过步进电机在控制的精度、速度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机。在精度不是需要特别高的场合就可以使用步进电机,步进电机可以发挥其结构简单、可靠性高和成本低的特点。使用恰当的时候,甚至可以和直流伺服电动机性能相媲美。

    标签: MCP 定时器 控制 步进电机

    上传时间: 2014-04-28

    上传用户:joheace

  • MCP定时器的死区插入

    MCP定时器的死区插入: 在双极性PWM驱动系统中,上下桥臂的电力开关器件交替导通(如图1-1的半桥电路)。图1-1 电力开关半桥电路理想情况下,电力开关器件的开启和关断是不需要时间的,这时只要上下桥臂的驱动信号只要相反就可以;而实际的电力开关器件的开启和关断是需要时间的,而且关断时间比开启时间要长,这时就会出现一桥臂尚没有完全关闭的情况下,另一桥臂就导通了,这就会出现上下桥臂同时导通的情况,致使电源短路,出现很大的直通电流,导致电力器件大量发热,不但会造成电源浪费,还可能烧毁电力开关器件。因此,为避免出现上下桥臂直通的现象,就需要在一桥臂开始前,保证另一桥臂完全关断,为此,在PWM驱动信号中插入死区保护时间,如图1-2中的灰条所示(这个信号是电力器件在低电平导通,高电平关断的情况)。

    标签: MCP 定时器 死区

    上传时间: 2013-11-14

    上传用户:dgann

  • SPCE061A单片机硬件结构

    SPCE061A单片机硬件结构 从第一章中SPCE061A的结构图可以看出SPCE061A的结构比较简单,在芯片内部集成了ICE仿真电路接口、FLASH程序存储器、SRAM数据存储器、通用IO端口、定时器计数器、中断控制、CPU时钟、模-数转换器AD、DAC输出、通用异步串行输入输出接口、串行输入输出接口、低电压监测低电压复位等若干部分。各个部分之间存在着直接或间接的联系,在本章中我们将详细的介绍每个部分结构及应用。2.1 μ’nSP™的内核结构μ’nSP™的内核如0所示其结构。它由总线、算术逻辑运算单元、寄存器组、中断系统及堆栈等部分组成,右边文字为各部分简要说明。算术逻辑运算单元ALUμ’nSP™的ALU在运算能力上很有特色,它不仅能做16位基本的算术逻辑运算,也能做带移位操作的16位算术逻辑运算,同时还能做用于数字信号处理的16位×16位的乘法运算和内积运算。1. 16位算术逻辑运算不失一般性,μ’nSP™与大多数CPU类似,提供了基本的算术运算与逻辑操作指令,加、减、比较、取补、异或、或、与、测试、写入、读出等16位算术逻辑运算及数据传送操作。2. 带移位操作的16位算逻运算对图2.1稍加留意,就会发现μ’nSP™的ALU前面串接有一个移位器SHIFTER,也就是说,操作数在经过ALU的算逻操作前可先进行移位处理,然后再经ALU完成算逻运算操作。移位包括:算术右移、逻辑左移、逻辑右移、循环左移以及循环右移。所以,μ’nSP™的指令系统里专有一组复合式的‘移位算逻操作’指令;此一条指令完成移位和算术逻辑操作两项功能。程序设计者可利用这些复合式的指令,撰写更精简的程序代码,进而增加程序代码密集度 (Code Density)。在微控制器应用中,如何增加程序代码密集度是非常重要的议题;提高程序代码密集度意味着:减少程序代码的大小,进而减少ROM或FLASH的需求,以此降低系统成本与增加执行效能。

    标签: SPCE 061A 061 单片机

    上传时间: 2013-10-10

    上传用户:星仔

  • 基于MSP430的微功耗体外临时心脏起搏器的设计

    基于MSP430 系列单片机设计了体外临时心脏起搏器的起搏装置,给出了硬件设计电路和软件的系统结构。经实验研究,该装置比原有的以AT89c2051 型单片机制造的体外临时心脏起搏器在单位电池供电的情况下使用期限更长,以实现低功耗,即将原来的工作电流削减一半以上,电池更换的频率由原先的1 次/周,降低至1 次/月 。心脏起搏器是目前临床上用于治疗心搏徐缓的最有效医疗设备。当患者心脏的窦房结或心肌的神经传导组织发生障碍时,心脏起搏器就会通过起搏装置人为的发放电脉冲,再经体内的导管电极刺激房室搏动[7]。随着现代电子技术的飞速发展,电子产品的低功耗设计越来越受到人们的重视。低功耗设计包括了低电压设计、低电流设计、相应得软硬件设计、充分利用现有资源、开发新资源等多层含意与技术[5] [6]。微功耗体外临时心脏起搏器已经成为各国、各公司竞相研究的一个重要领域。

    标签: MSP 430 微功耗 心脏起搏器

    上传时间: 2013-11-18

    上传用户:xyipie

  • 单片机开发中应掌握的几个基本技巧

    在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着 工程师。为帮助工程师解决单片机设计上的难题,《电子工程专辑》网站特邀Holtek香 港分公司工程部处长邓宏杰先生担任《单片机应用编程技巧》专题讨论的嘉宾,与广大 设计工程师交流单片机设计开发经验。现根据论坛中的讨论归纳出单片机开发中应掌握 的几个基本技巧。一、 如何提高C语言编程代码的效率邓宏杰指出,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。他强调:“ 如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的 时候,使用编译效率最高的语句。” 他指出,各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%。他说:“对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。所以如果对这些特性不了解,那么调试起来问题就会很 多,反而导致执行效率低于汇编语言。” 二、 如何减少程序中的bug? 对于如何减少程序的bug,邓宏杰给出了一些建议,他指出系统运行中应考虑的超范围管理参数有: 1.物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参 数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或 非正常回应进行出错处理。 2.资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、 存储单元长度、堆叠深度。在程式设计中,对资源参数不允许超范围使用。 3.应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦 写次数与资料存储时间等应用参数界限。 4.过程参数。指系统运行中的有序变化的参数。

    标签: 单片机开发 基本技巧

    上传时间: 2013-10-21

    上传用户:chukeey

  • 汇编+保护模式+教程

    九.输入/输出保护为了支持多任务,80386不仅要有效地实现任务隔离,而且还要有效地控制各任务的输入/输出,避免输入/输出冲突。本文将介绍输入输出保护。 这里下载本文源代码。 <一>输入/输出保护80386采用I/O特权级IPOL和I/O许可位图的方法来控制输入/输出,实现输入/输出保护。 1.I/O敏感指令输入输出特权级(I/O Privilege Level)规定了可以执行所有与I/O相关的指令和访问I/O空间中所有地址的最外层特权级。IOPL的值在如下图所示的标志寄存器中。 标  志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O许可位图规定了I/O空间中的哪些地址可以由在任何特权级执行的程序所访问。I/O许可位图在任务状态段TSS中。 I/O敏感指令 指令 功能 保护方式下的执行条件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 设置EFLAGS中的IF位 CPL<=IOPL IN 从I/O地址读出数据 CPL<=IOPL或I/O位图许可 INS 从I/O地址读出字符串 CPL<=IOPL或I/O位图许可 OUT 向I/O地址写数据 CPL<=IOPL或I/O位图许可 OUTS 向I/O地址写字符串 CPL<=IOPL或I/O位图许可 上表所列指令称为I/O敏感指令,由于这些指令与I/O有关,并且只有在满足所列条件时才可以执行,所以把它们称为I/O敏感指令。从表中可见,当前特权级不在I/O特权级外层时,可以正常执行所列的全部I/O敏感指令;当特权级在I/O特权级外层时,执行CLI和STI指令将引起通用保护异常,而其它四条指令是否能够被执行要根据访问的I/O地址及I/O许可位图情况而定(在下面论述),如果条件不满足而执行,那么将引起出错码为0的通用保护异常。 由于每个任务使用各自的EFLAGS值和拥有自己的TSS,所以每个任务可以有不同的IOPL,并且可以定义不同的I/O许可位图。注意,这些I/O敏感指令在实模式下总是可执行的。 2.I/O许可位图如果只用IOPL限制I/O指令的执行是很不方便的,不能满足实际要求需要。因为这样做会使得在特权级3执行的应用程序要么可访问所有I/O地址,要么不可访问所有I/O地址。实际需要与此刚好相反,只允许任务甲的应用程序访问部分I/O地址,只允许任务乙的应用程序访问另一部分I/O地址,以避免任务甲和任务乙在访问I/O地址时发生冲突,从而避免任务甲和任务乙使用使用独享设备时发生冲突。 因此,在IOPL的基础上又采用了I/O许可位图。I/O许可位图由二进制位串组成。位串中的每一位依次对应一个I/O地址,位串的第0位对应I/O地址0,位串的第n位对应I/O地址n。如果位串中的第位为0,那么对应的I/O地址m可以由在任何特权级执行的程序访问;否则对应的I/O地址m只能由在IOPL特权级或更内层特权级执行的程序访问。如果在I/O外层特权级执行的程序访问位串中位值为1的位所对应的I/O地址,那么将引起通用保护异常。 I/O地址空间按字节进行编址。一条I/O指令最多可涉及四个I/O地址。在需要根据I/O位图决定是否可访问I/O地址的情况下,当一条I/O指令涉及多个I/O地址时,只有这多个I/O地址所对应的I/O许可位图中的位都为0时,该I/O指令才能被正常执行,如果对应位中任一位为1,就会引起通用保护异常。 80386支持的I/O地址空间大小是64K,所以构成I/O许可位图的二进制位串最大长度是64K个位,即位图的有效部分最大为8K字节。一个任务实际需要使用的I/O许可位图大小通常要远小于这个数目。 当前任务使用的I/O许可位图存储在当前任务TSS中低端的64K字节内。I/O许可位图总以字节为单位存储,所以位串所含的位数总被认为是8的倍数。从前文中所述的TSS格式可见,TSS内偏移66H的字确定I/O许可位图的开始偏移。由于I/O许可位图最长可达8K字节,所以开始偏移应小于56K,但必须大于等于104,因为TSS中前104字节为TSS的固定格式,用于保存任务的状态。 1.I/O访问许可检查细节保护模式下处理器在执行I/O指令时进行许可检查的细节如下所示。 (1)若CPL<=IOPL,则直接转步骤(8);(2)取得I/O位图开始偏移;(3)计算I/O地址对应位所在字节在I/O许可位图内的偏移;(4)计算位偏移以形成屏蔽码值,即计算I/O地址对应位在字节中的第几位;(5)把字节偏移加上位图开始偏移,再加1,所得值与TSS界限比较,若越界,则产生出错码为0的通用保护故障;(6)若不越界,则从位图中读对应字节及下一个字节;(7)把读出的两个字节与屏蔽码进行与运算,若结果不为0表示检查未通过,则产生出错码为0的通用保护故障;(8)进行I/O访问。设某一任务的TSS段如下: TSSSEG                  SEGMENT PARA USE16                        TSS     <>             ;TSS低端固定格式部分                        DB      8 DUP(0)       ;对应I/O端口00H—3FH                        DB      10000000B      ;对应I/O端口40H—47H                        DB      01100000B      ;对用I/O端口48H—4FH                        DB      8182 DUP(0ffH) ;对应I/O端口50H—0FFFFH                        DB      0FFH           ;位图结束字节TSSLen                  =       $TSSSEG                  ENDS 再假设IOPL=1,CPL=3。那么如下I/O指令有些能正常执行,有些会引起通用保护异常:                         in      al,21h  ;(1)正常执行                        in      al,47h  ;(2)引起异常                        out     20h,al  ;(3)正常实行                        out     4eh,al  ;(4)引起异常                        in      al,20h  ;(5)正常执行                        out     20h,eax ;(6)正常执行                        out     4ch,ax  ;(7)引起异常                        in      ax,46h  ;(8)引起异常                        in      eax,42h ;(9)正常执行 由上述I/O许可检查的细节可见,不论是否必要,当进行许可位检查时,80386总是从I/O许可位图中读取两个字节。目的是为了尽快地执行I/O许可检查。一方面,常常要读取I/O许可位图的两个字节。例如,上面的第(8)条指令要对I/O位图中的两个位进行检查,其低位是某个字节的最高位,高位是下一个字节的最低位。可见即使只要检查两个位,也可能需要读取两个字节。另一方面,最多检查四个连续的位,即最多也只需读取两个字节。所以每次要读取两个字节。这也是在判别是否越界时再加1的原因。为此,为了避免在读取I/O许可位图的最高字节时产生越界,必须在I/O许可位图的最后填加一个全1的字节,即0FFH。此全1的字节应填加在最后一个位图字节之后,TSS界限范围之前,即让填加的全1字节在TSS界限之内。 I/O许可位图开始偏移加8K所得的值与TSS界限值二者中较小的值决定I/O许可位图的末端。当TSS的界限大于I/O许可位图开始偏移加8K时,I/O许可位图的有效部分就有8K字节,I/O许可检查全部根据全部根据该位图进行。当TSS的界限不大于I/O许可位图开始偏移加8K时,I/O许可位图有效部分就不到8K字节,于是对较小I/O地址访问的许可检查根据位图进行,而对较大I/O地址访问的许可检查总被认为不可访问而引起通用保护故障。因为这时会发生字节越界而引起通用保护异常,所以在这种情况下,可认为不足的I/O许可位图的高端部分全为1。利用这个特点,可大大节约TSS中I/O许可位图占用的存储单元,也就大大减小了TSS段的长度。 <二>重要标志保护输入输出的保护与存储在标志寄存器EFLAGS中的IOPL密切相关,显然不能允许随便地改变IOPL,否则就不能有效地实现输入输出保护。类似地,对EFLAGS中的IF位也必须加以保护,否则CLI和STI作为敏感指令对待是无意义的。此外,EFLAGS中的VM位决定着处理器是否按虚拟8086方式工作。 80386对EFLAGS中的这三个字段的处理比较特殊,只有在较高特权级执行的程序才能执行IRET、POPF、CLI和STI等指令改变它们。下表列出了不同特权级下对这三个字段的处理情况。 不同特权级对标志寄存器特殊字段的处理 特权级 VM标志字段 IOPL标志字段 IF标志字段 CPL=0 可变(初POPF指令外) 可变 可变 0  不变 不变 可变 CPL>IOPL 不变 不变 不变 从表中可见,只有在特权级0执行的程序才可以修改IOPL位及VM位;只能由相对于IOPL同级或更内层特权级执行的程序才可以修改IF位。与CLI和STI指令不同,在特权级不满足上述条件的情况下,当执行POPF指令和IRET指令时,如果试图修改这些字段中的任何一个字段,并不引起异常,但试图要修改的字段也未被修改,也不给出任何特别的信息。此外,指令POPF总不能改变VM位,而PUSHF指令所压入的标志中的VM位总为0。 <三>演示输入输出保护的实例(实例九)下面给出一个用于演示输入输出保护的实例。演示内容包括:I/O许可位图的作用、I/O敏感指令引起的异常和特权指令引起的异常;使用段间调用指令CALL通过任务门调用任务,实现任务嵌套。 1.演示步骤实例演示的内容比较丰富,具体演示步骤如下:(1)在实模式下做必要准备后,切换到保护模式;(2)进入保护模式的临时代码段后,把演示任务的TSS段描述符装入TR,并设置演示任务的堆栈;(3)进入演示代码段,演示代码段的特权级是0;(4)通过任务门调用测试任务1。测试任务1能够顺利进行;(5)通过任务门调用测试任务2。测试任务2演示由于违反I/O许可位图规定而导致通用保护异常;(6)通过任务门调用测试任务3。测试任务3演示I/O敏感指令如何引起通用保护异常;(7)通过任务门调用测试任务4。测试任务4演示特权指令如何引起通用保护异常;(8)从演示代码转临时代码,准备返回实模式;(9)返回实模式,并作结束处理。

    标签: 汇编 保护模式 教程

    上传时间: 2013-12-11

    上传用户:nunnzhy

  • 51仿真器(含原理图,PCB和监控程序)

    使用注意:注意烧写的时候不要勾选SC0,SC1这两项加密项也不要选 初学51单片机或是业余玩玩单片机开发,每次总要不断的调试程序,如没有仿真器又不喜欢用软件仿真,那只有每次把编译好的程序烧录到芯片上,然后在应用电路或实验板上观察程序运行的结果,对于一些小程序这样的做好也可以很快找到程序上的错误,但是程序大了,变量也会变的很多,而直接烧片就很难看到这些变量的值了,在修改程序时还要不断的烧片实验,确实很麻烦,这时如果有一台仿真器就会变得很好方便了。但一台好的仿真器对于业余爱好者来说确实有一些贵,在这里介绍这种易于自制的51芯片仿真器虽然有一些地方不够完善,但还是非常适于初学51单片机的朋友和经济能力不是很好的业余爱好者。   这个仿真器的仿真CPU是使用SST公司的SST89C58或SST89C54(其它相容的芯片也可,这里主要讲述SST89C58),对于没有可以烧写SST89C58芯片的朋友应该选用CA版本的SST89C58芯片,这个CA型号的芯片出厂时已内置了BSL1.1E的固件程序。那什么是BSL呢?BSL就是英文BOOT-Strap Loader,意思就是可引导装载,形象来说就像电脑用DOS起动盘起动后可以装载应用程序并运行。只不过SST89C58是用串口来输入程序资料的。为了能把编译好的单片机程序HEX或BIN文件下载到SST89C58芯片上,SST公司还提供了一种叫EasyIAP的软件,IAP为In-Application Programming,有了这个软件就可以把SST89C54变为在线下载的实验器。

    标签: PCB 仿真器 原理图 监控程序

    上传时间: 2013-11-18

    上传用户:gonuiln