用单片机80c51或80c52汇编语言设计时间计时器的硬件及相关软件

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-06
用单片机汇编语言设计计时系统,能显示时间

这是我以前在网上找的一个8086下的时间显示程序,希望对你有用。
;程序使用方法:
;按Q键退出
;按F键全屏
;按P键暂停,暂停状态下按任意键继续

Top EQU 6
Left EQU 0
Horizo EQU 0CDH ;可以换成0C4H
Vertic EQU 0BAH ;可以换成0B3H

assume cs:code

code segment

MsgStr db 'Q-Quit F-Full screen P-Pause(When paused, push any key to continue.)','$'

num0 db 1,1,1,1,1,1,0
num1 db 0,1,1,0,0,0,0
num2 db 1,1,0,1,1,0,1
num3 db 1,1,1,1,0,0,1
num4 db 0,1,1,0,0,1,1
num5 db 1,0,1,1,0,1,1
num6 db 1,0,1,1,1,1,1
num7 db 1,1,1,0,0,0,0
num8 db 1,1,1,1,1,1,1
num9 db 1,1,1,1,0,1,1 ;每个数字对应的七段码

LED1 db Horizo,0,1,0,2,0,3,0,4,-1
LED2 db Vertic,1,5,2,5,-1,?,?,?,?
LED3 db Vertic,4,5,5,5,-1,?,?,?,?
LED4 db Horizo,6,1,6,2,6,3,6,4,-1
LED5 db Vertic,4,0,5,0,-1,?,?,?,? ;每个"数码管"的形状
LED6 db Vertic,1,0,2,0,-1,?,?,?,? ;后面的?是为了对齐数据,方便寻址的
LED7 db Horizo,3,1,3,2,3,3,3,4,-1 ;第一个字节是显示出来的字符

TEMP db 11 DUP (?)

start:
mov ax,cs
mov ds,ax

mov ah,06H
mov al,0
mov bh,11001010B
mov cx,0
mov dx,1950H
int 10H

mov ah,01H
mov cx,2000H
int 10H

mov ah,09h
mov dx,offset MsgStr
int 21H

StaDis:
call Display

mov ah,0BH
int 21H
cmp al,0
jz StaDis

mov ah,07H
int 21H

cmp al,'q'
jnz Next1
jmp ExitPro
Next1:
cmp al,'f'
jnz Next2
mov ax,000EH
int 10H
mov ax,0002H
int 10H

mov ah,01H
mov cx,2000H
int 10H

mov ah,09h
mov dx,offset MsgStr
int 21H
Next2:
cmp al,'p'
jnz Default
mov ah,07H
int 21H
Default:
jmp StaDis

ExitPro:
mov ax,4C00H
int 21H

Display proc near
;获得时间,并将其转换为供DisNum处理的BCD数据
;处理后的数据存放在TEMP里
push ax
push cx
push dx

mov ah,02CH
int 21H

mov al,ch
aam
mov TEMP,ah
mov TEMP+1,al
mov BYTE ptr TEMP+2,-1

mov al,cl
aam
mov TEMP+3,ah
mov TEMP+4,al
mov BYTE ptr TEMP+5,-1

mov al,dh
aam
mov TEMP+6,ah
mov TEMP+7,al
mov BYTE ptr TEMP+8,-1

mov al,dl
aam
mov TEMP+9,ah
mov TEMP+10,al

call DisClo

pop dx
pop cx
pop ax
ret
Display endp

DisClo proc near
;显示TEMP中的BCD数据
push ax
push bx
push cx
push dx

mov dh,Top
mov dl,Left
mov bx,offset TEMP
mov cx,11
DN1:
cmp BYTE ptr [bx],10
jnc NotNum

mov al,[bx]
mov si,offset num0
mov di,offset LED1
mov ah,7
mul ah
add si,ax ;将BCD码转换成对应的7段码表的地址

push cx
mov cx,7
DN1i:
cmp BYTE ptr [si],0
jz off
stc
call DisLED
jmp DN1iOut
off:
clc
call DisLED
DN1iOut:
inc si
add di,10
loop DN1i

pop cx

add dl,7
inc bx
loop DN1
jmp DNOut
NotNum:
cmp BYTE ptr [bx],-1
jz IsDot
jmp ExitPro
IsDot:
call DisDot

add dl,7
inc bx
loop DN1
DNOut:
pop dx
pop cx
pop bx
pop ax
ret
DisClo endp

DisLED proc near
;最终显示"数码管"的过程
;入口参数:
;[DI]=LED形状
;DH,DL=显示位置
;CF=0,清除该"数码管",CF=1显示该数码管
push ax
push bx
push cx
push dx
push di

jc on
mov al,' '

jmp DL1s
on:
mov al,[di]
DL1s:
inc di
DL1:
push dx

mov ah,[di]
add dh,ah
inc di
mov ah,[di]
add dl,ah
inc di

mov ah,02H
mov bh,0
int 10H

mov ah,0Ah
mov cx,1
int 10H

pop dx

cmp BYTE ptr [di],-1
jnz DL1

pop di
pop dx
pop cx
pop bx
pop ax
ret
DisLED endp

DisDot proc near
;显示冒号
push ax
push bx
push cx
push dx

add dh,2
add dl,2

mov ah,02H
mov bh,0
int 10H

mov ah,0Ah
mov al,0DBH
mov cx,2
int 10H

add dh,2

mov ah,02H
mov bh,0
int 10H

mov ah,0Ah
mov cx,2
int 10H

pop dx
pop cx
pop bx
pop ax
ret
DisDot endp

code ends

end start

windows phone此款应用可以同时运行8个定时器或者倒数计时器,并且可以随时暂停和恢复。即使您的手机处于关机状态,该计时器仍然保持运行。当倒数计时器期满时将会发出蜂鸣警报声。主要特点:-8个定时器或者倒数计时器同时运行-在关机状态下,后台支持运行-倒数计时器时间可最高达到23:59:59分钟-自定义倒数计时器图标-免费 系统要求: wp7.0、wp7.8、wp8.0

;实用单片机电子钟的制作
;主程序(MAIN),如下:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME

ORG 0300H
MAIN:
mov 20h,#00h
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV IP,#02H ;IP,IE初始化
MOV IE,#82H
MOV TMOD,#01H ;设定定时器工作方式?
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;启动定时?
MOV SP,#40H ;重设堆栈指针
NEXT: LCALL DISP ;调用显示子程序?
LCALL KEY ;调用按键检测子程序
JZ NEXT ;
LCALL ANKEY ;调用按键处理子程序
SJMP NEXT ;重新循环
NOP
NOP
NOP
;定时中断处理程序:
TIME: PUSH ACC ;保护现场
PUSH PSW
MOV TL0,#0B4H ;赋定时初值
MOV TH0,#3CH
INC 20H ;
MOV A,20H
CJNE A,#20,RETI1
MOV 20H,#00H ;一秒钟时间到
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H ;一分钟时间到
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H ;一小时时间到
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H ;到时间达到24小时,清零.
RETI1: POP PSW ;恢复现场
POP ACC
RETI ;中断返回?
NOP
NOP

;显示子程序
DISP: ANL 2FH,#10H ;处理小数点
MOV A,21H ;处理秒21H-->2DH,2EH
ANL A,#0FH
ORL A,2FH
MOV 2FH,A
MOV A,21H
ANL A,#0F0H
SWAP A
MOV 2EH,A
ANL 2DH,#10H
MOV A,22H ;处理分钟22H-->2CH,2DH
ANL A,#0FH
ORL A,2DH
MOV 2DH,A
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2CH,A
ANL 2BH,#10H
MOV A,23H ;处理小时23H-->2AH,2BH
ANL A,#0FH
ORL A,2BH
MOV 2BH,A
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2AH,A
MOV R0,#2FH ;显示偏移量
MOV R3,#06H
MOV DPTR,#TABLE
MOV A,#0BFH
LOOP1: MOV B,A ;
MOV P2,a
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,a ;送显示
MOV R2,#80H ;延时
DJNZ R2,$
DEC R0
MOV A,B
RR A
DJNZ R3,LOOP1 ;循环显示
RET

TABLE: db 28h,7eh,0a2h,62h,74h,61h,21h ;不带小数点
DB 7ah,20h,60h,00,00,00,00,00,00
DB 8H,5eH,82H,42H,54H,41H,1H,5aH ;带小数点
DB 00H,40H,00,00,00,00,00,00
NOP
NOP
;按键判断程序
KEY: MOV P3,#0FFH ;
MOV A,P3
CPL A
ANL A,#3CH
JZ RETX ;无键按下则返回
LCALL DISP ;
LCALL DISP
MOV A,P3
CPL A
ANL A,#3CH
JZ RETX ;键盘去抖动。
MOV R6,A ;将键值存入R6。
LOOP2: LCALL DISP ;
MOV A,P3
CPL A
ANL A,#3CH
JNZ LOOP2 ;等待键释放
MOV A,R6
RETX: RET
NOP
NOP
;按键处理子程序
ANKEY: CLR EA ;关中断
LX: MOV A,R6
JB ACC.2,L1 ;是功能键转L1
JB ACC.3,L2 ;是确认键转L2
JB ACC.4,L3 ;是减1键转L3
JNB ACC.5,L12 ;不是增1键,转L12
JB 2BH.4,L6 ;判断使哪一位(时、分、秒)的值加1
JB 2DH.4,L8
JB 2FH.4,L9

L12: LCALL DISP
LCALL DISP
LCALL KEY ;判断有无键按下。
JZ L12
LJMP LX

L2: MOV 25H,#00H ;确认键处理程序
CLR 2BH.4
CLR 2DH.4
CLR 2FH.4
SETB EA
RET

L3: JB 2BH.4,L61 ;增一键处理程序
JB 2DH.4,L81
JB 2FH.4,L91
AJMP L12

L1: MOV A,25H ;功能键处理程序
JZ LB1
JB ACC.0,LB2
JB ACC.1,LB3
JNB ACC.2,L12
LB1: MOV 25H,#01H ;25H单元是标志位,(25H)=01H调节时单元的值
SETB 2BH.4
CLR 2DH.4
CLR 2FH.4
AJMP L12

LB3: MOV 25H,#04H ;25H单元是标志位,(25H)=01H调节秒单元的值
SETB 2FH.4
CLR 2DH.4
CLR 2BH.4
AJMP L12

LB2: MOV 25H,#02H ;25H单元是标志位,(25H)=01H调节分单元的值
SETB 2DH.4
CLR 2BH.4
CLR 2FH.4
AJMP L12

L61: AJMP L611 ;
L81: AJMP L811 ;
L91: AJMP L911
L6: MOV A,23H ;时加一
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,L15
L15: JC L112
MOV 23H,#00H
L112: AJMP L12

L8: MOV A,22H ;分加一
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,L16
L16: JC L112
MOV 22H,#00H
AJMP L12

L9: MOV A,21H ;秒加一
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,L17
L17: JC L112
MOV 21H,#00H
AJMP L12

L611: MOV A,23H ;时减一
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#99H,L112
MOV 23H,#23H
AJMP L12

L811: MOV A,22H ;分减一
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,L112
MOV 22H,#59H
AJMP L12

L911: MOV A,21H ;秒减一
ADD A,#99H
DA A
MOV 21H,A
CJNE A,#99H,L112
MOV 21H,#59H
AJMP L12
NOP
NOP
END

楼上回答的还真搞笑,跟BIOS有锤子关系,.....
争个软时钟,就是利用8051的定时器功能就能实现一个简单的电子钟,完全能满足你的功能....
不过小子,虽然这是个很简单的东西,不过没几个人愿意去帮你搞,真是搞起来还是很麻烦...

楼主在网上努力找吧,应该可以找到日历时钟程序

好像是在BIOS里面有中断可以调用的.

  • 用单片机80c51或80c52汇编语言设计时间计时器的硬件及相关软件_百度知 ...
    答:;实用单片机电子钟的制作 ;主程序(MAIN),如下:ORG 0000H AJMP MAIN ORG 000BH AJMP TIME ORG 0300H MAIN:mov 20h,#00h MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H MOV IP,#02H ;IP,IE初始化 MOV IE,#82H MOV TMOD,#01H ;设定定时器工作方式?MOV TL0,#0B0H MOV TH0,#3CH...
  • 80C51的程序能用再80C52上吗
    答:80C52比80C51多一个内部定时器T2。另外,52的容量比51的大。除此,两者的I/O口引脚相同,各寄存器的定义与地址相同。因此,C51的程序可直接用到C52上,但C52的程序不一定能用到C51上。
  • 80C51单片机简介?
    答:80C51单片机属于MCS-51系列单片机,由Intel公司开发。概述:1、80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。2、80C51内部有时钟电路,但需要石英晶体和微调电容外接,由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,...
  • 80c51和80C52的区别?
    答:51是4K程序存储器,52是8K程序存储器。5几就是几乘4K的程序存储器。82有三个定时器,51有两个。52有只能寄存器简介寻址的RAM 80-ff,也就说他的RAM是256字节,SFR与高字节RAM具有相同的地址,但是寻址方式不同。51的RAM只有128个字节。52的FLASH是8K,51是4K。EPROM型单片机:内部具有EPROM型程序...
  • 80c52的简介
    答:它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。80C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/...
  • 80C51有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU响应各...
    答:80C51有5个中断源,80C52有六个中断源,各入口地址 0003H-000AH 外部中断0中断地址区 000BH-0012H 定时器/计数器0中断中断地址区 0013H--001AH外部中断1中断地址区 001BH-0022H定时器/计数器1中断地址区 0023H-002AH串行中断地址区 复位RST使单片机进入某种确定的初始状态,PC值归零(0000H)各个...
  • 什么是SMOD寄存器?
    答:特殊功能寄存器在80C51单片机中被称为SFR(Special Function Register),是专门用于访问单片机内部各种特殊功能寄存器的数据类型。SFR占用一个内存单元,其值域范围是0到255。通过使用SFR,可以方便地访问80C51单片机内部的所有特殊功能寄存器。例如,通过指令“sfr P1 = 0x90”可以定义P1端口在片内的寄存器地址...
  • 80C51单片机中储存器 是RAM和ROM分开编址的吗
    答:80C51单片机采用的是哈佛结构,就是说把RAM和ROM分开,RAM和ROM分别具有自己的总线,这样可以使程序运行的速度更快和更安全。所以80C51单片机中储存器是分开编址的。这样回答不知道可不可以呢!
  • SFR是什么意思,指代什么
    答:在80C51单片机中,SFR是各个功能模块对应的寄存器,它们负责存储相应模块的控制指令、状态信息或数据。SFR是80C51单片机中非常特殊且重要的部分。随着80C51系列单片机功能的增强和扩展,几乎所有的改进都是通过增加特殊功能寄存器SFR来实现的。80C51定义了26个SFR,而80C52在此基础上增加了5个,总数达到31个。2...
  • 80C51单片机内部RAM有哪几个具体的单元啊
    答:寄存器组就是R0-R7,一共是8*4是32字节。位寻址就是对每一位寻址,一个字节可以有8位,位地址可以从0-7F,一共是16个字节。30-7FH有80个字节单元,可以采用字节字节寻址的方法访问。堆栈区及堆栈指示区 堆栈是在片内RAM中数据先进后出的一个存储区域。堆栈指针SP是存放当前堆栈栈顶所对应的存储...