利用串口与并口实现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 电路如图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函数,因而就必须使用驱动程序。可以到网站上去下载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提供数据源也可方便地对其进行编程,两者均经过实践检验,程序完全达到预期目的。使用芯片的在线编程技术,方便了芯片程序的更新,降低了产品的维护成本。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』