❶ 在51單片機匯編語言中,MOV DPTA,#TABLE 查表指令 怎麼個查法
這個就是把表TABLE的首地址放到的DPTA中。
然後通過操作DPTA來訪問TABLE表中的數據
❷ 用匯編語言編寫一個51單片機程序,實現電子秒錶功能
;================================================================
;功能:本程序實現P0口的對數碼管動態顯示秒錶的分、秒、1/100秒;
; 計時程序由中斷服務程序實現,採用定時計數器T0工作方式1;
; P2口實現對數碼管的片選功能
;================================================================
;==========================初始化================================
SHUCHU EQU P2 ;定義P0口為輸出口
PIANXUAN EQU P1 ;定義P2口為片選口
MIAO EQU 30H
FEN EQU 31H
MIAO0 EQU 32H
SHUZI EQU 33H
C_0 BIT 20H.0
;======================系統程序開始==============================
ORG 00H
LJMP START
ORG 03H
LJMP ON_OFF
ORG 0BH
LJMP T0_1
ORG 13H
LJMP RESET
ORG 30H
START:
CALL INIT
SETB C_0
MOV MIAO,#00
MOV MIAO0,#00
MOV FEN,#00
MOV DPTR,#TAB
MOV R2,#5
MAIN:
JNB C_0,$
CLR C_0
LL: CALL DISPLAY
CALL SHIJIAN
JMP MAIN
;========================時間子程序=============================
;輸入:"30H、31H、32H"
;輸出:無
;實現的功能:分、秒、百分之秒的計算。
;===============================================================
SHIJIAN:
DJNZ R2,TIAOCHU
MOV R2,#5
INC MIAO0
MOV R3,MIAO0
CJNE R3,#100,TIAOCHU
MOV MIAO0,#00
INC MIAO
MOV R3,MIAO
CJNE R3,#60,TIAOCHU
MOV MIAO,#00
INC FEN
MOV R3,FEN
CJNE R3,#60,TIAOCHU
MOV FEN,#00
TIAOCHU:RET
;========================顯示子程序=============================
;輸入:"A"
;輸出:"P2口"
;實現的功能:顯示秒、分、百分之妙
;===============================================================
DISPLAY:MOV SHUZI,MIAO0
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#10H ;片選
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#20H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H
MOV SHUZI,MIAO
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#04H ;片選
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#08H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H
MOV SHUZI,FEN
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#01H ;片選
CALL DELAY
MOV PIANXUAN,#00H
MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#02H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H
RET
;========================計運算元程序=============================
;輸入:30H
;輸出:"A和B"
;實現的功能:把33H中的數據十位和個位分離出來
;===============================================================
JISUAN:MOV A,SHUZI ;數據放在A中
MOV B,#10 ;除數放在B中
DIV AB ;商放在A中,余數放在B中
RET
;====================復位中斷服務程序============================
;輸入;無
;輸出: 無
;實現的功能:把30H、31H、32H中的數據清零。
;================================================================
RESET:PUSH ACC
MOV 30H,#00H
MOV 3H,#00H
MOV 32H,#00H
CALL DELAY
POP ACC
RETI
;====================啟停中斷服務程序============================
;輸入;無
;輸出: 無
;實現的功能:關閉定時器
;================================================================
ON_OFF:CPL TR0
CALL DELAY
RETI
;====================定時中斷0服務子程序========================
;輸入:無
;輸出:無
;實現的功能:實現定時20MS,影響標中斷志位C_0
;===============================================================
T0_1:MOV TL0,50H ;設置定時初值
MOV TH0,51H
SETB C_0 ;定時標志位清0
RETI
;========================中斷設置子程序=========================
;輸入:無
;輸出:無
;實現的功能:初始化設置定時器,設置初值,開中斷0、中斷1,定時器0.
;===============================================================
INIT:MOV TMOD,#01H ;定時器0工作方式1
MOV DPTR,#65536-20000
MOV 50H,DPL
MOV 51H,DPH
MOV TL0,50H ;設置定時初值
MOV TH0,51H
MOV IE,#87H ;開定時器中斷0
MOV TCON,#15H
RET
;======================延時程序==================================
;輸入;無
;輸出: 無
;實現的功能:延時一段時間
;================================================================
DELAY:MOV R6,#80
L7:MOV R5,#60
L8:DJNZ R5,$
DJNZ R6,L7
RET
;======================共陽查表數據==============================
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;===========================結束=================================
END
❸ 如何用單片機匯編語言設計一個秒錶
C51 http://..com/question/42921479.html?fr=qrl&cid=192&index=1
http://..com/question/29519178.html?fr=qrl&cid=192&index=2
1.基於單片機的設計
2.計時精度:百分之一秒
2.5鍵操作完成 清除 啟動 停止 設置初值 程序退出的功能
採用LED顯示時、分、秒、百分之一.PROTEL圖最好也有
用89C51,外接晶振,復位電路,二個數碼管,二個按鍵,做一個電子秒錶,具體要求為用按鍵起停電子表,可用按鍵設計倒計時時間(如10S,20S,60S),並啟動倒計時功能。能用按鍵選擇以上兩功能之一。
三、程序代碼:
A_BIT EQU 20H
B_BIT EQU 21H
TEMP EQU 22H
MOV P3,#0FFH
MOV P0,#0FFH
CLR F0
CLR F1
MOV DPTR,#NUMTAB
MOV P3,#0FFH
MOV P0,#0FFH
START:JB P3.6,START1
ACALL DELAY10
JB P3.6,START
JNB P3.6,$
LJMP GN1
START1: JB P3.7,START
ACALL DELAY10
JB P3.7,START1
JNB P3.7,$
LJMP GN2
GN1:
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
LCALL DPLOP1
C1: JB P3.6,B1
ACALL DELAY10
JB P3.6,C1
JNB P3.6,$
CPL F0
ZT1: ; MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT1
JNB P3.6,$
LCALL DPLOP1
B1: JB P3.7,LOOP1
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP1: DJNZ R3,TIME1
DJNZ R2,JS1
INC TEMP
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1
ACALL OVER
RET
GN2: MOV A,#14H
MOV TEMP,A
MOV P3,#0FFH
MOV P0,#14H
GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV DPTR,#NUMTAB
DPLOP2: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL DELY1
SETB P2.6
C2: JB P3.6,B2
ACALL DELAY10
JB P3.6,C2
JNB P3.6,$
ZT2: MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT2
JNB P3.6,$
B2: JB P3.7,LOOP2
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP2: DJNZ R3,TIME2
DJNZ R2,JS2
DEC TEMP
MOV A,TEMP
JNZ GOON2
ACALL OVER
RET
OVER: AJMP START
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL DELY1
SETB P2.6
RET
END
❹ 用單片機的匯編語言編寫一個(十秒秒錶 的編程)
這伍答是一個秒錶,有腔顫慧按鍵實現 啟動、暫停核清零功能洞畝。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
❺ 51單片機的匯編編程
ORG 0000H
MOV DPTR,#2000H
MOV R0,#2AH ;#2AH * #60H=#1000H
MOV R1,60H
CLR R2
CLR R3
LOOP:CLR A
MOVC A,@A+DPTR
CJNE A,#41H,QUET ;與A的ASCII碼#41H比較,不等->轉移
MOV A,R2
INC A
MOV A,R2
JC JIAYI ;溢出一次,R3+1
LJMP QUET
JIAYI:INC R3
LJMP QUET
QUET:INC DPTR
DJNZ R0,LOOP
DJNZ R1,LOOP
MOV DPTR,#2010H
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
END