找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1357|回复: 0
打印 上一主题 下一主题
收起左侧

未添加任务标志时均正常工作,添加后数码管无显示

[复制链接]
跳转到指定楼层
楼主
ID:290002 发表于 2018-12-17 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 flaysim 于 2018-12-17 19:59 编辑

目前找不到原因,求正确回答,可提供完整的程序

发现一个非常有趣的东西,
void Interrupt_T0() interrupt 1
{
        uint8 i;    ->static uint8 i = 0;   这样改一下居然显示了?excuese me,郁闷,完全没搞懂为什么会这样
        
        TH0 = 0XFC;
        TL0 = 0x66;
        
        for(i = 0; i <TASK_NUM; i++)
        {
                if(TASK_Count[ i])               
{
TASK_Count[ i]--;                       
if(TASK_Count[ i] == 0)                       
{                                
TASK_Mark[ i] = 0x01;                        
}                }        }}


最终结果出来了:主要问题是我在读取DS1302时钟时读了8位,多读了1位. 在未加标志位时运行良好,但是加了之后不知道怎么的起了冲突,导致计数君0x01之后就变成了0xFF....
引以为戒吧
  1. #include <reg52.h>
  2. #include "Nixie_tube.h"
  3. #include "my_define.h"
  4. #include "ds1302.h"

  5. //void NT_display(uint8 wei,uint8 num);//例如.wei = 3,num = 7 ->点亮第三位的数码管并在上面显示7

  6. #define TASK_NUM (1)                        //任务数
  7. uint16 TASK_Count[TASK_NUM];        //任务计时数组
  8. uint8  TASK_Mark[TASK_NUM];                //任务标志数组

  9. void Init_T0()
  10. {
  11.         EA = 1;
  12.         ET0 = 1;
  13.         TMOD &= 0xf0;
  14.         TMOD |= 0x01;
  15.         TH0 = 0XFC;
  16.         TL0 = 0x66;
  17.         TR0 = 1;
  18. }

  19. void Interrupt_T0() interrupt 1
  20. {
  21.         uint8 i;
  22.         
  23.         TH0 = 0XFC;
  24.         TL0 = 0x66;
  25.         
  26.         for(i = 0; i <TASK_NUM; i++)
  27.         {
  28.                 if(TASK_Count[i])
  29.                 {
  30.                         TASK_Count[i]--;
  31.                         if(TASK_Count[i] == 0)
  32.                         {
  33.                                 TASK_Mark[i] = 0x01;
  34.                         }
  35.                 }
  36.         }
  37. }

  38. void main()
  39. {
  40.         uint8 i;
  41.         SetTime_ds1302();                //设置DS1302初始值
  42.         Init_T0();
  43.         TASK_Count[0] = 15;                //计数15ms
  44.         TASK_Mark[0] = 0;                //标志位清零
  45.         while(1)
  46.         {
  47.                 TR0 = 0;
  48.                 ReadTime_ds1302();                //从DS1302中读数据
  49.                 TR0 = 1;
  50.                 timedata_Change();                //DS1302数据格式转化
  51.                
  52.                 if(TASK_Mark[0] == 0x01)                //当标志位为1时
  53.                 {
  54.                         TASK_Count[0] = 15;                        //重新计数15ms
  55.                         TASK_Mark[0] = 0;                        //标志位清零
  56.                         for(i = 0; i < 6; i++)                //数码管显示时分秒
  57.                         {        
  58.                                 NT_display(i,timedata_1wei[i]);        
  59.                                 delay(200);
  60.                         }                        
  61.                 }
  62.         }
  63. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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