|
|
1.總中斷和定時(shí)器0中斷沒(méi)有打開(kāi)。
2.阻滯型延時(shí)只適用于短暫延時(shí),長(zhǎng)時(shí)間延時(shí)要利用定時(shí)器加計(jì)數(shù)方式。用定時(shí)器作阻滯型延時(shí)更不可取。
3.T0中斷響應(yīng)后TF0由硬件自動(dòng)清0。
給你改為定時(shí)器中斷產(chǎn)生時(shí)基,在主函數(shù)中查詢變量值執(zhí)行相關(guān)任務(wù)。任意時(shí)長(zhǎng)的延時(shí)也不影響當(dāng)前任務(wù)執(zhí)行
- #include <STC8H.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit JR_JDQ = P1^7;
- sbit JS_JDQ = P1^5;
- sbit DCF_JDQ = P1^4;
- sbit FMQ = P1^6;
- sbit KEY1 = P1^1;
- sbit ID1 = P3^3;
- sbit ID2 = P3^4;
- sbit ID3 = P3^5;
- uchar count; //計(jì)數(shù)變量聲明
- uchar Cnt_250us; //250us 時(shí)間變量聲明
- uint Cnt_ms,Cnt_s;//ms、s 時(shí)間變量聲明
- bit sign_ms,sign_s;//ms、s 時(shí)間標(biāo)志位變量聲明
- void IO_init()
- {
- P1M0 = 0x00;
- P1M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- }
- void TM0_init() //250微秒@11.0592MHz
- {
- AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0x1A; //設(shè)置定時(shí)初始值
- TH0 = 0xFF; //設(shè)置定時(shí)初始值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- EA = 1; //開(kāi)總中斷
- ET0 = 1; //開(kāi)T0中斷
- }
- void TM0_Isr() interrupt 1
- {
- Cnt_250us++;
- if(Cnt_250us>=4)
- {
- Cnt_250us=0;
- // sign_ms=1;
- Cnt_ms++;
- }
- if(Cnt_ms>=1000)
- {
- Cnt_ms=0;
- sign_s=1;
- Cnt_s++;
- }
- }
- void main()
- {
- IO_init();
- TM0_init();
- while (1)
- {
- if(Cnt_ms<500)//周期1秒,響0.5秒,停0.5秒
- {
- FMQ = 1;
- }
- else
- {
- FMQ = 0;
- }
- if(sign_s==1)
- {
- sign_s=0;//秒標(biāo)志清0
- count++;
- if(count>=5)//周期5秒
- {
- count=0;
- }
- if(count<2)
- {
- DCF_JDQ = 1;//輸出2秒
- }
- else
- {
- DCF_JDQ = 0;//停止3秒
- }
- }
- }
- }
復(fù)制代碼 |
|