[ZLG-MCU] 怎么来解救我的P89V51?请高手支招!

[复制链接]
3057|4
 楼主| hduzyf 发表于 2008-7-26 17:25 | 显示全部楼层 |阅读模式
新买了块P89V51,用Flash&nbsp;magic烧了一次程序后就再也烧不进了。原以为是因为烧了是UART通信程序(pc机与单机通信,用Comdebug模拟串口),把单片机的通信口烧坏了,同学也说UART通信很容易烧单片机。后来偶然想到,是不是因为通信口复用了,即在用Flash&nbsp;magic烧程序是也是用了TX和RX口,因此单片机以为是在通信,程序烧不进了。因此我再用Comdebug模拟,串口还能通信,说明串口是好的。在看看是不是我的程序的原因,使串口“冲突“了。<br />程序说明:单片机先接收从PC发来的一个数据并在数码管高位显示,然后单片机将收到的数据回发给PC机。<br />#include&ltreg51.h&gt<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />uchar&nbsp;code&nbsp;ledw[4]={0x07,0x0b,0x0d,0x0e};//数码管位选高位在前<br />uchar&nbsp;code&nbsp;ledD[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管段码<br />uchar&nbsp;rdata[4]={0x30,0x30,0x30,0x30};<br />/*****串行初始化函数****/<br />void&nbsp;serial_init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TMOD=0x20;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1=0xFD;//比特率9600<br />&nbsp;&nbsp;&nbsp;&nbsp;TL1=0XFD;<br />&nbsp;&nbsp;&nbsp;&nbsp;TR1=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;ES=1;<br />}<br />/***延时k毫秒***/<br />void&nbsp;delay(uint&nbsp;k)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;m,n;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(m=0;m&ltk;m++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(n=0;n&lt121;n++);<br />}<br />/****单片机以中断方式接收从pc传来的数据****/<br />void&nbsp;serial()&nbsp;interrupt&nbsp;4<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;rdata[0]=SBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA=0;<br />&nbsp;&nbsp;&nbsp;<br />}<br />/******单片机以查询的方式传数据给pc*****/<br />void&nbsp;TI_FIND()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SBUF=rdata[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!TI);<br />&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA=1;<br />}<br />/******数码管显示函数*******/<br />void&nbsp;display()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(p=0;p&lt4;p++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2=ledw[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rdata[p]&gt0x39)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P1=ledD[(rdata[p]-0X40)+10];//显示字母<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P1=ledD[(rdata[p]-0x30)];//显示数字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;serial_init();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(EA==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI_FIND();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />在用Flash&nbsp;magic&nbsp;时提醒Erasing&nbsp;block&nbsp;0,并且数码管高位乱码显示,估计是单片机在接收数据并显示了(我程序设定即是受到一个字节并在数码管高位显示)。<br />所以现在想的办法是用什么方法能不通过UART通信口烧程序,把原先的通信程序覆盖了。<br />各位高手帮忙支支招……
 楼主| hduzyf 发表于 2008-7-29 23:46 | 显示全部楼层

其它人没有遇到过这问题吗??

  
小熊猫 发表于 2008-8-6 08:50 | 显示全部楼层

试一试先点下载,再给单片机上电,FLASHMAIGC用3.12版本的

  
hyhmh 发表于 2008-8-6 15:50 | 显示全部楼层

应该有V4.xx版本的Flash Magic

可以肯定的是P89V51&nbsp;用户程序与串口下载的引导程序是不同物理区域的。<br />MCU上电后要么运行&nbsp;下载引导程序,要么运行&nbsp;用户程序。
zlgmcu 发表于 2008-8-7 09:07 | 显示全部楼层

V4.xx的flashmagic不支持,建议用低版本软件。

另,您可以到www.zlgmcu.com搜索,&quot;isp&quot;,<br />您可以找到很多范例。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部