本帖最后由 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....
引以为戒吧
- #include <reg52.h>
- #include "Nixie_tube.h"
- #include "my_define.h"
- #include "ds1302.h"
- //void NT_display(uint8 wei,uint8 num);//例如.wei = 3,num = 7 ->点亮第三位的数码管并在上面显示7
- #define TASK_NUM (1) //任务数
- uint16 TASK_Count[TASK_NUM]; //任务计时数组
- uint8 TASK_Mark[TASK_NUM]; //任务标志数组
- void Init_T0()
- {
- EA = 1;
- ET0 = 1;
- TMOD &= 0xf0;
- TMOD |= 0x01;
- TH0 = 0XFC;
- TL0 = 0x66;
- TR0 = 1;
- }
- void Interrupt_T0() interrupt 1
- {
- uint8 i;
-
- 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;
- }
- }
- }
- }
- void main()
- {
- uint8 i;
- SetTime_ds1302(); //设置DS1302初始值
- Init_T0();
- TASK_Count[0] = 15; //计数15ms
- TASK_Mark[0] = 0; //标志位清零
- while(1)
- {
- TR0 = 0;
- ReadTime_ds1302(); //从DS1302中读数据
- TR0 = 1;
- timedata_Change(); //DS1302数据格式转化
-
- if(TASK_Mark[0] == 0x01) //当标志位为1时
- {
- TASK_Count[0] = 15; //重新计数15ms
- TASK_Mark[0] = 0; //标志位清零
- for(i = 0; i < 6; i++) //数码管显示时分秒
- {
- NT_display(i,timedata_1wei[i]);
- delay(200);
- }
- }
- }
- }
复制代码
|