利用串口与并口实现51内核单片机的在线编程
时间:11-05
来源:互联网
点击:
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可以进入在线编程模式:
① 清看门狗,以防止在编程期间单片机被复位;
② 单片机的在线编程模式是在空闲状态(idle)下进行的,所以要关闭所有中断,防止单片机被唤醒;
③ 由于MTV230在线编程时是作为I2C的从设备,因而要配置单片机的I2C从地址;
④ 向ISPEN写入0x93,使能在线编程功能;
⑤ 进入51的空闲模式,在线编程开始。
具体程序如下:
WDT=0; //1
IE=0; //2
ISPSLV=0x7C; //3
ISPEN=0x93; //4
PCON=0x01; //5
以上程序中1"5与上述说明对应。以上将I2C地址设置为0x7C。值得注意的是,设置I2C从地址时,最低两位无效。执行完以上程序,单片机已经变为一个I2C从设备,将I2C中SCL与芯片的15脚相连,SDA与芯片的16脚相连,就可以用I2C协议,按一定的命令格式对芯片进行在线编程。命令格式详见参考文献,在此不再赘述。
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脚。
![](../img/eec-mcu/mcu-169111aydedtifjlw.jpg)
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)中实现该过程,则在对芯片编程时,程序的主界面就无法响应用户退出命令,所以采用了多线程程序结构,在一个工作线程实现该过程,使用户可以随时退出编程过程。
![](../img/eec-mcu/mcu-169114ypuo5tw1v44.jpg)
表1所列的头三个类采用了层次设计结构:上层类调用下层类,下层类为上层类提供接口,这样设计保证了代码的最大可重用性。举例来说,假如有另一芯片同样是使用I2C接口进行在线编程,则只要重写MTVISP这个芯片的在线编程协议类就可以了;如果使用前面所述的并口实现方案1或3,只要重写最底层的Parallel类便可。
![](../img/eec-mcu/mcu-169116tfj21tyy5il.jpg)
程序工作线程的大致流程如图3所示。
![](../img/eec-mcu/mcu-169117pskhdrqvdta.jpg)
程序的特色:
① 可以自己设置I2C速度的高低,模拟I2C的并口地址,以及使用并口的引脚。
② 可以选择简单校验和完全校验,即对编程后的芯片是进行内部校验寄存器值的简单校验,还是将
芯片中的内容全部读出与编程文件进行比较的完全校验。
③ 可以对芯片内的程序区、OSD区进行编程,还可以读出这两区的数据(只有对可以设定进入在线编 程模式的程序才可以)。
④ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。
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可以进入在线编程模式:
① 清看门狗,以防止在编程期间单片机被复位;
② 单片机的在线编程模式是在空闲状态(idle)下进行的,所以要关闭所有中断,防止单片机被唤醒;
③ 由于MTV230在线编程时是作为I2C的从设备,因而要配置单片机的I2C从地址;
④ 向ISPEN写入0x93,使能在线编程功能;
⑤ 进入51的空闲模式,在线编程开始。
具体程序如下:
WDT=0; //1
IE=0; //2
ISPSLV=0x7C; //3
ISPEN=0x93; //4
PCON=0x01; //5
以上程序中1"5与上述说明对应。以上将I2C地址设置为0x7C。值得注意的是,设置I2C从地址时,最低两位无效。执行完以上程序,单片机已经变为一个I2C从设备,将I2C中SCL与芯片的15脚相连,SDA与芯片的16脚相连,就可以用I2C协议,按一定的命令格式对芯片进行在线编程。命令格式详见参考文献,在此不再赘述。
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脚。
![](../img/eec-mcu/mcu-169111aydedtifjlw.jpg)
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)中实现该过程,则在对芯片编程时,程序的主界面就无法响应用户退出命令,所以采用了多线程程序结构,在一个工作线程实现该过程,使用户可以随时退出编程过程。
![](../img/eec-mcu/mcu-169114ypuo5tw1v44.jpg)
表1所列的头三个类采用了层次设计结构:上层类调用下层类,下层类为上层类提供接口,这样设计保证了代码的最大可重用性。举例来说,假如有另一芯片同样是使用I2C接口进行在线编程,则只要重写MTVISP这个芯片的在线编程协议类就可以了;如果使用前面所述的并口实现方案1或3,只要重写最底层的Parallel类便可。
![](../img/eec-mcu/mcu-169116tfj21tyy5il.jpg)
程序工作线程的大致流程如图3所示。
![](../img/eec-mcu/mcu-169117pskhdrqvdta.jpg)
程序的特色:
① 可以自己设置I2C速度的高低,模拟I2C的并口地址,以及使用并口的引脚。
② 可以选择简单校验和完全校验,即对编程后的芯片是进行内部校验寄存器值的简单校验,还是将
芯片中的内容全部读出与编程文件进行比较的完全校验。
③ 可以对芯片内的程序区、OSD区进行编程,还可以读出这两区的数据(只有对可以设定进入在线编 程模式的程序才可以)。
④ 进行烧写的文件支持二进制文件格式(*.bin)与Intel的Hex文件格式(*.hex)。
单片机 PWM DAC 看门狗 USB 电路 Keil 相关文章:
- 单片机智能频率信号装置(11-25)
- 单片机在医学信号检测仪中的应用(02-07)
- 单片机应用编程技巧(02-25)
- DSP与单片机通信的多种方案设计(03-08)
- 单片机与PC机串行通信的实现方法 (02-25)
- 单片机与PC通信的简化接口 (05-11)