自制Easy 51Pro串行编程器

这次编程器程序采用了Keil C进行编写（临时学的），代码更容易看懂，也更容易修改。硬件上，电路图还是采用了原来那种直观的画法。编程器的12v/5v/0v切换控制电路代替了原来的12v/5v切换控制电路，这样就可以支持AT89C2051系列了。原来电路用了两个晶振，这次省去了一个。

根据这个电路程序就是这样写了：

void SetVpp5V()//设置Vpp为5v

{

P3_4=0;

P3_3=0;

}

void SetVpp0V()//设置Vpp为0v

{

P3_3=0;

P3_4=1;

}

void SetVpp12V()//设置Vpp为12v

{

P3_4=0;

P3_3=1;

}

还有个最重要的地方要注意：

AT89C2051的PIN1是Vpp/RST与AT89C51的P1.0的引脚是同一个位置，而AT89C51的Vpp/EA引脚与AT89C2051的P3.7引脚又是同一个位置。这里可以用一对开关进行切换，我是用跳线解决的。烧2051时，控制器的P1.0正好可以用来控制2051的P3.7。看源程序中有个这样的定义：#define C2051_P3_7 P1_0

做编程器的步骤：

1. 先做出一个最小系统，随便烧个程序进去试试，让你可以感受的到程序可以正常运行。很多人把编程器做完后始终检测不到编程器，检查错误都快搞得发疯了，后来才发现单片机根本没运行。

2. 完成串口通讯的部分后，把程序烧进去，打开软件，看状态那里有没有“编程器:就绪”。如果没有可以多复位几次。如果还没有检测到编程器，看看端口，波特率是否设置正确。默认波特率是28800，工作方式1，可以参照源程序。也可以用别的程序测试单片机与PC通讯是否正常。

3. 这时候焊好一个芯片插座就可以用来编程AT89S51了，建议先把AT89S51的编程器做出来。成功后你就会有信心继续往下做了。AT89S51编程器只要控制P1.5,P1.6,P1.7,RST这几个脚就可以了，但也要保证它是最小系统。

4. 接着把其他部分做完，这就要焊一堆东西了。有个很好的办法让你省去焊一堆线：看电路你会发现，单片机P0,P1,P2与目标插座是对应连接的，可以把单片机贴在插座的底部，直接引脚和引脚焊在一起，不过要注意别把单片机烧了，动手要快，要温柔。不该焊在一起的引脚还要想办法隔开，我就是飞了几根线。

5. 做完后如果通讯正常就直接放块器件看能不能被检测到，能检测再试试能不能读写。如果不行就要用这个东西了：

这个东西原先是用来学CPLD时测试逻辑功能是否正确的。利用单片机的P0-P3口发出电平和接收电平并显示，还可以调试子程序，可以给定子程序参数并调用，然后观察子程序的返回值。上面有一堆按钮，点按钮后单片机相对应的引脚电平就会改变，这时你可以用表测量，看是否随你按下的按钮而变化，这样就可以判断线路是否接通。还有点击“PROCESS X”时会调用你指定的子程序。看它的源程序中有这样一些子程序：

PROCESS_1: CLR P3.3;Vpp=0v

SETB P3.4

MOV TX1,#0;显示0v

RET

PROCESS_2: CLR P3.3;Vpp=5V

CLR P3.4

MOV TX1,#5;显示5v

RET

PROCESS_3: CLR P3.4;Vpp=12v

SETB P3.3

MOV TX1,#12;显示12v

RET

应该看懂了吧。就是说你按下“PROCESS 1” Vpp=0V ，按下“PROCESS 2” Vpp=5V，按下“PROCESS 3” Vpp=12V这时用表测量你的12v/5v/0v切换电路是否正常。记得先要把SUBPROC.BIN这个文件烧到你的控制器单片机。

最后把你的编程器调试到最佳状态。如果发现编程器开启后放置一段时间就停止了响应或折腾一下就死机了，这时可以改进一下复位电路，加入看门狗之类的。如果写入的数据经常出错，检查12v电压是否可以到位，VCC是否稳定。还有通讯线路不要太长，电缆尽可能的要好。

如果还有问题可以在我的留言板找到解答。

最后还是那个话题，欢迎你扩充它的器件支持。扩充器件的具体细节请看《Easy 51Pro的原理与扩充》。成功时记得与大家分享。