0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

89C51编程器,89C51 programmer

454398 2018-09-20 19:46 次阅读

89C51编程器,89C51 programmer

关键字:AT89C51,编程器电路图

89c51芯片的编程器,图片有些小,凑合看吧,附带程序
程序:
#include "at89x52.h"
#include "stdio.h"
#include "intrins.h"
#include "ctype.h"
sbit rdy=P3^2;
sbit vpp=P3^3;
sbit p26=P3^4;
sbit p27=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit prog=P2^7;
void init_serial()
{
SCON=0x50; /*mode 1*/
TMOD=0x20;
TH1=0xfd;
PCON=0x80; /*38400bps*/
TR1=1; /*load tmr1*/
TI=1;
ES=1;}
void init_pro()
{
p26=0;
p27=0;
p36=0;
p37=0;
vpp=1;
prog=1;
}
void sendbyte(unsigned char da) /*send a byte*/
{
while(!TI);
TI=0;
SBUF=da;}

unsigned char IntToAscii(unsigned char a) /*change DEC to ASCII HEX code*/
{
if(a<10) return a+48;
if(a>9) return a+55;}
unsigned int getadr() /*get 5 diti DEC adr*/
{
unsigned char i,a[5];
for(i=0;i<5;i++)
{
while(!RI);
RI=0;
a[i]=SBUF-48;
}
return a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];}
unsigned char getdata() /*get 2 diti HEX data*/
{
unsigned char d1,d2;
while(!RI);
RI=0;
d1=toint(SBUF);
while(!RI);
RI=0;
d2=toint(SBUF);
return d1*16+d2;}

unsigned int detchip(int adr)
{
P0=0xff;
P1=adr%256;P2=adr/256;
init_pro();
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
return P0;}

void read()
{
unsigned int adr,maxadr;
unsigned char h,l;
P0=0xff;
maxadr=getadr();
for(adr=0;adr{
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
h=IntToAscii(P0/16);
sendbyte(h);
l=IntToAscii(P0%16);
sendbyte(l);}
init_pro();}
unsigned int test(unsigned int nn)
{
unsigned int adr,counter=0;
P0=0xff;
for(adr=0;adr{
P1=adr%256;P2=adr/256;
p26=0;
p27=0;
p36=1;
p37=1;
vpp=1;
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
if(P0!=0xff) counter++;}
init_pro();
return counter;}
unsigned char erase(unsigned int nn,unsigned int p)
{
unsigned int i;
P0=0xff;
p26=1;
p27=0;
p36=0;
p37=0;
vpp=0;
prog=1;
for(i=0;i<50000;i++) _nop_();
switch(p)
{
case 0 : prog=0;
prog=1;
break;
case 1 : prog=0;
_nop_();
prog=1;
break;
case 2 : prog=0;
_nop_();_nop_();
prog=1;
break;
case 3 : prog=0;
_nop_();_nop_();_nop_();
prog=1;
break;
case 4 : prog=0;
_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 5 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 6 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 7 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
case 8 : prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
break;
default: prog=0;
for(i=0;i

prog=1;
break;}
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
vpp=1;
for(i=0;i

if(test(nn)==0) return 's';
else return 'f';}

unsigned char write()
{
unsigned int adr,d,i;
p26=0;
p27=1;
p36=1;
p37=1;
vpp=0;
prog=1;
for(i=0;i<4000;i++) _nop_();
adr=getadr();
d=getdata();
while(1)
{
if(adr>50000) break;
P1=adr%256;P2=(adr/256)|0x80;
P0=d;
TI=0;
SBUF='s';
prog=0;
_nop_();_nop_();_nop_();
prog=1;
adr=getadr();
d=getdata();
while(!rdy);}
init_pro();
return 'f';}
unsigned char lock(unsigned char level)
{
unsigned int i;
vpp=0;
if(level==1) {p26=1;p27=1;p36=1;p37=1;}
if(level==2) {p26=1;p27=1;p36=0;p37=0;}
if(level==3) {p26=1;p27=0;p36=1;p37=0;}
for(i=0;i<4000;i++) _nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=0;
_nop_();_nop_();_nop_();_nop_();_nop_(); /*delay 10 us*/
_nop_();_nop_();_nop_();_nop_();_nop_();
prog=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
while(!rdy);
init_pro();
return 'o';}
void main()
{
unsigned char data c;
unsigned int data adr,l,dx;
init_pro();
init_serial();
while(1)
{
init_pro();
scanf("%c",&c);
switch(c)
{
case 'c' : printf("%c",'o');
break;
case 'd' : scanf("%x",&adr);
printf("%x",detchip(adr));
break;
case 't' : scanf("%u",&dx);
printf("%u",test(dx));
break;
case 'r' : read();
break;
case 'e' : scanf("%u,%u",&adr,&dx);
printf("%c",erase(adr,dx));
break;
case 'w' : printf("%c",write());
break;
case 'l' : scanf("%u",&l);
printf("%c",lock(l));
break;
case 'h' : printf("**********Er6y Programmer Help Window***********\n");
break;
default : break;}


}
}
原理图:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    STC89C51是不是不可以通过串口读取ADS1118的数据,因为单片机是8位的?

    STC89C51是不是不可以通过串口读取ADS1118的数据,因为单片机是8位的?
    发表于 12-20 06:11

    求解答!用STC89C51系列数字秒表

    实验室学51单片机,用STC89C51系列,作业太难了,求佬给源代码帮助一下谢谢 1.通过定时,8位数码管,8个独立按键完成1000秒以内的数字秒表,最小分辨0.1秒,设置启动计秒键,暂停计秒键
    发表于 12-08 16:48

    基于51单片机的7人多数投票表决设计

    基于51单片机的7人多数投票表决设计 ( proteus仿真+程序+设计报告+讲解视频) 仿真图proteus8.16(有低版本) 程序编译:keil 4/keil 5 编程语言:
    的头像 发表于 11-09 09:48 841次阅读
    基于<b class='flag-5'>51</b>单片机的7人多数投票表决<b class='flag-5'>器</b>设计

    aP89W24 USB语音芯片烧录中文手册

    (42秒OTP芯片)、aP89021(21秒OTP芯片)和aP89010(10秒OTP芯片) ap89085  ap89170  ap89341  AP89W24USB是该开发系统的一部分,它是一个基于USB的编程器,旨在用于Windows 系统的计算机上。该
    发表于 08-08 14:41 1次下载

    DS89C21差分CMOS线路驱动和接收数据表

    电子发烧友网站提供《DS89C21差分CMOS线路驱动和接收数据表.pdf》资料免费下载
    发表于 07-05 09:57 0次下载
    DS<b class='flag-5'>89C</b>21差分CMOS线路驱动<b class='flag-5'>器</b>和接收<b class='flag-5'>器</b>数据表

    DS14C89A四通道CMOS接收数据表

    电子发烧友网站提供《DS14C89A四通道CMOS接收数据表.pdf》资料免费下载
    发表于 06-28 10:13 0次下载
    DS14<b class='flag-5'>C89</b>A四通道CMOS接收<b class='flag-5'>器</b>数据表

    Keil+C51中对双数据指针的直接利用

    Keil+C51中对双数据指针的直接利用
    发表于 06-18 10:15 0次下载

    51、STM32单片机的编程方式一样吗?

    STM32和51单片机是两种常见的单片机系列,它们在硬件架构、性能特点和编程方式等方面有所不同。但是从c语言编程的角度来说,我认为是大同小异的。我们来对比一下它们的
    的头像 发表于 05-18 08:04 2215次阅读
    <b class='flag-5'>51</b>、STM32单片机的<b class='flag-5'>编程</b>方式一样吗?

    基于单片机AT89C51的数字电压表仿真实现,原理图,论文,源码

    概述 本设计是基于Atmel 51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。 该系统采用AT89C51单片机作为控制核心,以ADC0809为模数转换芯片,实现量程0到5V的被测电压
    发表于 04-03 20:16

    怎么啦?你的Keil C51和Keil MDK还无法共存吗?

    一、安装KeilC51将安装路径设置为:D:\software\Keil\Keil_C51二、安装KeilMDKCore安装路径设置为:D:\software\Keil\Keil_MDKPack安装
    的头像 发表于 03-24 08:09 3227次阅读
    怎么啦?你的Keil <b class='flag-5'>C51</b>和Keil MDK还无法共存吗?

    基于单片机多功能洗衣机控制

    需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片
    发表于 03-18 10:13 696次阅读
    基于单片机多功能洗衣机控制

    初学者请问各位大佬

    为什么在89C51单片机中R1可以提供低地址 在外部扩展RAM中不是P0口提供低8位地址P2口提供高8位地址吗初学者有些不理解望各位大佬解答一下谢谢
    发表于 02-23 16:39

    AT89S51中文资料介绍

    电子发烧友网站提供《AT89S51中文资料介绍.pdf》资料免费下载
    发表于 02-20 09:24 13次下载

    C51C251有啥区别

    C51C251是两种不同的微控制系列,它们有以下主要区别: 架构和指令集:C51是基于Intel 8051架构的微控制,而
    发表于 01-20 11:39

    九齐MCU单片机NY8AE51F的芯片方案

    和性能符合预期。 烧录芯片: 准备工具: 确保您拥有一个适用于NY8AE51F的编程器/烧录设备。 下载程序: 将编译好的程序文件(通常是.hex或.bin文件)下载到编程器
    的头像 发表于 01-06 14:21 923次阅读