采用mcs-51单片机时钟频率为6MHZ采用T0工作方式2
OUTBIT EQU 08002h ; 位控制口
OUTSEG EQU 08004h ; 段控制口
IN EQU 08001h ; 键盘读入口
LEDBuf EQU 60h ;显示缓冲
Hour EQU 40h ;存放时信息计数单元
Minute EQU 41h ;存放分信息计数单元
Second EQU 42h ; 存放秒信息计数单元
C100us EQU 43h
Tick EQU 10000
T100us EQU 256-50
LGMP StArt ;跳转到程序入口
org 000Bh
T0Int:
PUSH DPL
PUSH DPH
PUSH ACC ;保护断点
ORL P1, #01H
ANL P1, #0FEH ;当车进停车场时由系统产生下降沿脉冲触发硬件电路开始计时
MOV A, C100us+1
JNZ Goon
DEC C100us
Goon:
DEC C100us+1
MOV A, C100us
ORL A, C100us+1
JNZ Exit ;判断是否溢出10000次
MOV C100us, #high(Tick)
MOV C100us+1, #low(Tick) ;从新设置技术单元C100us的初值
INC Second ;秒单元加1
MOV A, Second
CJNE A, #60, Exit ;判断秒技术单元是否累加到60
MOV Second, #0 ;需要向分计数单元进位秒计数单元先清零
INC Minute ;分计数单元加1
MOV A, Minute
CJNE A, #60, Exit ;判断分计数单元是否加到60
MOV Minute, #0 ;需要向时计数单元进位分技术单元先清零
INC Hour ;时计数单元加1
Exit:
POP DPL
POP DPH
POP PSW ;恢复断点
RETI
DelAy: ; 延时子程序
MOV r7, #0
DelAyLoop:
DJNZ r7, DelAyLoop
DJNZ r6, DelAyLoop ;实现延时
RET
LEDMAP: ; 八段管显示码
dB 3fh, 06h, 5Bh, 4fh, 66h, 6dh, 7dh, 07h
dB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
DisplAyLED:
MOV r0, #LEDBuf
MOV r1, #6 ; 共6个八段管
MOV r2, #00100000B ; 从左边开始显示
Loop:
MOV DPTR, #OUTBIT
MOV A, #0
MOVX @DPTR, A ; 关所有八段管
MOV A, @r0
MOV DPTR, #OUTSEG
MOVX @DPTR,A ;将要显示的值放到段控制口
MOV DPTR, #OUTBIT
MOV A, r2
MOVX @DPTR, A ; 显示一位八段管
MOV r6, #1
CAll DelAy ;调用延时程序
MOV A, r2 ; 显示下一位
RR A
MOV r2, A
INC r0 ;找到要显示下一位地址
DJNZ r1, Loop ;判断是否全部显示
RET
ToLED:
MOV DPTR, #LEDMAp
MOVC A, @A+DPTR ;查表显示
RET
StArt:
MOV TMOD, #02h ; 模式2, 定时器
MOV TH0, #T100us
MOV TL0, #T100us ;给T0赋初值
MOV IE, #10000010B ; EA=1, IT0 = 1
MOV Hour, #0
MOV Minute, #0
MOV Second, #0 ;将时分秒单元分别清零
MOV C100us, #high(Tick)
MOV C100us+1, #low(Tick) ;设定计数初值
SETB TR0 ; 启动定时器T0
MLoop:
MOV A, Hour
MOV B, #10
DIV AB ;求的时的高位放到A
CAll ToLED ;调用查表程序
MOV LEDBuf, A;将显示值放到显示缓冲区
MOV A, B
CAll ToLED
ORL A, #80h ;得到时的低位值:
MOV LEDBuf+1, A;将显示值放到显示缓冲区的下一地址
MOV A, Minute
MOV B, #10
DIV AB ;求的分的高位放到A
CAll ToLED ;调用查表程序
MOV LEDBuf+2, A;将显示值放到显示缓冲区下一地址
MOV A, B
CAll ToLED
ORL A, #80h ;得到时的低位值:
MOV LEDBuf+3, A ;将显示值放到显示缓冲区的下一地址
MOV A, Second
MOV B, #10
DIV AB
CAll ToLED ;调用查表程序
MOV LEDBuf+4, A ;将显示值放到显示缓冲区的下一地址
MOV A, B
CAll ToLED ;调用查表程序
MOV LEDBuf+5, A ;将显示值放到显示缓冲区的下一地址
CAll DisplAyLED ;调用显示程序显示所有的结果
MOV A, Hour
MOV B, #8
MUL AB
MOV R3,B ;计算整小时费用
MOV A, Minute
MOV B, #60
DIV AB
MOV B, #8
MUL AB
MOV A, B ;计算分费用
ADD A, R3 ;总费用
Ljmp Mloop
End
上一篇:AT89S5X 脱机下载器制作
下一篇:汇编手记之数据通信
推荐阅读最新更新时间:2024-03-16 13:11
设计资源 培训 开发板 精华推荐
- AMD推出第二代Versal Premium系列产品:首款PCIe 6.0和CXL 3.1的SoC FPGA
- 红帽宣布达成收购Neural Magic的最终协议
- 5G网速比4G快但感知差!邬贺铨:6G标准制定应重视用户需求
- SEMI报告:2024年第三季度全球硅晶圆出货量增长6%
- OpenAI呼吁建立“北美人工智能联盟” 好与中国竞争
- 传OpenAI即将推出新款智能体 能为用户自动执行任务
- 尼得科智动率先推出两轮车用电动离合器ECU
- ASML在2024 年投资者日会议上就市场机遇提供最新看法
- AMD将裁员4%,以在人工智能芯片领域争取更强的市场地位
- Arm:以高效计算平台为核心,内外协力共筑可持续未来