数码之家

 找回密码
 立即注册
搜索
查看: 5012|回复: 27

STC单片机定时器玩蒙了,请各位帮忙指点

[复制链接]
发表于 2021-1-17 13:49:24 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2021-1-17 13:59 编辑

单片机型号:STC8F2K16S2(20引脚贴片)
最初时好用的,发现不好用了以后就咋整都不行了,用手册里的例程也不行了,不知道是这款单片机有毛病还是这片单片机坏掉了,请有经验的坛友帮忙看看。
测试例程如下:


//之前已经定义了I/O口sbit pwm_out=P3^4;以及计数变量int cont;
//用软件延时测试P3.4高电平驱动LED闪灯一切正常
void main(void)
{
P3M0=0x10;//P3.4推挽输出
P3M1=0x00;
//以下是原版例程
TMOD = 0x00; //模式 0
TL0 = 0x66; //65536-11.0592M/12/1000
TH0 = 0xfc;
TR0 = 1; //启动定时器
ET0 = 1; //使能定时器中断
EA = 1;

while (1);
}

void TM1_Isr() interrupt 1
{
cont++;
if(cont>=100)
{
cont=0;
pwm_out = ~pwm_out; //测试端口
}
}


代码测试后的现象:
上述代码下载后没反应,在P3.4口上的LED为长亮状态。
将模式0设置改为模式1  TMOD = 0x01;(不自动重载)并且在中断函数中加入TH0、TL0的赋值语句也是没反应,而去掉赋值语句可以看到闪灯现象,但闪灯频率不受控制。
可以闪灯但不受控制的非正常状态的代码如下:
void main(void)
{
P3M0=0x10;//P3.4推挽输出
P3M1=0x00;

TMOD = 0x01; //这里改成模式1
TL0 = 0x66; //65536-11.0592M/12/1000
TH0 = 0xfc;
TR0 = 1; //启动定时器
ET0 = 1; //使能定时器中断
EA = 1;

while (1);
}

void TM1_Isr() interrupt 1
{
//TL0 = 0x66;//这里在模式1时赋值后不工作

//TH0 = 0xfc;
cont++;
if(cont>=100)
{
cont=0;
pwm_out = ~pwm_out; //测试端口
}
}

分别测试了定时器0、1、2、3、4都无法工作,不知道是单片机坏掉了还是什么问题。

几年来一直用STC单片机,从12系到15系也玩了很多型号,最近在用STC8系玩单片机硬件SPI和硬件I2C,8A芯片没遇到啥问题,这个8F的玩蒙了,接下来不会玩了,这个20脚贴片非常小,我老花镜、放大镜的废了好大劲焊上的,开始测试的时候一切正常的,装到壳子里重新调试程序时却不正常了,这是闹哪样呀。


打赏

参与人数 1家元 +1 收起 理由
66ok66 + 1 估计器件问题,我也做了厨房定时器运行了大.

查看全部打赏

发表于 2021-1-17 14:13:14 | 显示全部楼层
简单的程序可以先用软件仿真试试看有没有啥bug,跑过了仿真没问题再考虑上硬件调试,有问题才会怀疑到硬件上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 14:15:37 | 显示全部楼层

如果确实是片子坏掉了也得换,只是一直都是烧I/O口不知道单片机是否单独坏定时器的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 14:21:31 | 显示全部楼层
la45088d1 发表于 2021-1-17 14:13
简单的程序可以先用软件仿真试试看有没有啥bug,跑过了仿真没问题再考虑上硬件调试,有问题才会怀疑到硬件 ...

板子刚做好的时候一切正常的,这款单片机没有PWM,我是用T1定时模拟PWM驱动LCD的背光,用按键控制弄得好好的,其他程序弄好了这部分就坏掉了,再重新测试硬件就不对了,第一次用这个芯片不知道单片机定时器是否坏了。
回复 支持 反对

使用道具 举报

发表于 2021-1-17 14:38:18 | 显示全部楼层
IO口击穿了?试试其它IO是否可控
回复 支持 反对

使用道具 举报

发表于 2021-1-17 14:57:33 | 显示全部楼层
本帖最后由 lyy-cy 于 2021-1-17 15:03 编辑

一般我遇到这种问题都是先换硬件,若故障依旧再排查软件。

单片机几块钱,可是一小时的人工……

这样算账就心里平衡了。

51多年前玩过,不重装的定时器一定要在中断中重新赋初值;

买个20元的逻辑分析器,可以看到电平有无跳变。

中断中打印或者开关LED。可以判断故障、



回复 支持 反对

使用道具 举报

发表于 2021-1-17 16:24:05 | 显示全部楼层
上月遇到过一片STC15W104, DIP封装的,P3.4口坏了,此前没用过的,新装上去就发现不对劲,几经折腾后换了另一片就确认那片是坏的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 18:42:15 | 显示全部楼层
lyy-cy 发表于 2021-1-17 14:57
一般我遇到这种问题都是先换硬件,若故障依旧再排查软件。

单片机几块钱,可是一小时的人工……

时间倒是没啥,本来就是无聊消磨时间的东西,玩了十来年还是第一次碰到单片机其他功能正常而定时器出故障的,准备明天到单位换芯片试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 18:48:12 | 显示全部楼层
广东梁百万 发表于 2021-1-17 16:24
上月遇到过一片STC15W104, DIP封装的,P3.4口坏了,此前没用过的,新装上去就发现不对劲,几经折腾后换了另 ...

前段时间因为自己的原因真的烧毁了几片,都是I/O口击穿了,新品直接残废的还真没碰上,关键是老眼昏花的弄这种TSSOP贴片真费力,焊接也还好,就是一着急还手抖对正焊盘费事。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 18:51:57 | 显示全部楼层
eric_yangsen 发表于 2021-1-17 14:38
IO口击穿了?试试其它IO是否可控

这个制作还空闲了5个口,画板时空闲的口也都用焊盘引出了,用某个端口时也是先用软件延时做闪灯实验的,所以应该与输出I/O口没关系的,感觉就是定时器、定时器中断相关的寄存器无法操作了。
回复 支持 反对

使用道具 举报

发表于 2021-1-17 19:42:46 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2021-1-17 18:48
前段时间因为自己的原因真的烧毁了几片,都是I/O口击穿了,新品直接残废的还真没碰上,关键是老眼昏花的 ...

老哥可以试试铁板烧啊…焊这玩意儿没压力…
回复 支持 反对

使用道具 举报

发表于 2021-1-17 20:45:06 | 显示全部楼层
本帖最后由 玛德陛下 于 2021-1-17 20:48 编辑

焊接倒是挺容易的,20脚的SSOP 熟练了很简单。搞点焊膏拖拖就可以了,
找程序BUG 才是头大。
支持调试的话可以 先写 入相应的SFR ,再看看读出来是不是相应数据。
回复 支持 反对

使用道具 举报

发表于 2021-1-17 21:40:19 | 显示全部楼层
奉劝你换m0,调试起来方便多了,而且价格也很低。。我买得mm32得m0只要1.1元20pin得,效率会高51内核很多
回复 支持 反对

使用道具 举报

发表于 2021-1-18 00:05:31 | 显示全部楼层
单片机用的很少,现场我这用PLC,省心,设备二次改造啥的也简单。单片机太吃编程功力。还没到大神级别
回复 支持 反对

使用道具 举报

发表于 2021-1-18 00:13:11 来自手机浏览器 | 显示全部楼层
我玩芯圣时遇到过。你先赋值TH0,再赋值TL0试试。
回复 支持 反对

使用道具 举报

发表于 2021-1-18 05:12:33 | 显示全部楼层
在中断函数中加入TH0、TL0的赋值语句也是没反应,而去掉赋值语句可以看到闪灯现象
--------------------------------------------------------------------------------------------------
这说明定时中断在工作啊
回复 支持 反对

使用道具 举报

发表于 2021-1-18 08:18:15 | 显示全部楼层
if(cont>=100)
改成 if(cont>=1000)看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 10:57:53 | 显示全部楼层
莫名其妙的就又恢复正常了,--------持续的懵!!!!
因为用手册上的例程也不行,所以今天就又百度了一些STC8定时器方面的其他代码,结果有一个代码是好用的,是一段24MHz 1T 1ms定时的代码,程序跑通了以后,就不断的修改这段例程,修改到了最后发现保持好用的程序已经和我原来的程序一样一样的了,于是再次贴回一楼的手册中的例程代码发现也没问题了,本来是要换片子的烙铁也白烧了,只是接下来心里隐隐的不放心这货了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 11:00:52 | 显示全部楼层
ks11900 发表于 2021-1-17 21:40
奉劝你换m0,调试起来方便多了,而且价格也很低。。我买得mm32得m0只要1.1元20pin得,效率会高51内核很多 ...

谢谢,年纪大了不想多弄了,只是玩玩就有啥用啥吧。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 13:11 , Processed in 0.280800 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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