Ⅰ 用匯編語言在c51單片機上實現6(時分秒)位倒計時程序,能夠調節設置時間,並能暫停,終止,繼續
ORG0000H
JMPBEGIN
ORG 000BH
LJMP T0INT
ORG 001BH
LJMP T1INT
LEDD EQU 30H
LEDC EQU36H
SECC EQU37H
MINC EQU38H
HOUR EQU39H
TCNT EQU3AH
ORG0030H
;---------------------------------------
TABLE:;共陰極數碼管顯示代碼表
DB0FCH ;"0" 00H
DB60H ;"1" 01H
DB0DAH ;"2" 02H
DB0F2H ;"3" 03H
DB66H ;"4" 04H
DB0B6H ;"5" 05H
DB0BEH ;"6" 06H
DB0E0H ;"7" 07H
DB0FEH ;"8" 08H
DB0F6H ;"9" 09H
DB0EEH ;"A" 0AH
DB3EH ;"B" 0BH
DB9CH ;"C" 0CH
DB7AH ;"D" 0DH
DB9EH ;"E" 0EH
DB8EH ;"F" 0FH
DB00H ;"" 10H
;DB3FH,06H,5BH,4FH,66H;12345
;DB6DH,7DH,07H,7FH,;6789
;---------------------------------------
DELAY:
MOVR6,#25
DLY01:
MOVR7,#100
DJNZR7,$
DJNZR6,DLY01
RET
;---------------------------------------
BEGIN:
MOVSP,#5FH
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#0F4H
MOVTL1,#48H
MOVLEDC,#6
MOVR0,#LEDD
CLRA
INIT:
MOV@R0,A
INCR0
DJNZLEDC,INIT
SETBET1
SETBTR1
MOVP2,#0
MOVTCNT,#0
MOVHOUR,#0
MOVMINC,#0
MOVSECC,#0
SETBET0
SETBEA
LOOP:
JBP1.0,LOOP1
LCALLDELAY
JBP1.0,LOOP1
JNBP1.0,$
INCHOUR
MOVA,HOUR
CJNEA,#24,LOOPH
LOOPH:
JCLOOPH1
MOVHOUR,#0
LOOPH1:
LCALLDISHOUR
SJMPLOOP
LOOP1:
JBP1.1,LOOP2
LCALLDELAY
JBP1.1,LOOP2
JNBP1.1,$
MOVA,HOUR
JNZLOOPH2
MOVHOUR,#23
SJMPLOOPH3
LOOPH2:
DECHOUR
LOOPH3:
LCALLDISHOUR
SJMPLOOP
LOOP2:
JBP1.2,LOOP3
LCALLDELAY
JBP1.2,LOOP3
JNBP1.2,$
INCMINC
MOVA,MINC
CJNEA,#60,LOOPM
LOOPM:
JCLOOPM1
MOVMINC,#0
LOOPM1:
LCALLDISMIN
SJMPLOOP
LOOP3:
JBP1.3,LOOP4
LCALLDELAY
JBP1.3,LOOP4
JNBP1.3,$
MOVA,MINC
JNZLOOPM2
MOVMINC,#59
SJMPLOOPM3
LOOPM2:
DECMINC
LOOPM3:
LCALLDISMIN
SJMPLOOP
LOOP4:
JBP1.4,LOOP5
LCALLDELAY
JBP1.4,LOOP5
JNBP1.4,$
INCSECC
MOVA,SECC
CJNEA,#60,LOOPS
LOOPS:
JCLOOPS1
MOVSECC,#0
LOOPS1:
LCALLDISSEC
LJMPLOOP
LOOP5:
JBP1.5,LOOP6
LCALLDELAY
JBP1.5,LOOP6
JNBP1.5,$
MOVA,SECC
JNZLOOPS2
MOVSECC,#59
SJMPLOOPS3
LOOPS2:
DECSECC
LOOPS3:
LCALLDISSEC
LJMPLOOP
LOOP6:
JBP3.1,LOOP7
LCALLDELAY
JBP3.1,LOOP7
JNBP3.1,$
CPLTR0
LOOP7:
LJMPLOOP
;---------------------------------------
T1INT:
PUSHACC
CLRTR1
MOVTH1,#0F4H
MOVTL1,#48H
SETBTR1
MOVDPTR,#TABLE
MOVR0,#LEDD
MOVA,LEDC
T1INT0:
JNZT1INT1
MOVP2,#01H
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
SJMPT1INTD
T1INT1:
DECA
JNZT1INT2
MOVP2,#02H
INCR0
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
SJMPT1INTD
T1INT2:
DECA
JNZT1INT3
MOVP2,#04H
INCR0
INCR0
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
SJMPT1INTD
T1INT3:
DECA
JNZT1INT4
MOVP2,#08H
INCR0
INCR0
INCR0
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
SJMPT1INTD
T1INT4:
DECA
JNZT1INT5
MOVP2,#10H
INCR0
INCR0
INCR0
INCR0
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
SJMPT1INTD
T1INT5:
DECA
JNZT1INTD
MOVP2,#20H
INCR0
INCR0
INCR0
INCR0
INCR0
MOVA,@R0
MOVCA,@A+DPTR
CPLA
MOVP0,A
T1INTD:
INCLEDC
MOVA,LEDC
CJNEA,#6,T1INT6
T1INT6:
JCT1INTE
MOVLEDC,#0
T1INTE:
POPACC
RETI
;---------------------------------------
HBCD:
MOVB,#10
DIVAB
SWAPA
ORLA,B
RET
;---------------------------------------
T0INT:
PUSHACC
CLRTR0
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
INCTCNT
MOVA,TCNT
CJNEA,#20,T0INT1
T0INT1:
JCT0INTE
MOVTCNT,#0
MOVA,SECC
ORLA,MINC
ORLA,HOUR
JNZT0INT2
SETBP3.0
CLRTR0
POPACC
RETI
T0INT2:
MOVA,MINC
ORLA,HOUR
JNZT0INT3
MOVA,SECC
CJNEA,#6,T0INT21
T0INT21:
JNCT0INT22
CPLP3.0
T0INT22:
DECSECC
LCALLDISSEC
SJMPT0INTE
T0INT3:
MOVA,SECC
JZT0INT31
DECSECC
LCALLDISSEC
SJMPT0INTE
T0INT31:
MOVSECC,#59
LCALLDISSEC
MOVA,MINC
JZT0INT32
DECMINC
LCALLDISMIN
SJMPT0INTE
T0INT32:
MOVMINC,#59
LCALLDISMIN
DECHOUR
LCALLDISHOUR
T0INTE:
POPACC
RETI
;---------------------------------------
DISSEC:
MOVA,SECC
LCALLHBCD
PUSHACC
ANLA,#0FH
MOV30H,A
POPACC
SWAPA
ANLA,#0FH
MOV31H,A
RET
;---------------------------------------
DISMIN:
MOVA,MINC
LCALLHBCD
PUSHACC
ANLA,#0FH
MOV32H,A
POPACC
SWAPA
ANLA,#0FH
MOV33H,A
RET
;---------------------------------------
DISHOUR:
MOVA,HOUR
LCALLHBCD
PUSHACC
ANLA,#0FH
MOV34H,A
POPACC
SWAPA
ANLA,#0FH
MOV35H,A
RET
;---------------------------------------
END
Ⅱ 單片機時鍾和倒計時器的匯編語言代碼,哪位大俠能給出每個語句的注釋解釋,感激不盡
ORG 0000H;程序起始於地址0000H,(一般不這樣用)
LJMP MAIN;跳到主程序MAIN
ORG 000BH;外部中斷INT0程序的地址,此為規定的
LJMP INTT0;跳到外部中斷INTT0程序
ORG 001BH;外部中斷INT1程序的地址,此也為規定的
LJMP INTT1;跳到外部中斷INTT1程序
ORG 0100H;主程序MAIN地址
MAIN: MOV SP,#60H;給堆棧指針SP附內部數據存儲器地址60H
MOV 31H,#0;給31H地址內清零即(31H)=0
MOV 20H,#0FEH ;(20H)=11111110B
MOV 21H,#0FFH;(21H)=11111111B
MOV P1,20H;P1=11111110B
LCALL SHEZHI1;調用程序段SHEZHI1
MOV 20H,#0FDH;(20H)=11111101B
MOV P1,20H;P1=11111101B
MOV 40H,#10;(40H)=0AH
SETB EA;開總中斷
SETB ET0;開定時中斷T0
MOV TMOD,#11H;設置T0工作於定時方式1
MOV TH0,#3CH;定時初值設置高位
MOV TL0,#0B0H;定時初值設置低位
SETB TR0;允許T0中斷
LL: LCALL KEY;調用KEY
LCALL KEYC;調用KEYC
SJMP LL;循環調用回LL
INTT0: PUSH ACC;將ACC值壓棧
PUSH PSW;將PSW值繼續壓棧
SETB RS1;RS1位置1
SETB RS0;RS0位置1,即選中內部數據存儲器組的3組
DJNZ 40H,DOWN;判斷十次結束否?且計數值自減一,若沒有夠十次,則轉入程序DOWN , 否則順序執行
MOV 40H,#10;繼續在(40H)存入計數值十
MOV R0,#41H;(R0)=41H
MOV A,@R0 ; 判秒是否到60
ADD A,#1;A中值加一
DA A;十進制調整
MOV @R0,A;再送回原單元
CLR C;清進位位
SUBB A,#60H;與60相減
JC DOWN;通過判斷進位位看是否到60了,沒到就去DOWN,到了就順序執行
MOV @R0,#0;41H單元清零
INC R0;地址自加一
MOV A,@R0 ; 判分是否到60
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判時是否到24
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#24H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判日是否到指定天數
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
MOV R4,A ;月份送R4,本月天數送R5
JNB ACC.4,NEXT2
CLR C
SUBB A,#06H
NEXT2: MOV DPTR,#DAYTAB
DEC A
MOVC A,@A+DPTR
MOV R5,A
CJNE R4,#2,NEXT
JNB 08H,NEXT1
NEXT: INC R5
NEXT1: DEC R0
MOV A,R5
CLR C
SUBB A,@R0
JNC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ; 判月是否到13
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#13H
JC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ;判年低位是否到00
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
DOWN: MOV A,#42H
CJNE A,4EH,DOWN2
MOV A,#43H
CJNE A,4FH,DOWN2
CLR 07H
DOWN2: JB 06H,DOWN4
DOWN4: CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
DAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H
Ⅲ 51單片機匯編語言倒計時60秒循環程序
可以在SJMP $這里改成判斷R2是不是為0,如是就重新載入60…如果不是就跳回重新判斷R2
Ⅳ 單片機19秒倒數計時器,不要按鍵的,匯編語言,程序語言簡單些
ORG 0000H ;程序開始地址
LJMP MAIN ;跳到主程序
ORG 000BH ;定時器入口地址
LJMP TIME0 ;定時器中斷時,跳到TIME0處
ORG 0030H ;主程序地址
MAIN:MOV TMOD,#01H ;設置定時器T0工作模式1
MOV TL0,#0B0H ;賦初值,定時50ms(在晶振為12MHz)
MOV TH0,#3CH
SETB EA ;開總中斷
SETB ET0 ;開定時器T0中斷
SETB TR0 ;啟動T0定時器
MOV R3,#20 ;R3為1s計數單元,計數20次為1S MOV R4,#19 ;19s計數單元
DISP:MOV A,R4 ;顯示子程序; MOV B,#10 DIV AB ;計數單元的數除以10,商給A,余數給B
MOV DPTR,#TAB ;DPTR指向編碼表位置TAB
MOVC A,@A+DPTR ;根據A中的值調出編碼表中的數,並賦給A
MOV P1,A ;把A賦給51H單元 SETB P2.0 LCALL DLL CLR P2.0
MOV A,B ;把B賦給A
MOVC A,@A+DPTR ;根據A中的值調出編碼表中的數,並賦給A
MOV P1,A ;把A賦給P1顯示 SETB P2.1 LCALL DLL CLR P2.1 LJMP DISP RET ;子程序返回;---定時器中斷子程序,定時50ms----;
TIME0:MOV TH0,#03CH ;賦初值
MOV TL0,#0B0H
DJNZ R3,EXT1 ;1s到了?沒有轉去EXT1
MOV R3,#20 ;1s到了,重新賦值
DEC R4 ;1S到了R4減1CJNE R4,#0,EXT1 ;19s到了嗎,沒有到則轉去EXT1MOV R4,#19 ;19S到了重新賦值EXT1:RETI ;中斷返回;----10ms延時子程序-------------;
DLL:MOV R2,#200
D11:MOV R1,#1
DJNZ R1,$
DJNZ R2,D11
RET
;----編碼表-------;
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
Ⅳ 51單片機倒計時程序匯編求解,求注釋
程序不全,只能望文生義了
RERI:
MOVA,R1;取R1的值
MOVDPTR,#TAB;將表首址送數據指針
MOVP2,#11110001B;送位選碼第一位
MOVCA,@A+DPTR;取顯示數據
MOVP1,A;送顯示段碼
LCALLTIME;取時間值
MOVP2,#11110010B;送位選第二位
MOVA,R4;將R4值送A
MOVCA,@A+DPTR;查表得顯示段碼
MOVP1,A;送顯示
LCALLTIME ;取時間值
MOVP2,#11111100B;送位碼低三位
MOVA,R2;將R2送A
MOVCA,@A+DPTR;查表取顯示段碼
MOVP1,A;送顯示
LCALLTIME;取時間值
JNBK2,D1;K2減1不為零轉D1
JNBK3,D2;K3減1不為0轉D2
SJMPRERI;轉到RERI
Ⅵ 單片機的倒計時程序
//工程名稱:99秒倒計時//功能描述:程序開始顯示99秒等待開始倒計時,當再次按下開關後計時//停止,當再按下開關後計時//復位實際上是單片機復位,重新開始!//通過本程序新的認識: 1.BCD數碼管的使用 2.十進制到BCD碼轉化 //3.C51的等待按鍵作用//2. temp=99;i=temp/10;j=temp%10;i=(i<<4);dis=i+j;P0=dis;//3.while(sw==1){;}// 判按下,下則出 while(sw==0){;}//判松開// ,開則出#includesbit sw=P3^5; //定義開關main(){ unsigned char temp,dis;unsigned int i,j,k,t;// P0=0x88; //初試時檢測數碼管是否正常// for(k=0;k<40000;k++); temp=99;i=temp/10;j=temp%10;i=(i<<4);dis=i+j;P0=dis;//啟動是顯示99while(sw==1){;}// 判按下,下則出while(sw==0){;}//判松開 ,開則出 第一次按開關for(t=0;t<5;t++)//循環來減{for(k=0;k<30000;k++);temp--;i=temp/10;j=temp%10;i=(i<<4);dis=i+j;P0=dis;for(k=0;k<30000;k++);if(sw==0) break;// while(sw==1){;}// while(sw==1){;}// break;}while(sw==1){;}// 判按下,下則出while(sw==0){;}//判松開 ,開則出 第一次按開關while(sw==1){;}// 判按下,下則出while(sw==0){;}//判松開 ,開則出 第一次按開關
Ⅶ S52單片機交通信號燈顯示倒計時匯編程序
摘要 您好,親.您所問的S52單片機交通信號燈顯示倒計時匯編程序 為您提供答案如下:
Ⅷ 求一個基於單片機的用匯編語言寫的倒計時程序
剛寫的程序,可以通過S0(功能鍵),S1(加鍵),S2(減鍵)設定初值,倒數為00-00-00時蜂鳴器響,通過八位LED顯示;
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位選碼表
uchar code an[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選碼表
sbit s0=P3^3; //設置功能鍵
sbit s1=P3^5; //設置『加』鍵
sbit s2=P3^6; //設置『減』鍵
sbit beep=P3^7; //設置蜂鳴器
void delay(uint z);
void display();
void init();
void keyscan();
uchar shi,fen,miao,nam;
void main()
{
init();
while(1)
{
display();
keyscan();
beep=1;
if (miao==0&&fen==0&&shi==0)//當倒數計時為00-00-00時蜂鳴器響
{
beep=0;
TR0=0;
}
}
}
void delay(uint z)
{
uint i,j;
for (i=z;i>0;i--)
for (j=110;j>0;j--);
}
void display() //我這里P2為位選,P0為段選,顯示格式為 時-分-秒
{
uchar s,g;
s=shi/10;
g=shi%10;
P2=wei[7];
P0=an[s];
delay(1);
P2=wei[6];
P0=an[g];
delay(1);
P2=wei[5];
P0=0xbf;
delay(1);
s=fen/10;
g=fen%10;
P2=wei[4];
P0=an[s];
delay(1);
P2=wei[3];
P0=an[g];
delay(1);
P2=wei[2];
P0=0xbf;
delay(1);
s=miao/10;
g=miao%10;
P2=wei[1];
P0=an[s];
delay(1);
P2=wei[0];
P0=an[g];
delay(1);
}
void init()
{
miao=10; //設定初值為 00-01-10
fen=1;
shi=0;
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
nam++;
if (nam==20)
{
nam=0;
if (miao==0)
{
miao=60;
if (fen==0)
{
fen=60;
if (shi==0)
shi=24;
shi--;
}
fen--;
}
miao--;
}
}
void keyscan()
{
uchar key,num;
if (s0==0)
{
delay(5);
if (s0==0)
{
key++;
if (key==4)
key=0;
}
while(!s0)
display();
}
if (s1==0)
{
delay(5);
if (s1==0)
{
num=1;
}
while(!s1)
display();
}
if (s2==0)
{
delay(5);
if (s2==0)
{
num=2;
}
while(!s2)
display();
}
switch(key)
{
case 0:TR0=1;break;
case 1:TR0=0;
if (num==1)
{
num=0;
miao++;
if (miao>=60)
miao=0;
display();
}
if (num==2)
{
num=0;
if (miao==0)
miao=60;
miao--;
display();
}
break;
case 2:
if (num==1)
{
num=0;
fen++;
if (fen>=60)
fen=0;
display();
}
if (num==2)
{
num=0;
if (fen==0)
fen=60;
fen--;
display();
}
break;
case 3:
if (num==1)
{
num=0;
shi++;
if (shi>=24)
shi=0;
display();
}
if (num==2)
{
num=0;
if (shi==0)
shi=24;
shi--;
display();
}
break;
}
}
Ⅸ 8051單片機30秒倒計時程序用匯編語言編寫
用STC串口助手吧
裡面有常式,你這個是倒計時。
DELAY30000US:
;@11.0592MHz
PUSH
30H
PUSH
31H
MOV
30H,#54
MOV
31H,#194
NEXT:
DJNZ
31H,NEXT
DJNZ
30H,NEXT
POP
31H
POP
30H
RET
Ⅹ 匯編語言 51單片機 倒計時器程序
這是一個倒計時案例,你可以參考一下:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#9
CLR 00H
CLR 01H
LOOP:
JB P1.0,LP01
JNB P1.0,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P1.1,LP02
JNB P1.1,$
SETB 01H
SJMP LOOP0
LP02:
JB P1.2,LOOP0
JNB P1.1,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789