历史上的今天
今天是:2025年03月06日(星期四)
2018年03月06日 | 89C51单片机编程程序
2018-03-06 来源:eefocus
#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;} } }
史海拾趣
|
发展、融合MCU专题融合了走进MCU、应用文章、厂商掠影,三大版块。 走进MCU中详细介绍了MCU基本原理与发展历史,带领读者一起回顾MCU的发展里程。 应用文章中细分了单片机在控制、显示、电源、无线、通信、解码等一系列领域的设计方案。 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 我参加今年电设高品类。最近做广西预测题,老师推荐我们用MC3363这种片子,但是懂得甚少啊 有谁用过这个片子啊 海王和我联系啊 我的qq 992871818 … 查看全部问答> |
|
不知網上的各位大大有沒有人去讀過WINCE OV511的SOURCE CODE,我看裡面的CODE並沒有對OV7620 SENSOR下值???這樣對嗎???因為我身邊沒有網眼V2000的攝像頭,所以也無法確定這網絡上載下來的驅動能不能動。… 查看全部问答> |
|
PB5.0导出SDK时出错,请高手指教 我在PB5.0导出SDK时,出现下列错误,高手给我把把脉啊,看看问题出在哪了?刚刚开始搞这个东东.... Committing database changes Creating \'required\' feature Adding required files Committing database ...… 查看全部问答> |
|
急求一款好用的CDMA模块,请大家推荐,真的很急,呵呵...如果您有时间的话请高抬贵手指,推荐推荐!! 该模块主要是用来做数据传输的,做车载的GPS系统,所以要满足以下要求: 1、内置TCP/IP、PPP协议栈。 2、可以打电话。 3、支持PDU格式的短信 ...… 查看全部问答> |
|
现在有一个怪问题,外部中断我设为上升沿触发时,的确是上升沿触发,但是设为下降沿触发时,就上升沿和下降沿都能触发,为什么呢? 外部中断用按键触发。我的电路是用一个按键一端接地,一端接I/O,I/O设为输入上拉模式。… 查看全部问答> |
|
代码如下: 当该下面带颜色的数据,该的氛围比较大,例如前面 2个该为delay (50),后面的一个数据改为600,调试发现会出现走不出delay这个函数.数据小一点,如下程序的话就可以正常的运行了,问题提出来,明天晚上再来研究一下. #include void delay (); ...… 查看全部问答> |
|
嵌入式系统的发展与计算机系统的发展基本同步,任何在计算机领域出现的新技术都会很快进入嵌入式系统领域。嵌入式系统中一些新技术的使用,也会对其他计算机应用领域产生影响。 1、嵌入式系统的出现和兴起(1960-1970) 20世纪60年代,以晶 ...… 查看全部问答> |




