找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3177|回复: 7
收起左侧

STC89C52RC用isp烧录程序成功但是烧录的功能硬件上没体现,是哪环节错了吗?

[复制链接]
ID:659172 发表于 2020-5-12 20:17 | 显示全部楼层 |阅读模式
程序烧录的时候有断开重连,stc-isp也没报错,握手后写入是显示成功的。电路的小灯是上电以后灯就一直亮,然后复位键按了也没反应,不会出现按下复位灯灭然后再亮的那种反应。
代码如下。是很简单的小灯闪烁的代码,在protues模拟是成功的。
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit led = P1^4;

  4. void delay_100(unsigned char j)                //100us
  5. {     
  6.                 unsigned char i;
  7.                 for(;j>0;j--)
  8.                 {        
  9.                         _nop_();
  10.                         i = 43;
  11.                         while (--i);
  12.                 }
  13. }

  14. void main()
  15. {
  16.          while(1)
  17.          {
  18.                 led = ~led;
  19.                 delay_100(1000000);
  20.          }
  21. }
复制代码

111.jpg
回复

使用道具 举报

ID:726693 发表于 2020-5-12 21:54 | 显示全部楼层
你好,你这个函数void delay_100(unsigned char j)    参数是unsigned char 类型,最大255,应该改成unsigned int 类型,因为你调用时赋值是1000000,程序没有报错,运行的时候估计最大只能延时255*100us,或者干脆是1000000直接取了低位,延时太小,所以你肉眼看不到闪烁,一直为亮
回复

使用道具 举报

ID:726693 发表于 2020-5-12 22:02 | 显示全部楼层
我上边说错了,你要是赋值1000000,unsigned int 最大才65535,仍然盛不下,得需要unsigned long了,建议你调整那个delay函数
回复

使用道具 举报

ID:726693 发表于 2020-5-12 22:11 | 显示全部楼层
原来你这个函数也是从官方软件里提供的,你可以设置成延时100ms,这样你直接调用里写Delay100ms(5);延时500ms就可以明显看到结果了 延时函数.jpg

回复

使用道具 举报

ID:65956 发表于 2020-5-13 08:25 | 显示全部楼层
一楼说得很对,就是延时问题,你把这个void delay_100(unsigned char j)  改为void delay_100(unsigned long j) ,这样才符合你要输入值1000000
回复

使用道具 举报

ID:659172 发表于 2020-5-13 14:53 | 显示全部楼层
moon20000boy 发表于 2020-5-12 22:02
我上边说错了,你要是赋值1000000,unsigned int 最大才65535,仍然盛不下,得需要unsigned long了,建议你 ...

我代码改了一下,烧录进去还是没反应。我怀疑是晶振坏了,我测了一下晶振显示数值是2.03-2.04和2v-1.98v。但是换了几个晶振好像压差都是0.4v、0.5v。led还是常量不闪烁
回复

使用道具 举报

ID:726693 发表于 2020-5-13 23:38 | 显示全部楼层
我代码改了一下,烧录进去还是没反应。我怀疑是晶振坏了,我测了一下晶振显示数值是2.03-2.04和2v-1.98v。但是换了几个晶振好像压差都是0.4v、0.5v。led还是常量不闪烁

那就是你再改下你代码中的  led = ~led; 说实话位反转我从来没用过取反,我都是直接异或反转电平,你可以试试 led^=led; 取反这个操作是按位取反,就1位的这种不知道是不是不应该这么操作,我都是异或,你试试吧
回复

使用道具 举报

ID:659172 发表于 2020-5-14 13:49 | 显示全部楼层
moon20000boy 发表于 2020-5-13 23:38
那就是你再改下你代码中的  led = ~led; 说实话位反转我从来没用过取反,我都是直接异或反转电平,你可以 ...

我直接用10定义串口电压测出来是对的,应该是led电路出问题了,我感觉可能是三极管的原因,我去查查
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表