单片机课程设计-ATMEL51系列单片机编程器

发布者:zhihua最新更新时间:2015-05-15 来源: 51hei关键字:单片机  ATMEL51系列  编程器 手机看文章 扫描二维码
随时随地手机看文章
用单片设计过很多东西,可以说把AT单片机(包括AVR单片机)的所有外设资源都使用过了,所以在寻思着要设计一个什么样的东东??

  有次去面试,我对面试官说我设计过一块开发板,然后那面试官直接问了个核心问题:这个编程器的固件是你自己写的吗?一下子就问到了痛处。是的,编程器固件不是自己写的,那为什么不自己设计一个呢? 我说的自己设计是包括硬件电路、单片机程序以及电脑端界面等等所有东西全部自己DIY。当一个真正的DIYer。所以我动手了,用了几天几夜时间弄了一个可以支持两种芯片(AT89S51 AT89S52)
的基于ISP下载的编程器
  首先要说的是,要设计个编程器, 这方面的资料在网上基本是找不到的,估计是大家不想开源(open source code)...所以必须自己按照某一芯片的官方数据手册慢慢搞懂它的下载协议,然后写成固件。


  STEP 1. 研究数据手册
  首先找了一份S52芯片的中文数据手册,一看傻了眼,翻译得很垃圾,垃圾还不要紧,最重要是里面把关于FLASH编程的章节直接忽略掉了。。想看都没得看。没办法,那就直接研究英文数据手册算了,用了一天多时间认真把数据手册看懂。。这里本人一直有个误区,从大一的时候开始就以为S52会有256B的用户RAM,比S51高级,其实不是,S52也只有128B内存,FLASH容量比S51多4KB也就是8KB。。谨记谨记。。或者你可以选择接入外部RAM,不过这会浪费掉你至少16个IO口用来做数据及地址总线,而且还要加外一个地址锁存器用来复用本来就不够用的IO口,而汇编指令中的MOVX就是用来操作外部RAM的。OK数据手册研究完毕(还算幸运的,因为S52的数据手册只有30多页)。


 

 

 

  STEP 2. HEX文件的本来面目以及怎样将HEX文件转换成机器码

  之前我一直以为HEX文件就像镜像文件一样对应着单片机FLASH的每一个数据,然后烧录软件LOAD程序的时候是直接将HEX文件里面的数据一个一个输入到单片机的FLASH中,又来了个误区,事实情况却不是这样的。正解是:HEX文件是一种用ASCII编码的文件,就是说里面的数据都是字符来的,比如说里面记录了一个地址为0X00EF的话,如果按照二进制格式应该是:0000 0000 1110 1111 这样记录的,但HEX采用了ASCII字符编码,直接在里面写成:‘0’ ‘0’ ‘E’ ‘F’ (这是ASCII字符!!!)。基于这个原理,要想正确下载程序就必须写一个HEX->机器码转换算法,将HEX文件转换成机器码。用了几个小时就把算法搞定。具体实现过程就不说了,想了解的可以直接找我聊啦,总之最后结果就是我实现了一个 HEX_Translate(char *Input,char *Output)函数搞定[page]


  STEP 3. 实现硬件电路

    其实硬件电路很简单,打算用串口跟电脑端进行通信,然后使用一片S52做为主控芯片,通过ISP接口给另一片单片机下载程序。用了一个晚上时间用万用板把电路搭建起来,里面用了一片MAX232作电平转换,转换后的电平输给S52,S52接出几只IO口给对应的被下载芯片的ISP引脚,包括MISO MOSI SCK 以及复位端RST。硬件就是这么简单这么傻,下图:



 

 


  STEP 4. 编写固件

  可以说这个设计的90%的工作就是在写代码,包括单片机代码以及电脑烧录软件代码,其中单片机用C语言编写,电脑界面用C++编写(所以必须有一点WINDOWS应用程序编程基础)。

  烧写单片机的工作流程其实就是->把复位脚接高,然后送入四个字节码,让它进入编程模式,然后根据协议要求一个一个把数据送进去。我在KEIL上实现了几个最基本的操作函数,比如要擦除芯片就调用:unsigned char Pro_51_Erase(void),如果芯片擦除成功就会返回OK(宏定义,值为1),当然了,在开始工作之前都必须检查芯片是否能使用,所以每次烧写之前都要使用unsigned char Pro_51_CheckChip(void)检查被烧芯片是否工作正常的话就返回OK。等等等等,不再赘述。

  实现了基本的操作函数,接下来就要考虑主控单片机要怎样跟电脑进行通信了,使用串口通信,我的做法是自己制定一个简单的传送协议,该协议的第一个字节是指令,接下来的字节可以是地址,数据等等,做成一个数据帧,帧的大小随指令作用不同而异。然后单片机使用串口中断接收,因为主控单片机在给另一个单片机烧写的时候会费时间,为了防止电脑端送过来的数据得不到及时处理而发生错误,我在串口中断服务程序里面实现了一个简单的先进先出循环队列,队列长度设为8B,一接收到数据的时候,中断服务程序就将数据向队列添加,而前台程序要取数据就直接调用GetByte()函数,该函数自动向队列取得一个数据,如果队列为空,则会进入阻塞,直到有数据才会返回。发送队列也是根据此种原理。总之,关于串口,最终实现了两个函数,一个发送,一个接收,给全局使用,不必理会实现细节。

 

[page]
  STEP 5. 编写电脑端界面

  电脑端界面是使用串口进行通信的,所以电脑必须有串口,或者使用USB转串口。

  开发环境使用了本人最喜欢的C++ Builder 6.0 。因为开发速度很快,很适合我这种非专业WINDOWS程序员使用。最终开发出来的应用程序可以打开HEX文件,并自动转换成机器码,然后通信串口一个一个按照地址发给单片机。如图:


 


  STEP 6. 测试

  虽然原理简单,但是编写过程却很费时,BUG不断出现,晕死,其实让我选择去当苦力搬砖或者选择写代码,还是选择挺搬砖比较好,因为砖总可以搬完嘛,代码却不一定能写得出。所幸经过几天调试,所有功能完成了。

 测试: 写了一个单片机的8*8点阵显示程序,然后连接设备,打开文件。擦除芯片。。点击“编程”。。。经过两秒钟,界面进度条显示下载完成。小心地将下载好的芯片拔出来,插到单片机开发板上,接电。。查看效果。一接电,点阵上显示出期待已久的图案了,说明测试成功。下图:


 

 

  STEP 7. 拓展功能

  完成后想进一步拓展编程器的功能,在想着要弄点什么好,于是想到了手工汇编,就是不用开发环境,自己把指令一条一条写出来然后下载,SO,要怎么下载???,没问题,我在单片机里面实现了一个类似命令行的对话窗口,只要在电脑上打开超级终端或者串口助手,就可以通过字符指信与单片机进行对话,可要设置好地址,就可以查看或者修改单片机FLASH存储器中的任意一个值,想怎么改就怎么改,如图:


 

关键字:单片机  ATMEL51系列  编程器 引用地址:单片机课程设计-ATMEL51系列单片机编程器

上一篇:基于stc51单片机的PS\2键盘通信程序
下一篇:一个简单的单片机直流可调稳压电源设计

推荐阅读最新更新时间:2024-03-16 14:02

详解avr单片机的io原理及作用
为搞清IO结构,首先看看上拉和下拉电阻的作用。 一、上拉电阻 上拉就是将不确定的信号通过一个电阻钳位在高电平!电阻同时起限流作用!下拉同理! 上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流。 1、在用TTL电路驱动CMOS电路时,若TTL的高电平低于CMOS要求的高电平的门限值(1,TTL电平: 输出高电平 2.4V,输出低电平 0.4V。在室温下,一般输出高电平是3.5V,输出低电平 是0.2V。最小输入高电平和低电平:输入高电平 =2.0V,输入低电平 =0.8V,噪声容限是 0.4V。 2,CMOS电平: 1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很
[单片机]
详解avr<font color='red'>单片机</font>的io原理及作用
步进电机的控制原理及其单片机控制实现
步进电机可以对旋转角度和转动速度进行高精度控制。步进电机作为控制执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统和精密机械等领域。例如,在仪器仪表,机床设备以及计算机的外围设备中(如打印机和绘图仪等),凡需要对转角进行精确控制的情况下,使用步进电机最为理想。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。 上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区别,也是依靠气隙磁导的变化来产生电磁转矩。在本世纪初,由于资本主义列强争夺殖民地,造船工业发展很快,同时也使得步进电动机的技术得到了长足的进步。到了80年代后
[单片机]
步进电机的控制原理及其<font color='red'>单片机</font>控制实现
AT89S51单片机串行口的内部结构及功能介绍
AT89S51单片机串行口的内部结构如下图所示。它有两个物理上独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。 串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。下面介绍这两个特殊功能寄存器各位的功能。 1、串行口控制寄存器SCON 串行口控制寄存器SCON,字节地址988H,可位寻址,位地址为98H~9FH。SCON的格式如下图所示。 下面介绍SCON中各位的功能。 (1) SM0、SMl:串行口4种工作方式选择位。 SM0、SM1两位的编码所对应的4种工作方式见下表。 表
[单片机]
AT89S51<font color='red'>单片机</font>串行口的内部结构及功能介绍
单片机软件陷阱介绍
CPU受到干扰后,往往将一些操作数当作指令码来执行,造成程序执行混乱.我在A51的做法主要有以下几种: 1.中断向量区 ORG 0000H START: LJMP MAIN LJMP INT0 NOP NOP LJMP ERR 陷阱 LJMP TOINT NOP NOP LJMP ERR 陷阱 - - - - ORG 0040H ERR: ----------- 2.在表格区 在表格区的最后安排5个字节的陷阱 TABEL1: DB ------------ DB ------------ NOP NOP LJMP ERR 3.在未使用的ROM空间 未使用的ROM空间一般全是 0FFH,对于51来说是 MOV R7,A 的单字
[单片机]
采用8位单片机驱动PCI总线网卡的设计方案
目前,以太网(Ethernet)协议已经非常广泛地应用于各种计算机网络,如办公局域网、工业控制网络、因特网等场合,并且还不断地在发展。单片机或微控制器(MCU)(也称为嵌入式系统)已经在各个领域得到了广泛的应用。目前绝大多数系统都是以MCU为核心,与监测、伺服、指示设备配合实现一定的功能。如果嵌入式系统能够连接到Internet,则可以方便、低廉地将信息传送到世界上的任何一个地方。因此单片机如何控制以太网网卡进行传输数据,如何加载TCP/IP协议连接到互联网,这些都是一些具有挑战性的问题[1,2]。 单片机上网研究最多的一个方案就是用单片机驱动ISA总线网卡或者是驱动基于ISA总线的以太网控制芯片。但是,近年来,随着ISA总线在台
[单片机]
51单片机启动代码:STARTUP.A51
通过Keil编译器建立工程时,Keil会提示是否添加STARTUP.A51文件到工程,该文件即为51单片机启动代码。 51单片机复位后马上执行STARTUP.A51文件中的启动代码,根据启动代码中的设置依次执行以下操作: 内部RAM清零 外部RAM清零 清零分页的外部RAM 初始化SMALL内存模型的可重入模拟堆栈及其堆栈指针 初始化LARGE内存模型的可重入模拟堆栈及其堆栈指针 初始化COMPACT内存模型的可重入模拟堆栈及其堆栈指针 初始化8051单片机的硬件堆栈指针 将系统控制权转交给初始化全局变量的代码,如果没有被初始化的全局变量则转交给C程序文件中的main函数。 STARTUP.A51启动文件中定
[单片机]
基于AVR单片机和DS18B20的多点温度测量系统
1DS18B20和BASCOM-AVR简介   DS18B20是美国DALLAS公司生产的单总线数字温度传感器,从DS18B20读出或写入的信息仅需要一根口线。在单总线工作方式下,允许一条信号线上挂接多个DS18B20,特别适合于构成远距离多点温度测控系统,从而大大简化了系统布线,提高了可靠性,降低了成本,而实现这些的关键在于每片DS18B20都有唯一的ROM代码(64位产品序列号)。在多点温度测控系统中,ROM代码是识别和操作DS18B20的基础;无论读取还是选择对某一个传感器进行操作,主机必须发送64位ROM代码。   BASCOM-AVR是MSC Electronics公司推出的基于AVR系统的软件开发仿真平台。程序语
[单片机]
基于AVR<font color='red'>单片机</font>和DS18B20的多点温度测量系统
8051单片机的I2C接口并行扩展
  1 引 言   I2C总线接口器件在视频处理、移动通信等领域的应用已经非常普遍。另外,通用的I2C总线接口器件,如带I2C总线的RAM,ROM,A/D,D/A,LCD驱动器等,也越来越多地应用于计算机及自动控制系统中。随着I2C接口器件越来越广泛的应用,8051系列单片机与他之间的通信越来越频繁。   8051系列单片机与I2C总线接口器件通信时,8051的通用口与I2C总线器件的SCL,SDA连接。根据I2C总线数据传输协议,8051必须对其两个通用口进行频繁的置位、清零。根据基于51指令系统编制的汇编程序,传送一位数据,需要9个机器周期,而对于8051,一个机器周期要耗费6个时钟周期,即用54个时钟周期才能传送一位
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved