本帖最后由 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);
- }
- }
- }
- }
復制代碼
|