一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1900|回复: 10
收起左侧

Tiny13上电掉电IO端口状态问题

[复制链接]
发表于 2014-5-5 13:05 | 显示全部楼层 |阅读模式
本帖最后由 mfkyygt 于 2014-5-6 23:48 编辑

近日用tiny13写程序控制LED亮度,遇到上电和断电瞬间,LED会突然闪一下的问题,程序初始化已先赋值端口再设置端口输出,问题依然未能解决。LED的PWM控制端为高电平点亮
/*---- 主程序 ----*/
void main()
{
  unsigned char RecData;   // 定义一个变量
  PORTB =0xEF;  // 输出高电平
  DDRB  =0xF7;  //1111 0111 PB3设为输入,PB4为PWM输出


 楼主| 发表于 2014-5-6 10:17 | 显示全部楼层
是tiny13上电复位的问题吗?我目前只是简单RST脚接10K电阻到电源,请大侠指点啊
 楼主| 发表于 2014-5-6 23:46 | 显示全部楼层
受一网友启发,终于解决了我的问题,解决方法:
1、程序初始化,先向端口赋值0,再设置IO方向;
2、PWM端口下拉10K电阻,解决上电闪问题;
3、设置BOD掉电检测,强制掉电复位,解决掉电闪问题;
经修改设置,试验通过,问题解决,开心。。。
发表于 2014-5-24 18:57 | 显示全部楼层
大侠能不能帮写个LED闪的程序啊·像飞机的那种快闪2下停1秒再快闪2下 带振动开关延时1分钟··
 楼主| 发表于 2014-5-29 13:26 | 显示全部楼层
本帖最后由 mfkyygt 于 2014-5-29 13:27 编辑
lingshuai2010 发表于 2014-5-24 18:57
大侠能不能帮写个LED闪的程序啊·像飞机的那种快闪2下停1秒再快闪2下 带振动开关延时1分钟··

//=============================
//项目名称:LED闪两下停一下演示
//主控芯片: T13
//晶振频率: 内部9.6000Mhz
//Design by MFK
//Start  2014-05-29
//Modify 2014-05-29
//=============================
#include <iot13v.h>
#include <AVRdef.h>

volatile unsigned int m,n,j,k;
volatile unsigned char L_on;

//---- 定时器T0初始化 ----
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value:  9.920mSec (0.8%)
void timer0_init(void)
{
CLI();           //关中断
TCCR0B = 0x00;   //停止计时
OCR0A = 0x5D;
OCR0B = 0x5D;
TCNT0 = 0xA3;    //定时器初值
TCCR0A = 0x00;
TCCR0B = 0x05;   //打开定时器

MCUCR = 0x00;
TIMSK0 = 0x02;   //设置T0溢出中断
GIMSK = 0x00;   
SEI();           //开中断
}
//---- 定时器溢出中断 ----
//定时器T0每隔10ms产生一次中断
//通过计数器判断,每隔500ms闪一次
//设计闪两次,停1秒,循环1分钟
//m:50ms计数器
//n:1秒或2秒计数器
//j:0.5s*120=60s,1分钟计数器
//PB1: 控制LED亮灭
//PB2: 控制振动输出
//------------------------
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
        TCNT0 = 0xA3;   //重载定时器初值
        CLR(PORTB,PB2); //启动振动,低电平有效,可根据实际修改
        if (m<20)      
        {m++;}
        else            //50ms到
        {
                m =0;
                if (j<120)
                {
                        if (n<2)
                        {
                                if (L_on==0)     //闪两下,灭一下
                                {SET(PORTB,PB1);}
                                else
                                {COM(PORTB,PB1);}
                                n++;
                        }
                        else        
                        {
                                if (L_on==0)
                                {
                                        L_on =1;
                                }
                                else
                                {
                                        L_on =0;
                                        CLR(PORTB,PB1);
                                }
                          n =0;
                        }
                        j++;
                }
                //----
                else    //1分钟到
                {
                        j=0;
                        COM(PORTB,PB2);  //停止振动输出,可根据实际调整
                }
        }
}

//---- 主程序 ----
void main(void)
{
        PORTB =0xFF;    //PB初始端口置高
        DDRB  =0xFF;    //PB端口设为输出
        m =0;
        n =0;
        j =0;
        L_on =0;
        timer0_init();  //定时器初始化
  while (1)       //等待中断
  {;}
}


发表于 2014-5-29 13:52 | 显示全部楼层
mfkyygt 发表于 2014-5-29 13:26
//=============================
//项目名称:LED闪两下停一下演示
//主控芯片: T13

非常感谢····
 楼主| 发表于 2014-5-29 14:54 | 显示全部楼层
奇怪总是上不了附件仿真波形图片,提示内部错误。。。
程序自己根据实际修改吧,仅供参考
发表于 2014-5-29 16:40 | 显示全部楼层
好经验,Attiny13A还是蛮好玩的

点评

多谢关注!tiny本身就是小巧的意思,用着方便,确实不错的  发表于 2014-5-29 22:52

评分

参与人数 1一乐金币 +5 收起 理由
mfkyygt + 5 很给力!

查看全部评分

发表于 2014-5-29 17:22 | 显示全部楼层
这个比较重要:程序初始化,先向端口赋值0,再设置IO方向。

点评

谢谢关注!  发表于 2014-5-29 22:53

评分

参与人数 1一乐金币 +5 收起 理由
mfkyygt + 5 很给力!

查看全部评分

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-14 06:45 , Processed in 0.068251 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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