当前位置:首页 > 51内核
  • 单片机学习笔记之51内核软件延时和串口的巧妙方法

     不知道大家学习51是怎么过来的,反正我是一路忽悠过来的。现在用51来开发产品必须要充分用到它的内部资源,本来主频、资源就比不上32,不充分的利用怎么才能开发好的产品,那么今天我又学习到两个小技能:延时和串口的发送中断 情况是这样的,在产品的开发中,遇到了74HC595控制数码管,这个数字逻辑芯片用过的都知道,一位数码管还好,要是有多位那就得不断的刷新,为快不破,进而达到不同位显示不同断码(数字)的效果。这个刷新频率还有讲究,我不知道我的理论对不对,反正我知道民用电50Hz接在灯泡上,人眼是看不出灯泡在不断的闪烁的。那么就根据这个原理我只要保证在50Hz以上的频率(20ms以内)及时的刷新一次显示就行了。不过实际效果是我延时个5ms刷新一次才差不多看不到频闪,延时是软件的for循环延时,不太准,但是也差不多把。我也不明白为什么要到5ms才能把频闪给消除掉。反正就按照实际效果来咯。问题来了,5ms的周期性刷新,难道MCU就单纯的给这个数码管刷新不干别的活了,这往往是不太可能的。那在调试的过程中我实现的方法是这样的: 程序没有操作系统,就是普通的while循环,一个循环里面有很多任务,跑一趟下来时间可能比较长,那我就多copy几个刷新函数呗,根据任务大概的耗时放置在不同的位置。这样下来结果还是比较明显的,最起码效果好很多。接着就是新问题了,当一个任务函数执行的时间比较长的情况下,还是会出现频闪,有朋友可能会想到,那就在任务函数里面放刷新显示函数呗,的确这是一个好方法。在程序中我也用到了。可是有些任务函数对时间要求比较严格,还就真的不能放在里面干扰它的底层驱动程序。重点来了,我就来记录下我使用的两个方法; 1、 巧妙的使用任务函数本身的延时函数 例如我在工程里面用到了DHT11温湿度传感器,这个传感器(包括DS18B20)是单总线协议,对时间要求相当严格,我就看着底层驱动去找,找到了一个时间相对来说比较长的地方: 上图是DHT11的时序图,红线标注的地方是MCU给传感器的其实信号,这里手册上说的是至少拉低18ms,那就在这个地方做文章,以下是我修改的代码: 只是让这个20ms的时间去干点别的事情,就是刷新数码管。当然了,如果有操作系统的话,操作系统延时的调用机制会把效率进一步提高。在这里只要保证红色方框内的执行时间和需要延时的时间差不多,保证能正常读取到传感器数据就行了,我也就估算出来的没有实际测试时间,毕竟不方便仿真,不在公司手边也没有示波器。 2、串口发送中断的使用 除了这里的延时时间修改之外还有一个地方比较棘手,那就是串口发送一帧数据,一帧数据比较长,用一个个字节等待发送完成的方式太费时间了,其中又不好加上刷新函数,怎么办,突然想到了之前用过32的串口发送中断。于是就查了下寄存器试用了下,还真可以。表示之前几乎没有用过串口的发送中断,最多用过接收中断。修改前和修改后的代码如下: 注释的就是一个个字节数序发送了,发送一个字节的函数原型如下: 修改后的串口中断函数: 从代码的结构来看,大致的原理就是在没有数据需要发送的时候串口中断处于关闭状态,当有数据需要发送的时候,先把数据先准备好存储在一个数组里面,然后调用发送函数。发送函数的内容先是把串口的中断打开(ES=1),清零发送完成标志位(TI = 0),把需要发送的第一个数据放进以为寄存器(SBUF = dat[0]),把模拟的发送数据地址指向发送的第二个字节(因为第一个已经发送了),然后就等着中断吧。每发送完成一个字节串口就会进入中断函数,在中断函数里面先判断是不是发送中断(51内核串口的发送中断和接收中断使用的是同一个中断向量),确保是发送中断后先清除中断标志,然后继续放入需要发送的下一个数据(SBUF = WIFI_TX_DATA[TX_CNT++];)同时需要发送的数据地址后移。判断需要发送的数据是不是全部发送完成了,发送完了那就关闭串口中断。这样一帧数据就完美的发送完成而且效率有所提升! 上述方法只是一个简单的处理,侦长度是定长14个字节,如果是不定长度的侦也是可以根据实际情况修改的。还有一个问题我在这里没有处理但是需要注意,那就是有一种情况需要考虑到,当一帧数据还没有发送完成,新的一帧数据又需要发送。那么这种情况就需要修改下存储的方法了。这里记上一笔,解决方式是把需要发送的数据存进一个相对大一点的数组里面,然后给这个数组分配两个指针,分别是头指针(p)和尾指针(q),每次发送的时候先判断是不是(p=q)如果是的话就证明之前的数据都发送完了,现在可以畅通无阻;如果不相等,那就继续存储并同时后移尾指针q的位置(如果溢出了那就重新回头呗—循环数组的方法)。

    时间:2018-07-24 关键词: 单片机 51内核

  • 51内核8位单片机MAX7651的开发环境

    摘要:介绍一种基于四时钟周期、高速8051内核的混合信号8位单片机MAX7651。探讨在开发基于MAX7651的应用系统时所面临的问题,并推荐相应的解决方案。 关键词:MAX7651 AT89LV55 8XC51RA/RB/RC ALL-07 Flash 四时钟周期 在全球8位单片机领域,英特尔(Intel)生产的MCS-51系列是毋庸质疑的领导者。借助英特尔广泛的授权行为,基于8051内核的8位单片机兼容产品早已根深叶茂。Dallas Semiconductor通过改良、优化传统的8051内核,开发出了高速、四时钟周期和单时钟周期8051内核,并在此基础上推出了一系列高速8位单片机。Maxim利用高速、四时钟周期8051内核开发出的第一款混合信号单片机MAX7651,内部集成了12位ADC、8位DAC以及16KB的 Flash存储器,非常适合便携式设备应用。 1 MAX7651简介 MAX7651内部集成了一个完全的12位、8通道ADC、2通道DAC、3个定时/计数器、16KB Flash存储器以及一个兼容于工业标准8051的四时钟周期高速内核。其它特性包括:256字节RAM、4个8位I/O口、2个异步串行口、1个中断控制器以及独立的看门狗定时器,如图1所示。 MAX7651内部12位ADC具有可编程增益调节和独立的采样保持器。转换速率可达53ksps,8个输入通道可以配置为8个独立的单端信号输入或者4个差分信号输入。单片机通过特殊功能寄存器(SFR)ADCON控制模数转换的工作模式,转换结果存放在ADDAT0和ADDAT1两个寄存器中。 图1 MAX8651内部功能框图 2 MAX7651软件开发工具 MAX7651的程序指令集与8051系列完全兼容,具有广泛的第三方开发软件工具支持。比较著名的软件工具包括:Franklin公司的 A51/C51、Keil公司的A51/C51以及Metalink公司的A51等汇编工具软件。笔者一直使用Keil公司的A51/C51,最新版本号是μP51V7.01。该版本C51已经具备MAX7651的头文件reg51ex.h,位于C51目录。如果需要使用A51宏汇编程序,用户要自己编制 inc头文件。笔者已经完成reg7651.inc头文件,只需要将它拷贝到C51目录下即可随时调用。 reg7651.inc头文件见本刊网络补充版(http://www.dpj.com.cn)。 Keil C51同时提供软件模拟调试器功能。对于开发者来说,可以对应用程序进行小范围的分区模拟测试,十分方便小型应用程序的开发,不需要专用的硬件仿真器。 3 MAX7651硬件仿真调试工具 目前,并没有专用的硬件仿真器完全支持MAX7651源程序仿真,主要是不能支持内部模数转换功能。在我国市场上,笔者认为Micetek公司的 EasyPack/E II 8052F和Insight公司的ME-52/ME-52 Plus是性价比较高的。特别是EasyPack/E II 8052F能够支持实时的源程序调试,用户界面非常友好,用它可以仿真MAX7651的绝大部分功能。注意:一般的仿真器只提供标准的40-DIP双列直插插座,用户必须自己制作64-TQFP(MAX7651)到40-DIP转换的插座适配器。 4 MAX7651的内部Flash编程 目前市面上没有硬件编程器直接支持MAX7651 Flash编程。可以采取一些简单措施解决这个问题,因为8051系列单片机都采用Intel标准的定时时序来编程器件内部存储器,MAX7651也不例外。MAX7651具有16KB的内部Flash,但是结构上与大多数单片机不同。它分为两个8KB的存储区,每个存储区又分为128个64字节的页面。 MAX7651支持两种Flash编程模式。第一种是在应用中编程,假定应用程序在某一个8KB的存储区内运行,并且保证程序只局限在这个8KB的存储区内运行,可以通过这种方式编程另一个8KB Flash存储区。MAX7651具有四个特殊功能寄存器(EEAL、EEAH、EEDAT、EESTCMD),用于实现此项功能。这里,可以将程序存储器作为数据存储器使用,用户不需要额外扩展数据存储器空间。第二种编程模式是,采用外部编程器的并行接口进行编程。目前我国市场比较通用的编程器有:台湾河洛公司的ALL-07和ALL-11P2、Xeltek公司的Superpro/680和Superpro/V等。其中ALL-07编程器目前支持的器件数目可达5000种以上,但是目前它并不直接支持MAX7651,可通过以下简单方法解决这个问题: ① 经过分析Atmel的AT89LV55以及Intel的8XC51RB两种单片机外部编程条件和时序可知,其与MAX7651几乎完全相同。从 AT89LV55的外部编程条件(见表1)和硬件接线图(见图2)来看,唯一不同的是二者采用了不同的编程电压。 ② 制作64-TQFP与40-DIP插座适配器,详细原理图请参考本刊网络补充版(http://www.dpj.com.cn)。请注意P2.5和 P3.3的处理方式以及/VPP引脚可以直接与VCC相连接,也可以通过低压差线性稳压器与编程器连接。 ③ 打开ALL-07,连接MAX7651。在ALL-07程序界面中选择AT89LV55或者87C51RB器件选项就可以直接编程MAX7651。注意:如果使用87C51RB,那么不能使用编程密码阵列命令;如果使用AT89LV55,必须设置编程最高地址空间为3FC0H,而不是3FFFH。 结 语 MAX7651是业界高性能混合工艺单片机的典型器件,可以极大降低模拟应用的设计难度。它的小封装、低功耗和高速特性非常适合便携式和嵌入式系统设计。Maxim拥有新一代的高速、低功耗8位和16位单片机内核技术,正在设计和规划更多的混合工艺单片机产品。

    时间:2014-05-05 关键词: 开发环境 max7651 51内核

  • 用51内核网络单片机构成的远程监控系统

    引 言     在工业控制、信息家电等应用领域,存在大量的嵌入式设备,而这些设备很多只有串口、CAN总线等简单的网络接口,通信能力有限,有的甚至处于孤立运行状态。如何让这些以单片机为核心的嵌入式系统接入以太网,并通过网络对它们进行远程监控,是当前电子世界中的研究热点。TCP/IP在Intemet和大多数局域网中的成功应用,已经证明了其强大的功能。如果实现TCP/IP协议和嵌入式系统的结合,嵌入式系统联网问题就能得到有效解决。目前,嵌入式系统联网主要有如下几种方案:①EMIT,以PC或其它高档计算机为网关,将CAN、RS-232等设备接入重量级网络;②采用32位MCU+实时操作系统,高档MCU功能强大,可以实现复杂操作,但需要有RTOS支持,这种方案的成本和对开发人员的要求较高;③采用Scenix的8位MCU,加上虚拟软件包,实现多任务操作系统,运行TCP/IP协议栈。     本文提出的基于网络单片机的嵌入式远程监控系统方案,可以实现串口、CAN总线等轻量级网络和以太网的互连。该方案具有体积小,性价比高的特点。1 系统的组成     基于网络单片机的嵌入式远程监控系统由主控制器、以太网接入模块、CAN网络接入模块、1-Wire网络、串口网络、存储器电路、实时时钟、电源模块和监控电路等功能模块组成。其原理框图如图1所示。 (1)主控制器     采用原Dallas公司的高性能51内核的网络单片机Ds80C400,内部集成了1个10/100M以太网控制器(MAC),3个通用全双工串口,1个CAN2.0B控制器,1个1.Wire控制器。MCU内部64KB的ROM程序中包含完整的TCP/P V4/6协议栈;可访问16MB存储空间;具有专门的低位地址口;4个数据指针;有2x/4x时钟加倍器,最高工作频率可达75MHz。(2)以太网接入模块     利用集成的MAC,通过物理层器件PHY和以太网相连;MAC具有标准的媒体无关接口MII。设计中PHY采用具有自动协商功能的DP83846A,外接网络变压器20F001N。在工作过程中,可以通过MII管理总线设置工作模式。PHY和以太网控制器的连接如图2所示。     MAC具有专门的接收发送缓冲区,可以通过MOVX进行访问;MAC还具有缓冲区控制单元BCU、命令/状态寄存器CSR、地址检测模块、电源管理单元等组成,主要由BCU负责以太网的收发活动,减少了CPU的参与,保证了以太网收发的效率。(3)CAN网络接入模块     通过集成的CAN2.0B控制器,外接CAN收发器和CAN网络相连。设计中使用的是TI的SN65HVD230,它具有低成本、低功耗的特点。(4)1-Wire网络     通过1一Wire总线控制器和1-Wire只读存储器DS2502-E48相连,给以太网控制器提供物理地址(MAC地址)。(5)串口网络     通过单片机内部集成的全双工串口,可以和串口设备相连。为了和外部的RS-232电平相匹配,外接收发器MAX560CAI(也可以采用MAX232、MAX3233等),它具有4个输入、5个输出。单片机的串口0用来和开发机相连,串口2作为DTE,具有完整的流控制线,用来和串口设备相连。(6)电 源    电路中各种器件的工作电压有3.3V、1.8V和5V等,采用MAX832、MAX682和MAXl792,分别提供3.3V、5V和1.8V电压。(7)监控电路     选用MAX825T(门限电压3.08V)来监测主控制器的3.3V电源电压,当电压低于3.08V时,产生可靠复位。(8)实时时钟     给系统提供准确的时间,便于了解系统状态,比如获取数据采集的时间等。(9)存储器单元     Ds80C400具有专门的低位地址线P7口和专门的工程序存储器片选信号(CEO~CE7)和数据存储器片选信号(PCEO~PCE3),可寻址16M的程序空间和4M的数据空间。选用AM29F040B一70(Flash,2片)作为程序存储器,HM6285 12LFP-7(SRAM,2片)作为数据存储器。将SRAM和Flash分别接在面、面、面、面。内部64KB的R0M在系统启动时,对SFR进行初始化,从而SRAM、Flash分别映射到表i所示的空间。DS80C400内部和各种控制器相关的存储区及ROM的地址映射如表2。这些缓冲区在芯片内部,具有丰富的访问和操作指令,系统具有较高的集成度和吞吐量。 2  程序设计方法     DS80C400中集成了64KB的ROM,具有工业标准的TCP/IP v4/v6协议栈、占先式的调度程序和网络引导程序、串口引导装载程序。网络引导程序和串口引导装载程序可以装载应用程序。在应用中通过外部引脚的配置,选择内部ROM的执行流程。系统启动时,ROM对单片机的串口0进行初始化,MCU通过串口0和开发主机通信,向F1ash写入程序。     网络引导程序利用内部的TCP/IP协议栈和任务调度程序,可以通过以太网进行应用程序下载,实现程序在线更新。应用程序使用Java来开发,借助Dallas公司提供的软件开发工具包TINI SDK,大部分工作在开发主机上完成;可以使用免费的Java SDK工具或集成开发环境,提高编程效率。TINI SDK将DS80C400中的硬件部分虚拟为Java的类,从而将对实际硬件的操作,转变为对对象方法的调用,使用Java不要求开发者深入了解系统的硬件构成。TINI SDK提供了Java程序的运行环境,在主机上开发Java应用程序经过转换,即可在目标系统上运行。在运行环境的支持下,可以开发功能完善的嵌入式Web服务器,从而实现设备运行状态的远程监测和控制。DS80C400中具有1KB的扩展堆栈空间,具有支持高级语言开发的物理基础。TINI SDK正是在这个基础上,提供了Java运行环境,从而可以开发多线程应用程序。以开发串口设备到以太网服务器的数据流传输程序为例,其中包含主线程和发送、接收线程。程序结构如图3和图4所示。                3  结论     该系统不仅可以拓展嵌入式设备的通信能力,将RS-232、CAN等轻量级网络和以太网相连,比如实现串口设备和以太网服务器的数据流传输,通过以太网服务器对串口设备进行监控;也可以取代原有控制设备,直接来控制现场设备,可利用该系统实现网络传感器、远程控制设备运行、远程数据采集等。系统还具有较大的扩展余地,可以根据应用需要进行扩展,如改变存储器的容量等。系统实现时,要根据具体需要选择合适容量和存取时间的存储器,采用合适的寻址模式;选取合适的接口电路并确保正确的连接和配置。另一方面,该芯片的集成功能较多,系统出现问题时,定位比较困难。但该方案不依赖PC或高档单片机,实现8位机直接接入Internet;所需外围器件少,系统成本低;开发周期较短,开发成本相对较低,具有实际应用价值。

    时间:2006-05-09 关键词: 远程监控系统 网络单片机 51内核

  • 利用串口与并口实现51内核单片机的在线编程

    利用串口与并口实现51内核单片机的在线编程

    摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。关键词:并口编程 串口通信 在线编程 ISP MTV230 W78E516B 引 言1 在线编程简介  51内核的单片机在线编程模式一般分为两大类。一类是使用JTAG协议的在线编程模式。这类模式一般由厂家提供在线编程工具,使用方便。使用这一类模式的单片机价格往往较高,使用的厂商也不多,故不在本文的讨论之列。另一类在线编程模式是使用一条特殊的指令,使单片机进入在线编程模式。在进入在线编程模式后,要自己控制对单片机的擦除写入逻辑。这一类模式又可细分为两种不同的模式:一是进入在线编程模式后,单片机只是提供一个接口,不再运行用户的程序,擦写逻辑全由上位机(PC)提供,如以下要讨论的MTV230就属于这种模式;另一类是进入在线编程模式以后,芯片会运行在某一区域的用户编写的程序,芯片的编程逻辑都由芯片中这段程序控制,上位机(PC)只是作为单片机的一个数据源,向单片机传输要擦写的数据,如以下要讨论的W78E516B。2 利用并口对MTV230在线编程的实现2.1 MTV230简介  MTV230是由Myson公司出品的一块集成OSD功能的基于51内核的芯片。它使用12MHz晶振时可以设置为倍频工作,同时还集成了4路A/D和4路PWM DAC。其中最具竞争力的便是它使用了Flash OSD字库。与一般的OSD芯片不同,它的字库不是掩膜在芯片中,用户可以自己定制。该款芯片可以满足视频应用中的控制需求,因而被广泛应用于视频类产品中。2.2 MTV230在线编程模式的进入  要使MTV230具有在线编程的功能,可以添加一段程序在主应用程序中。该程序用来响应特定的单片机状态,如某一特定引脚的电平变化,或是串口接收到特定的字符以确定是否要进入在线编程模式。在执行以下程序后,MTV230可以进入在线编程模式[1]:① 清看门狗,以防止在编程期间单片机被复位;② 单片机的在线编程模式是在空闲状态(idle)下进行的,所以要关闭所有中断,防止单片机被唤醒;③ 由于MTV230在线编程时是作为I2C的从设备,因而要配置单片机的I2C从地址;④ 向ISPEN写入0x93,使能在线编程功能;⑤ 进入51的空闲模式,在线编程开始。具体程序如下:WDT=0; //1IE=0; //2ISPSLV=0x7C; //3ISPEN=0x93; //4PCON=0x01; //5   以上程序中1~5与上述说明对应。以上将I2C地址设置为0x7C。值得注意的是,设置I2C从地址时,最低两位无效[1]。执行完以上程序,单片机已经变为一个I2C从设备,将I2C中SCL与芯片的15脚相连,SDA与芯片的16脚相连,就可以用I2C协议,按一定的命令格式对芯片进行在线编程。命令格式详见参考文献[1],在此不再赘述。2.3 PC机I2C接口的实现  对MTV230进行在线编程,就要实现I2C通信协议。作为对MTV230进行编程的上位机PC来说,实现I2C有三种方法:① 使用串口与单片机通信,再由单片机模拟I2C协议,成本高,I2C速度视使用的单片机而定;② 对计算机的并口编程,模拟I2C协议,成本低,I2C速度一般;③ 使用USB接口实现I2C协议,成本高,I2C速度快市场上可以买到。  由于MTV230进行编程时,I2C时钟速度最高为140kHz,速度要求不高,同时考虑到成本,决定使用方案②。2.4 并口I2C硬件的实现  由于并口的每个引脚都是单向的,只能单向输出或者单向输入;而I2C又是一个双向协议,SDA与SCL都要求既能输入又能输出(有时要获取SCL当前状态),所以,SDA与SCL要分别各由一个输出引脚与一个输入引脚构成。为了增加并口的驱动能力与可靠性,设计电路如图1所示。其中并口的2、12引脚构成SDA脚,并口的3、10引脚构成SCL脚。       2.5 并口I2C软件的实现  在Win98中对并口的编程非常简单,通过在VC中内嵌汇编,使用IN与OUT指令访问与并口相对应的端口,设置相对应端口的值中的位就可以控制相应并口引脚的高低电平值。例如:要将计算机并口1的第2引脚先置高再置低,汇编语言可以这样写:MOV DX , 0x378 ;设置端口地址MOV AL , 1 ;将待写入的位0的值写入AL中OUT DX , AL ;将值送到相应端口MOV AL , 0 OUT DX , AL   但在Win2000/XP中,由于系统加强了对硬件设备的保护,假如在程序中直接用IN与OUT指令访问并口,则会引发系统的非法操作;而并口访问又不像串口,直接可以使用Windows API函数,因而就必须使用驱动程序。可以到www.sstnet.com网站上去下载DriverLINX Port I/O Driver并口驱动程序。该程序可以免费复制与分发。有了这个驱动程序,在Win2000/XP下编写并口程序就十分方便。安装该驱动程序后,在程序中包含相应的dlportio.h与dlportio.lib后就可以用DlPortReadPortUchar(IN ULONG Port)来读取端口的值(相当于汇编中的IN指令),用DlPortWritePortUchar(IN ULONG Port,IN UCHAR Value)来向一个端口写一个特定的值(相当于汇编中的OUT指令)。利用改变端口值中的一个位的值,可以使相应并口引脚输出高低电平,从而可以用其来模拟I2C协议,实现并口与单片机间的I2C通信。关于I2C协议,网上有很多资料,在此不再赘述。2.6 程序说明  如前文所述,MTV230在进入在线编程模式后,就相当于一个I2C从设备,编程逻辑全都由在PC上运行的程序来实现。该程序采用VC6.0编写。编程程序的主界面如图2所示,主要模块如表1所列。由于用并口模拟I2C对单片机编程,会使该线程暂时处在阻塞状态,假如在主线程(UI)中实现该过程,则在对芯片编程时,程序的主界面就无法响应用户退出命令,所以采用了多线程程序结构,在一个工作线程实现该过程,使用户可以随时退出编程过程。            表1所列的头三个类采用了层次设计结构:上层类调用下层类,下层类为上层类提供接口,这样设计保证了代码的最大可重用性。举例来说,假如有另一芯片同样是使用I2C接口进行在线编程,则只要重写MTVISP这个芯片的在线编程协议类就可以了;如果使用前面所述的并口实现方案1或3,只要重写最底层的Parallel类便可。          程序工作线程的大致流程如图3所示。          程序的特色:① 可以自己设置I2C速度的高低,模拟I2C的并口地址,以及使用并口的引脚。② 可以选择简单校验和完全校验,即对编程后的芯片是进行内部校验寄存器值的简单校验,还是将芯片中的内容全部读出与编程文件进行比较的完全校验。③ 可以对芯片内的程序区、OSD区进行编程,还可以读出这两区的数据(只有对可以设定进入在线编 程模式的程序才可以)。④ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。3 利用串口对W78E516B在线编程的实现3.1 W78E516B简介  W78E516B是由Winbound公司出品的基于52内核的高性能芯片,外部晶振可以达到40MHz,内部具有64KB的程序区与4KB的引导程序区,以及256B的RAM区和256B的AUX-RAM区。AUX-RAM区相当于外部存储区,进行寄存器设置后,用MOVX指令进行访问。在Keil编译器中,进行相应的设置便可使用pdata类型变量访问。3.2 W78E516B在线编程模式的进入  W78E516B在线编程模式的进入可以分为两种模式:一种为软件模式,另一种为硬件模式。当芯片进入在线编程模式后,芯片会从现在的64KB程序区跳转到4KB的引导区的0x00地址处去执行程序。如前文所述,该类型芯片的在线编程逻辑都是由在这4KB引导区中的程序决定的,而上位机(PC)只是为在线编程提供一个数据源。(1)软件进入模式① 向CHPERN寄存器依此写入0x87,0x59开启CHPCON寄存器的写模式。② 关闭中断。③ 向CHPCON写入0x03表示进行程序区编程。④ 向CHPCRN写入0x00关闭CHPCON寄存器写模式。⑤ 设置好定时器为延时12μs引发中断。⑥ 将单片机转入空闲模式,开启中断。例如:将以下程序嵌入主循环中,当串口收到字符“A”时便进入在线编程模式:if(B_Temp==‘A’{//B_Temp中存放从串口接收到的数TR0=0; //停止定时器TH0=TL0=256-250; //设置定时器定时值CHPENR = 0x87; //开启CHPCON写模式CHPENR = 0x59;CHPCON|=0x03; //开启编程功能CHPENR=0x00; //关闭CHPCON写模式TR0=1; //开启定时器PCON=0x01; //转入空闲模式} (2)硬件进入模式  如表2所列,将相应引脚设置为相应电平,在进行复位以后也可进入在线编程模式。值的注意的是,在芯片正常工作时应避免误入在线编程模式,否则后果不堪设想。表2中L代表低电平,X代表任意电平。              3.3 W78E516B在线编程的实现(1)单片机引导区程序  W78E516B在线编程逻辑主要在这部分程序中实现。在参考文献[2]中的最后有一个示例程序,它是从外部的SRAM中读取数据对64KB程序区进行编程。将其改写一下,变为从串口读入数据。对程序区进行更新,大致流程与示例程序相同,代码也大致相同。有兴趣的朋友可以自行阅读文献[2]中的程序源文件,在此只列出关键的更改处:;使用24MHz晶振;使用WAVE编译程序;其中R3存有待写入数据字节数-1的高16位;其中R4存有待写入数据字节数-1的低16位JMP PROG_D_64KPADJUEST:INC R2 ;将低位地址增加1CJNE R2,#00H,PROG_D_64KINC R1 ;低位进位时将高位增加1MOV SFRAH,R1 ;改变高位地址PROG_D_64K:MOV SFRAL,R2 ;将低位地址放入JNB RI,$ ;从串口接收一个待写入的字节MOV A,SBUFCLR RIMOV SFRFD,A ;将待写入的值放入MOV TCON,#10H ;开启定时器MOV PCON,#01H ;CPU进入IDLE状态(进行编程)CLR C ; 比较R3、R4,看是否写入完成MOV A,R4SUBB A,R2JNZ PADJUESTCLR CMOV A,R3SUBB A,R1JNZ PADJUEST(2)PC机程序  PC机程序为单片机提供一个数据源。该数据是通过PC机的串口进行数据传输的。程序由VC6.0编写,串口通信使用的是VC自带的串口控件MSCOMM。由于MSCOMM的接收数据是以消息形式,同时在该程序中接收的数据量很小,而发送数据为阻塞模式,所以新开一个工作线程用于发送数据,而接收数据与主线程合并。程序整体采用状态机模式。单片机进行擦除、编程、校验等各个状态时,都通过串口向PC机发送状态字,PC机通过接收状态字来决定单片机现在的工作状态,并决定要向单片机提供的数据。同时主线程中有一定时器,假如在特定时间内单片机无应答,或应答有误,则报错,停止单片机的编程过程。值得注意的是,由于使用了MSCOMM控件,在未装VC6.0的机器上运行该程序要将源文件SYSTEM目录中的三个文件拷贝到system32系统目录下。程序主界面如图4所示。PC机与单片机通信的工作流程如图5所示。                        程序特色:① 可以设定使用的串口与通信的波特率。(与其相应的4KB引导区中的程序也要相应修改)。② 可以设定使单片机进入在线编程模式的字符命令。③ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。4 结 论  使用并口模拟I2C程序可以方便地对板上的MTV230芯片进行在线编程,使用串口为W78E516B提供数据源也可方便地对其进行编程,两者均经过实践检验,程序完全达到预期目的。使用芯片的在线编程技术,方便了芯片程序的更新,降低了产品的维护成本。

    时间:2006-04-27 关键词: 并口 编程 串口 51内核

  • 利用串口与并口实现51内核单片机的在线编程

    摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。关键词:并口编程 串口通信 在线编程 ISP MTV230 W78E516B 引 言1 在线编程简介  51内核的单片机在线编程模式一般分为两大类。一类是使用JTAG协议的在线编程模式。这类模式一般由厂家提供在线编程工具,使用方便。使用这一类模式的单片机价格往往较高,使用的厂商也不多,故不在本文的讨论之列。另一类在线编程模式是使用一条特殊的指令,使单片机进入在线编程模式。在进入在线编程模式后,要自己控制对单片机的擦除写入逻辑。这一类模式又可细分为两种不同的模式:一是进入在线编程模式后,单片机只是提供一个接口,不再运行用户的程序,擦写逻辑全由上位机(PC)提供,如以下要讨论的MTV230就属于这种模式;另一类是进入在线编程模式以后,芯片会运行在某一区域的用户编写的程序,芯片的编程逻辑都由芯片中这段程序控制,上位机(PC)只是作为单片机的一个数据源,向单片机传输要擦写的数据,如以下要讨论的W78E516B。2 利用并口对MTV230在线编程的实现2.1 MTV230简介  MTV230是由Myson公司出品的一块集成OSD功能的基于51内核的芯片。它使用12MHz晶振时可以设置为倍频工作,同时还集成了4路A/D和4路PWM DAC。其中最具竞争力的便是它使用了Flash OSD字库。与一般的OSD芯片不同,它的字库不是掩膜在芯片中,用户可以自己定制。该款芯片可以满足视频应用中的控制需求,因而被广泛应用于视频类产品中。2.2 MTV230在线编程模式的进入  要使MTV230具有在线编程的功能,可以添加一段程序在主应用程序中。该程序用来响应特定的单片机状态,如某一特定引脚的电平变化,或是串口接收到特定的字符以确定是否要进入在线编程模式。在执行以下程序后,MTV230可以进入在线编程模式[1]:① 清看门狗,以防止在编程期间单片机被复位;② 单片机的在线编程模式是在空闲状态(idle)下进行的,所以要关闭所有中断,防止单片机被唤醒;③ 由于MTV230在线编程时是作为I2C的从设备,因而要配置单片机的I2C从地址;④ 向ISPEN写入0x93,使能在线编程功能;⑤ 进入51的空闲模式,在线编程开始。具体程序如下:WDT=0; //1IE=0; //2ISPSLV=0x7C; //3ISPEN=0x93; //4PCON=0x01; //5   以上程序中1~5与上述说明对应。以上将I2C地址设置为0x7C。值得注意的是,设置I2C从地址时,最低两位无效[1]。执行完以上程序,单片机已经变为一个I2C从设备,将I2C中SCL与芯片的15脚相连,SDA与芯片的16脚相连,就可以用I2C协议,按一定的命令格式对芯片进行在线编程。命令格式详见参考文献[1],在此不再赘述。2.3 PC机I2C接口的实现  对MTV230进行在线编程,就要实现I2C通信协议。作为对MTV230进行编程的上位机PC来说,实现I2C有三种方法:① 使用串口与单片机通信,再由单片机模拟I2C协议,成本高,I2C速度视使用的单片机而定;② 对计算机的并口编程,模拟I2C协议,成本低,I2C速度一般;③ 使用USB接口实现I2C协议,成本高,I2C速度快市场上可以买到。  由于MTV230进行编程时,I2C时钟速度最高为140kHz,速度要求不高,同时考虑到成本,决定使用方案②。2.4 并口I2C硬件的实现  由于并口的每个引脚都是单向的,只能单向输出或者单向输入;而I2C又是一个双向协议,SDA与SCL都要求既能输入又能输出(有时要获取SCL当前状态),所以,SDA与SCL要分别各由一个输出引脚与一个输入引脚构成。为了增加并口的驱动能力与可靠性,设计电路如图1所示。其中并口的2、12引脚构成SDA脚,并口的3、10引脚构成SCL脚。       2.5 并口I2C软件的实现  在Win98中对并口的编程非常简单,通过在VC中内嵌汇编,使用IN与OUT指令访问与并口相对应的端口,设置相对应端口的值中的位就可以控制相应并口引脚的高低电平值。例如:要将计算机并口1的第2引脚先置高再置低,汇编语言可以这样写:MOV DX , 0x378 ;设置端口地址MOV AL , 1 ;将待写入的位0的值写入AL中OUT DX , AL ;将值送到相应端口MOV AL , 0 OUT DX , AL   但在Win2000/XP中,由于系统加强了对硬件设备的保护,假如在程序中直接用IN与OUT指令访问并口,则会引发系统的非法操作;而并口访问又不像串口,直接可以使用Windows API函数,因而就必须使用驱动程序。可以到www.sstnet.com网站上去下载DriverLINX Port I/O Driver并口驱动程序。该程序可以免费复制与分发。有了这个驱动程序,在Win2000/XP下编写并口程序就十分方便。安装该驱动程序后,在程序中包含相应的dlportio.h与dlportio.lib后就可以用DlPortReadPortUchar(IN ULONG Port)来读取端口的值(相当于汇编中的IN指令),用DlPortWritePortUchar(IN ULONG Port,IN UCHAR Value)来向一个端口写一个特定的值(相当于汇编中的OUT指令)。利用改变端口值中的一个位的值,可以使相应并口引脚输出高低电平,从而可以用其来模拟I2C协议,实现并口与单片机间的I2C通信。关于I2C协议,网上有很多资料,在此不再赘述。2.6 程序说明  如前文所述,MTV230在进入在线编程模式后,就相当于一个I2C从设备,编程逻辑全都由在PC上运行的程序来实现。该程序采用VC6.0编写。编程程序的主界面如图2所示,主要模块如表1所列。由于用并口模拟I2C对单片机编程,会使该线程暂时处在阻塞状态,假如在主线程(UI)中实现该过程,则在对芯片编程时,程序的主界面就无法响应用户退出命令,所以采用了多线程程序结构,在一个工作线程实现该过程,使用户可以随时退出编程过程。            表1所列的头三个类采用了层次设计结构:上层类调用下层类,下层类为上层类提供接口,这样设计保证了代码的最大可重用性。举例来说,假如有另一芯片同样是使用I2C接口进行在线编程,则只要重写MTVISP这个芯片的在线编程协议类就可以了;如果使用前面所述的并口实现方案1或3,只要重写最底层的Parallel类便可。          程序工作线程的大致流程如图3所示。          程序的特色:① 可以自己设置I2C速度的高低,模拟I2C的并口地址,以及使用并口的引脚。② 可以选择简单校验和完全校验,即对编程后的芯片是进行内部校验寄存器值的简单校验,还是将芯片中的内容全部读出与编程文件进行比较的完全校验。③ 可以对芯片内的程序区、OSD区进行编程,还可以读出这两区的数据(只有对可以设定进入在线编 程模式的程序才可以)。④ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。3 利用串口对W78E516B在线编程的实现3.1 W78E516B简介  W78E516B是由Winbound公司出品的基于52内核的高性能芯片,外部晶振可以达到40MHz,内部具有64KB的程序区与4KB的引导程序区,以及256B的RAM区和256B的AUX-RAM区。AUX-RAM区相当于外部存储区,进行寄存器设置后,用MOVX指令进行访问。在Keil编译器中,进行相应的设置便可使用pdata类型变量访问。3.2 W78E516B在线编程模式的进入  W78E516B在线编程模式的进入可以分为两种模式:一种为软件模式,另一种为硬件模式。当芯片进入在线编程模式后,芯片会从现在的64KB程序区跳转到4KB的引导区的0x00地址处去执行程序。如前文所述,该类型芯片的在线编程逻辑都是由在这4KB引导区中的程序决定的,而上位机(PC)只是为在线编程提供一个数据源。(1)软件进入模式① 向CHPERN寄存器依此写入0x87,0x59开启CHPCON寄存器的写模式。② 关闭中断。③ 向CHPCON写入0x03表示进行程序区编程。④ 向CHPCRN写入0x00关闭CHPCON寄存器写模式。⑤ 设置好定时器为延时12μs引发中断。⑥ 将单片机转入空闲模式,开启中断。例如:将以下程序嵌入主循环中,当串口收到字符“A”时便进入在线编程模式:if(B_Temp==‘A’{//B_Temp中存放从串口接收到的数TR0=0; //停止定时器TH0=TL0=256-250; //设置定时器定时值CHPENR = 0x87; //开启CHPCON写模式CHPENR = 0x59;CHPCON|=0x03; //开启编程功能CHPENR=0x00; //关闭CHPCON写模式TR0=1; //开启定时器PCON=0x01; //转入空闲模式} (2)硬件进入模式  如表2所列,将相应引脚设置为相应电平,在进行复位以后也可进入在线编程模式。值的注意的是,在芯片正常工作时应避免误入在线编程模式,否则后果不堪设想。表2中L代表低电平,X代表任意电平。              3.3 W78E516B在线编程的实现(1)单片机引导区程序  W78E516B在线编程逻辑主要在这部分程序中实现。在参考文献[2]中的最后有一个示例程序,它是从外部的SRAM中读取数据对64KB程序区进行编程。将其改写一下,变为从串口读入数据。对程序区进行更新,大致流程与示例程序相同,代码也大致相同。有兴趣的朋友可以自行阅读文献[2]中的程序源文件,在此只列出关键的更改处:;使用24MHz晶振;使用WAVE编译程序;其中R3存有待写入数据字节数-1的高16位;其中R4存有待写入数据字节数-1的低16位JMP PROG_D_64KPADJUEST:INC R2 ;将低位地址增加1CJNE R2,#00H,PROG_D_64KINC R1 ;低位进位时将高位增加1MOV SFRAH,R1 ;改变高位地址PROG_D_64K:MOV SFRAL,R2 ;将低位地址放入JNB RI,$ ;从串口接收一个待写入的字节MOV A,SBUFCLR RIMOV SFRFD,A ;将待写入的值放入MOV TCON,#10H ;开启定时器MOV PCON,#01H ;CPU进入IDLE状态(进行编程)CLR C ; 比较R3、R4,看是否写入完成MOV A,R4SUBB A,R2JNZ PADJUESTCLR CMOV A,R3SUBB A,R1JNZ PADJUEST(2)PC机程序  PC机程序为单片机提供一个数据源。该数据是通过PC机的串口进行数据传输的。程序由VC6.0编写,串口通信使用的是VC自带的串口控件MSCOMM。由于MSCOMM的接收数据是以消息形式,同时在该程序中接收的数据量很小,而发送数据为阻塞模式,所以新开一个工作线程用于发送数据,而接收数据与主线程合并。程序整体采用状态机模式。单片机进行擦除、编程、校验等各个状态时,都通过串口向PC机发送状态字,PC机通过接收状态字来决定单片机现在的工作状态,并决定要向单片机提供的数据。同时主线程中有一定时器,假如在特定时间内单片机无应答,或应答有误,则报错,停止单片机的编程过程。值得注意的是,由于使用了MSCOMM控件,在未装VC6.0的机器上运行该程序要将源文件SYSTEM目录中的三个文件拷贝到system32系统目录下。程序主界面如图4所示。PC机与单片机通信的工作流程如图5所示。                        程序特色:① 可以设定使用的串口与通信的波特率。(与其相应的4KB引导区中的程序也要相应修改)。② 可以设定使单片机进入在线编程模式的字符命令。③ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。4 结 论  使用并口模拟I2C程序可以方便地对板上的MTV230芯片进行在线编程,使用串口为W78E516B提供数据源也可方便地对其进行编程,两者均经过实践检验,程序完全达到预期目的。使用芯片的在线编程技术,方便了芯片程序的更新,降低了产品的维护成本。

    时间:2005-12-19 关键词: 并口 编程 串口 51内核

  • 51内核8位单片机MAX7651的开发环境

        摘要:介绍一种基于四时钟周期、高速8051内核的混合信号8位单片机MAX7651。探讨在开发基于MAX7651的应用系统时所面临的问题,并推荐相应的解决方案。     关键词:MAX7651 AT89LV55 8XC51RA/RB/RC ALL-07 Flash 四时钟周期 在全球8位单片机领域,英特尔(Intel)生产的MCS-51系列是毋庸质疑的领导者。借助英特尔广泛的授权行为,基于8051内核的8位单片机兼容产品早已根深叶茂。Dallas Semiconductor通过改良、优化传统的8051内核,开发出了高速、四时钟周期和单时钟周期8051内核,并在此基础上推出了一系列高速8位单片机。Maxim利用高速、四时钟周期8051内核开发出的第一款混合信号单片机MAX7651,内部集成了12位ADC、8位DAC以及16KB的Flash存储器,非常适合便携式设备应用。 1 MAX7651简介 ??MAX7651内部集成了一个完全的12位、8通道ADC、2通道DAC、3个定时/计数器、16KB Flash存储器以及一个兼容于工业标准8051的四时钟周期高速内核。其它特性包括:256字节RAM、4个8位I/O口、2个异步串行口、1个中断控制器以及独立的看门狗定时器,如图1所示。 ??MAX7651内部12位ADC具有可编程增益调节和独立的采样保持器。转换速率可达53ksps,8个输入通道可以配置为8个独立的单端信号输入或者4个差分信号输入。单片机通过特殊功能寄存器(SFR)ADCON控制模数转换的工作模式,转换结果存放在ADDAT0和ADDAT1两个寄存器中。图1 MAX8651内部功能框图2 MAX7651软件开发工具 ??MAX7651的程序指令集与8051系列完全兼容,具有广泛的第三方开发软件工具支持。比较著名的软件工具包括:Franklin公司的A51/C51、Keil公司的A51/C51以及Metalink公司的A51等汇编工具软件。笔者一直使用Keil公司的A51/C51,最新版本号是μP51V7.01。该版本C51已经具备MAX7651的头文件reg51ex.h,位于C51目录。如果需要使用A51宏汇编程序,用户要自己编制inc头文件。笔者已经完成reg7651.inc头文件,只需要将它拷贝到C51目录下即可随时调用。 ??reg7651.inc头文件见本刊网络补充版(http://www.dpj.com.cn)。 ??Keil C51同时提供软件模拟调试器功能。对于开发者来说,可以对应用程序进行小范围的分区模拟测试,十分方便小型应用程序的开发,不需要专用的硬件仿真器。 3 MAX7651硬件仿真调试工具 ??目前,并没有专用的硬件仿真器完全支持MAX7651源程序仿真,主要是不能支持内部模数转换功能。在我国市场上,笔者认为Micetek公司的EasyPack/E II 8052F和Insight公司的ME-52/ME-52 Plus是性价比较高的。特别是EasyPack/E II 8052F能够支持实时的源程序调试,用户界面非常友好,用它可以仿真MAX7651的绝大部分功能。注意:一般的仿真器只提供标准的40-DIP双列直插插座,用户必须自己制作64-TQFP(MAX7651)到40-DIP转换的插座适配器。4 MAX7651的内部Flash编程 ??目前市面上没有硬件编程器直接支持MAX7651 Flash编程。可以采取一些简单措施解决这个问题,因为8051系列单片机都采用Intel标准的定时时序来编程器件内部存储器,MAX7651也不例外。MAX7651具有16KB的内部Flash,但是结构上与大多数单片机不同。它分为两个8KB的存储区,每个存储区又分为128个64字节的页面。 ??MAX7651支持两种Flash编程模式。第一种是在应用中编程,假定应用程序在某一个8KB的存储区内运行,并且保证程序只局限在这个8KB的存储区内运行,可以通过这种方式编程另一个8KB Flash存储区。MAX7651具有四个特殊功能寄存器(EEAL、EEAH、EEDAT、EESTCMD),用于实现此项功能。这里,可以将程序存储器作为数据存储器使用,用户不需要额外扩展数据存储器空间。第二种编程模式是,采用外部编程器的并行接口进行编程。目前我国市场比较通用的编程器有:台湾河洛公司的ALL-07和ALL-11P2、Xeltek公司的Superpro/680和Superpro/V等。其中ALL-07编程器目前支持的器件数目可达5000种以上,但是目前它并不直接支持MAX7651,可通过以下简单方法解决这个问题: ① 经过分析Atmel的AT89LV55以及Intel的8XC51RB两种单片机外部编程条件和时序可知,其与MAX7651几乎完全相同。从AT89LV55的外部编程条件(见表1)和硬件接线图(见图2)来看,唯一不同的是二者采用了不同的编程电压。    ② 制作64-TQFP与40-DIP插座适配器,详细原理图请参考本刊网络补充版(http://www.dpj.com.cn)。请注意P2.5和P3.3的处理方式以及/VPP引脚可以直接与VCC相连接,也可以通过低压差线性稳压器与编程器连接。 ③ 打开ALL-07,连接MAX7651。在ALL-07程序界面中选择AT89LV55或者87C51RB器件选项就可以直接编程MAX7651。注意:如果使用87C51RB,那么不能使用编程密码阵列命令;如果使用AT89LV55,必须设置编程最高地址空间为3FC0H,而不是3FFFH。 结 语 ??MAX7651是业界高性能混合工艺单片机的典型器件,可以极大降低模拟应用的设计难度。它的小封装、低功耗和高速特性非常适合便携式和嵌入式系统设计。Maxim拥有新一代的高速、低功耗8位和16位单片机内核技术,正在设计和规划更多的混合工艺单片机产品。

    时间:2004-12-05 关键词: Max 8位单片机 7651 51内核

发布文章

技术子站

更多

项目外包