单片机是STC89C52RC,昨天在做它的内置EEPROM实验时,发现怎么弄都读不出正确值。而且调试时发现很奇怪的现象:
void main()
{
Init_Uart();
Send_Byte('K');
s2=0x35;
ISP_Sector_Erase(0x2002);
Send_Byte('w');
ISP_Write(0x2002,s2);
s3=ISP_Read(0x2002);
while(1);
}
这是主程序,开头串口发送了K,中间也有发送w,然后再这三个函数里:
void ISP_Sector_Erase(uint sector_addr)
{
uint iaddr;
Send_Byte('E');
iaddr=sector_addr & 0xfe00;
ISP_ADDRH=(uchar)(iaddr>>8);
ISP_ADDRL=0x00;
ISP_CMD=ISP_CMD & 0xf8;
ISP_CMD=ISP_CMD & EraseCmd;
ISPgoon();
ISP_IAP_disable();
}
开头有发送E
void ISP_Write(uint byte_addr,uchar dat)
{
ISP_ADDRH=(uchar)(byte_addr>>8);
ISP_ADDRL=(uchar)(byte_addr & 0x00ff);
ISP_CMD=ISP_CMD & 0xf8;
ISP_CMD=ISP_CMD | PrgCmd;
ISP_DATA=dat;
Send_Byte('J');
Send_Byte(ISP_DATA);
ISPgoon();
ISP_IAP_disable();
}
里面有发送J和写入值
uchar ISP_Read(uint byte_addr)
{
ISP_ADDRH=(uchar)(byte_addr>>8);
ISP_ADDRL=(uchar)(byte_addr & 0x00ff);
ISP_CMD=ISP_CMD & 0xf8;
ISP_CMD=ISP_CMD | RdCmd;
ISPgoon();
ISP_IAP_disable();
Send_Byte(ISP_DATA);
Send_Byte('G');
return (ISP_DATA);
}
最后有发送 读取值和G
理论说串口发送的数据应该是KEwJ55G
然后从串口助手上看到的只有KG
中间那么多的发送都被吃了?????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
把Send_Byte的代码弄出来看看
一周热门 更多>