當前位置:編程學習大全網 - 編程語言 - 關於STC單片機定時器問題

關於STC單片機定時器問題

--代碼有誤,沒計算精確,如果精確計算的話,在短時間內是感覺不出來誤差的.下面代碼供參考..

----

;========================================================start

; MOV 8EH,#0C0H ;T0,T1=12倍速C51(STC2501)

CHA DATA 10H

CHS DATA 11H ;秒單元

CHM DATA 12H ;分單元

CHH DATA 13H ;時單元

NG DATA 14H

NS DATA 15H

;----------------BEGIN

ORG 0000H

LJMP main

ORG 000BH

LJMP CLOCK

ORG 030H

main: MOV P1,#0FFH

MOV P3,#0FFH

MOV CHA,#00H

MOV CHS,#00H

MOV CHM,#00H

MOV CHH,#00H

MOV NG,#00H

MOV NS,#00H

;===========

MOV TMOD,#01H ;定時器0控制字

MOV TL0,#0B0H ;{TL0=B0H,TH=3C}=1S

MOV TH0,#3CH

SETB ET0

SETB TR0

SETB EA

MOV DPTR,#LED

;-------DisplayProgram

;-------第壹、二位

F1: MOV A,CHS ;將H中的十六進制數轉換成10進制

MOV B,#10 ;10進制/10=10進制

DIV AB

MOV NS,A

MOV NG,B

MOV A,NG

MOVC A,@A+DPTR ;查個位數的7段代碼

MOV P1,A ;送出個位的7段代碼

MOV P3,#11111110B

CALL DEL1MS ;顯示1ms

MOV A,NS ;取十位數

MOVC A,@A+DPTR ;查十位數的7段代碼

MOV P1,A ;送出十位的7段代碼

MOV P3,#11111101B

CALL DEL1MS ;顯示1ms

;-------第三、四位

MOV A,CHM ;將H中的十六進制數轉換成10進制

MOV B,#10 ;10進制/10=10進制

DIV AB

MOV NS,A

MOV NG,B

MOV A,NG

MOVC A,@A+DPTR ;查個位數的7段代碼

MOV P1,A ;送出個位的7段代碼

MOV P3,#11111011B

CALL DEL1MS ;顯示1ms

MOV A,NS ;取十位數

MOVC A,@A+DPTR ;查十位數的7段代碼

MOV P1,A ;送出十位的7段代碼

MOV P3,#11110111B

CALL DEL1MS ;顯示1ms

;-------第五、六位

MOV A,CHH ;將H中的十六進制數轉換成10進制

MOV B,#10 ;10進制/10=10進制

DIV AB

MOV NS,A

MOV NG,B

MOV A,NG

MOVC A,@A+DPTR ;查個位數的7段代碼

MOV P1,A ;送出個位的7段代碼

MOV P3,#11101111B

CALL DEL1MS ;顯示1ms

MOV A,NS ;取十位數

MOVC A,@A+DPTR ;查十位數的7段代碼

MOV P1,A ;送出十位的7段代碼

MOV P3,#11011111B

CALL DEL1MS ;顯示1ms

JMP F1

;----------------------interrupt

CLOCK: MOV P1,#0FFH

MOV TL0,#0B0H ;0B0H

MOV TH0,#3CH ;3CH

PUSH ACC

PUSH PSW

;-------

INC CHA

MOV A,CHA

CJNE A,#1,EXT ;C51=20,STC=240//8EH.2=1

MOV CHA,#00H

INC CHS

MOV A,CHS

CJNE A,#60,EXT

MOV CHS,#00H

INC CHM

MOV A,CHM

CJNE A,#60,EXT

MOV CHM,#00H

INC CHH

MOV A,CHH

CJNE A,#24,EXT

MOV CHH,#00H

;-----------

EXT: POP PSW

POP ACC

RETI

;------------------------------------------------------

LED: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H

DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH

;---------------------------------------delay_program

DEL1MS: MOV R4,#2 ;延時程序3,精確延時1000微秒

D1: MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

RET

END

C例子:

//------------------初始化函數

int_ini()

{

TH0=0X3C;TL0=0XB0;

TMOD=0X01;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;

}

//----------------中斷處理函數

void time_intt0(void) interrupt 1

{

ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1;

con1s++;

if(con1s==20)

{

con1s=0x00;

timedata[0]++;

if(timedata[0]>=10)

{timedata[0]=0;timedata[1]++;}

if(timedata[1]>=6)

{timedata[1]=0;timedata[2]++;}

if(timedata[2]>=10)

{timedata[2]=0;timedata[3]++;}

if(timedata[3]>=6)

{timedata[3]=0;timedata[4]++;}

if(timedata[4]>=10)

{timedata[4]=0;timedata[5]++;}

if(timedata[5]==2&&timedata[4]==4)

{timedata[4]=0;timedata[5]=0;}

}

dis[0]=timedata[0]; //相當於匯編 MOV DIS0,TDATA0]]DIS0為顯示掃描時的數值[秒位]~~~~~~

dis[1]=timedata[1];

dis[2]=timedata[2];

dis[3]=timedata[3];

dis[4]=timedata[4];

dis[5]=timedata[5];

ET0=1;

}

  • 上一篇:《動物遊戲之謎》教案設計
  • 下一篇:當前手遊推廣的主流合作方式有?
  • copyright 2024編程學習大全網