|
本帖最后由 flaysim 于 2018-12-17 19:59 編輯
目前找不到原因,求正確回答,可提供完整的程序
發(fā)現(xiàn)一個(gè)非常有趣的東西,
void Interrupt_T0() interrupt 1
{
uint8 i; ->static uint8 i = 0; 這樣改一下居然顯示了?excuese me,郁悶,完全沒搞懂為什么會(huì)這樣
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;
} } }}
最終結(jié)果出來了:主要問題是我在讀取DS1302時(shí)鐘時(shí)讀了8位,多讀了1位. 在未加標(biāo)志位時(shí)運(yùn)行良好,但是加了之后不知道怎么的起了沖突,導(dǎo)致計(jì)數(shù)君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 ->點(diǎn)亮第三位的數(shù)碼管并在上面顯示7
- #define TASK_NUM (1) //任務(wù)數(shù)
- uint16 TASK_Count[TASK_NUM]; //任務(wù)計(jì)時(shí)數(shù)組
- uint8 TASK_Mark[TASK_NUM]; //任務(wù)標(biāo)志數(shù)組
- 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(); //設(shè)置DS1302初始值
- Init_T0();
- TASK_Count[0] = 15; //計(jì)數(shù)15ms
- TASK_Mark[0] = 0; //標(biāo)志位清零
- while(1)
- {
- TR0 = 0;
- ReadTime_ds1302(); //從DS1302中讀數(shù)據(jù)
- TR0 = 1;
- timedata_Change(); //DS1302數(shù)據(jù)格式轉(zhuǎn)化
-
- if(TASK_Mark[0] == 0x01) //當(dāng)標(biāo)志位為1時(shí)
- {
- TASK_Count[0] = 15; //重新計(jì)數(shù)15ms
- TASK_Mark[0] = 0; //標(biāo)志位清零
- for(i = 0; i < 6; i++) //數(shù)碼管顯示時(shí)分秒
- {
- NT_display(i,timedata_1wei[i]);
- delay(200);
- }
- }
- }
- }
復(fù)制代碼
|
|