用汇编语言编写一个51单片机程序,实现电子秒表功能

2024-10-29 09:49:35
推荐回答(5个)
回答1:

;================================================================
;功能:本程序实现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

回答2:

HAOMIAO EQU 31H
MIAOWEI EQU 32H
SHIMIAO EQU 33H
FENWEI EQU 34H
COU EQU 35H
ORG 0000H
AJMP START
ORG 0003H
AJMP INT0
ORG 000BH
AJMP TIME0
ORG 0030H
START: MOV HAOMIAO,#0
MOV MIAOWEI ,#0
MOV SHIMIAO,#0
MOV FENWEI ,#0
MOV COU,#0
MOV TMOD,#01H
MOV TH0,#40H
MOV TL0,#98H
MOV P2,#0FFH
SETB ET0
SETB TR0
SETB EX0
SETB IT0
SETB EA

K1: LCALL XIANSHI
JB P1.0,K2
LJMP MAIN
LCALL DELY1MS
JNB P1.0,START
K2: JB P1.1,K3
LJMP MAIN
LCALL DELY1MS
JNB P1.1,STOP
K3: JB P1.2,K1
LJMP MAIN
LCALL DELY1MS
JNB P1.2,CLEAR
LJMP K1

START: SETB TR0
LJMP K1

STOP: CLR TR0
LJMP K2

CLEAR: CLR TRO
MOV HAOMIAO,#0
MOV MIAOWEI,#0
MOV SHIMIAO,#0
MOV FENWEI,#0
LJMP K1

TIME0: INC COU
MOV A,COU
CJNE A,#2H,OVER
MOV COU, #0
INC HAOMIAO
MOV A,HAOMIAO
CJNE A,#10,OVER
MOV HAOMIAO,#0
INC MIAOWEI
MOV A,MIAOWEI
CJNE A,#10,OVER
MOV MIAOWEI,#0
INC SHIMIAO
MOV A,SHIMIAO
CJNE A,#6,OVER
MOV SHIMIAO,#0
INC FENWEI
MOV A,FENWEI
CJNE A,#10,OVER
MOV HAOMIAO,#0
MOV MIAOWEI,#0
MOV SHIMIAO,#0
MOV FENWEI,#0
CLR TR0
RETI

MAIN: LCALL XIANSHI

OVER: MOV TH0,#40H
MOV TL0,#98H
RETI

DELY1MS: MOV R7,#4
MOV R6,#125
LOOP2: DJNZ R6,LOOP2
LOOP3: DJNZ R7,LOOP3
RET
XIANSHI: MOV P2,#0FEH
MOV DPTR,#TABLE
MOV A,HAOMIAO
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS

MOV P2,#0FDH
MOV DPTR,#TABLE1
MOV A,MIAOWEI
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS

MOV P2,#0FBH
MOV DPTR,#TABLE
MOV A,SHIMIAO
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS

MOV P2,#0F7H
MOV DPTR,#TABLE
MOV A,FENWEI
MOVC A,@A+DPTR
MOV P0,A
LCALL DELY1MS
RET

TABLE: DB 0C0H, 0F9H ,0A4H, 0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
TABLE1:DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END

回答3:

鬼城,似乎没人鸟......的╮(╯_╰)╭

回答4:

鬼城,似乎没有人鸟...... ╮(╯_╰)╭

回答5:

自己试验吧。