zxw103 发表于 2011-1-17 10:54:29

STC 1T 单片机的硬件BUG 欢迎大家来讨论

本人使用STC 11F60 及STC 12C5A60 系统一T单片机时调用库函数SPRINTF(),做浮点数转换成ASCII码,P2口居然出来尖脉冲。测试程序如下:
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
#define uintunsigned int
void test_sprpintf(void){
           uchar dis_buf;
           floatx;
          
           x=100;
           while(x!=0){
           sprintf(dis_buf,"%6.2f",x);
           }
}

void main(void){
       test_sprpintf();
}
欢迎大家去验证,看看有没有什么解决办法,上述%6.2f,如果换成%6u整型变换那就不会出现这种问题。编译模式为
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_611624ZYIL3C.jpg
KEIL编译模式设置 (原文件名:编译设置.jpg)
但在编译在DATA模式也是正常,欢迎大家 来讨论

bbs2009 发表于 2011-1-17 11:01:40

dengxiaofeng 发表于 2011-1-17 12:21:11

讨厌 S-T-C

kerrwang1982 发表于 2011-1-17 12:41:12

业余学习中。

liaowei 发表于 2011-1-17 13:47:59

楼主,你用STC的MCU的XDATA的话就别想着用和总线相关的一些IO了。
这并不是BUG来的,内部的XDATA和你外接的XDATA有什么本质上的区别吗

xiaobendan 发表于 2011-1-17 14:44:32

我用5A60也是用XDATA的啊,P2口用做LCD的数据口,很好啊,不过我倒是没有测量是有没有什么脉冲了。只要工作正常就好了。

liaowei 发表于 2011-1-17 15:22:08

回复【5楼】xiaobendan 仲跻东
我用5a60也是用xdata的啊,p2口用做lcd的数据口,很好啊,不过我倒是没有测量是有没有什么脉冲了。只要工作正常就好了。
-----------------------------------------------------------------------

那是因为你送了P2的数据之后到送E、RW、RS等之前的时间段都没有去读写XDATA
如果你把P2用作开关,模拟串口发送等敏感信号就不一样了

zxw103 发表于 2011-1-18 08:25:26

回复【1楼】bbs2009
-----------------------------------------------------------------------
STC单片机本身自带1K集成外部RAM,当外部变量小于1K,PO,P2是没有地址信号输出的,因为芯片内部把地址线跟IO口线独立分开的,只有在RAM地址大于1K,P2,P0才会有地址线,相反如果P2有地址输出正常,那是不是P0口也要有地址输出呢,试验结果告诉我PO一切正常

zxw103 发表于 2011-1-18 08:33:22

回复【4楼】liaowei
-----------------------------------------------------------------------

你好,谢谢你的观点,所谓内部XDATA RAM地址线是独立的,就跟仿真器一样的道理,如果扩展了外面RAM用这样的RAM确实,P2,P0确实有脉冲,那是不可能去接来再做I/0口(以前在一片贴子里看过还真有这样的牛人用过,好像是国外的),但是内部XDATA RAM集成的就不一样,P2,P0口是不可能会出现脉冲(大家可能认为是地址信号)输出的,同样的芯片为会么SPRINTF,整型转换是好,但是一到浮点就不好了,你可以去试验一下,用我发出的这段程序,用STC89C58RD+就不会出现这样的情况,同样的HEX
按STC工程师的答复是DPTR 在库函数调用时DPTR有几句话是超出了1024的地址范围,由于是1T的单片机内部,外部地址切换导致,这个我有点难以理解,P0为啥不会有信号输出来呢,我的地址难道刚刚这么好碰到P0都为1

zxw103 发表于 2011-1-18 08:34:46

回复【5楼】xiaobendan 仲跻东
-----------------------------------------------------------------------

这个可以用,如果你在P2上接一下步进电器驱动器脉冲控制脚,那你就不会有这么舒服了,呵呵,你只要调用SPRINTF浮点运算转换,步进电机就会转一下,我也是做这个才发现的

zhengyi 发表于 2011-1-18 15:29:55

main()中的test_sprpintf(); 之后需加上while(1);吧,不然程序可能乱跑。
页: [1]
查看完整版本: STC 1T 单片机的硬件BUG 欢迎大家来讨论