|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 慕名而来 于 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脚贴片非常小,我老花镜、放大镜的废了好大劲焊上的,开始测试的时候一切正常的,装到壳子里重新调试程序时却不正常了,这是闹哪样呀。
|
打赏
-
查看全部打赏
|