黄金会员
主题
帖子
积分9587
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
|
学了快一年了,还是迷迷忽忽。汇编的,没啥实用价值,希望能给初学汇编的有点参考作用。P0口的0,1,2,3接CD4543的A,B,C,D。4,5,6,7是位选端
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;改用秒闪灯指示菜单状态。每1秒亮暗一次为走时状态,
;;;常亮为时间调整状态,常暗为闹铃时间设定状态
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h
ajmp 0030h
org 0003h
inc r2
cjne r2,#3,w00
mov r2,#00h
w00: reti
org 000bh
ajmp dszd
org 0013h
cpl nlbz
reti
sc equ 08h ;秒数据地址
mc equ 09h ;分显示缓存
hc equ 0ah ;时显示缓存
nhc equ 0bh ;闹钟设置缓存
nmc equ 0ch
LED1 bit p0.7 ;LED段位定义
led2 bit p0.6
led3 bit p0.5
led4 bit p0.4
nbb bit p2.0 ;蜂鸣器接口
leds bit p3.7
nlbz bit p3.0 ;闹钟开启/取消指示
keyz bit p3.2 ;主菜单按钮
keyn bit p3.3 ;闹钟开启/取消选择按钮
keym bit p3.4 ;分加按钮
keyh bit p3.5 ;时加按钮
org 0030h
;;;;;;;;;;;;;;;
;初始化;
;;;;;;;;;;;;;;;
reset:mov r2,#00h
mov p2,#0ffh
mov sp,#30h
mov dptr,#tab
mov sc,#00h
mov mc,#00h
mov hc,#12
mov nmc,#00h
mov nhc,#6
mov tmod,#01h
mov ie,#87h
mov th0,#3ch
mov tl0,#0b0h
mov tcon,#15h
;;;;;;;;;;;;;;;
;主程序;
;;;;;;;;;;;;;;;
MAIN:
cjne r2,#00h,m1
acall xs
ajmp main
m1: cjne r2,#01h,m2
acall sjsz
ajmp main
m2: cjne r2,#02h,main
acall nzsz
ajmp main
;;;;;;;;;;;;;;;;
;走时显示子程序;
;;;;;;;;;;;;;;;;
xs: mov a,hc
mov b,#10
div ab
cjne a,#0,xs1 ;如果时是个位数,消无效零
mov a,#0ah ;字表的第十位存放使4543输出BLANK的码,如0BH等
xs1: movc a,@a+dptr ;查到十位的码时4543输出BLANK,无效零不显示
orl a,#80h ;与10000000或,即LED1开显示
mov p0,a
acall ys2ms
mov a,b
movc a,@a+dptr
orl a,#40h
mov p0,a
acall ys2ms
mov a,mc
mov b,#10
div ab
movc a,@a+dptr
orl a,#20h
mov p0,a
acall ys2ms
mov a,b
movc a,@a+dptr
orl a,#10h
mov p0,a
acall ys2ms
ret
;;;;;;;;;;;;;;;;;;;;
;;;闹钟显示子程序;;;
;;;;;;;;;;;;;;;;;;;;
nxs: mov a,nhc
mov b,#10
div ab
cjne a,#0,nxs1 ;如果时是个位数,消无效零
mov a,#0ah
nxs1:movc a,@a+dptr
orl a,#80h
mov p0,a
acall ys2ms
mov a,b
movc a,@a+dptr
orl a,#40h
mov p0,a
acall ys2ms
mov a,nmc
mov b,#10
div ab
movc a,@a+dptr
orl a,#20h
mov p0,a
acall ys2ms
mov a,b
movc a,@a+dptr
orl a,#10h
mov p0,a
acall ys2ms
ret
;;;;;;;;;;;;;;;;;;;;
;;;时间设置子程序;;;
;;;;;;;;;;;;;;;;;;;;
sjsz:
acall xs
jb keyh,l2
l1: acall xs
jnb keyh,l1
inc hc
mov a,hc
cjne a,#25,l2
mov hc,#01h
l2: jb keym,l4
l3: acall xs
jnb keym,l3
inc mc
mov a,mc
cjne a,#60,l4
mov mc,#00h
l4: ret
;;;;;;;;;;;;;;;;;;;;
;;;闹钟设置子程序;;;
;;;;;;;;;;;;;;;;;;;;
nzsz:acall nxs
jb keyh,n2
n1: acall nxs
jnb keyh,n1
inc nhc
mov a,nhc
cjne a,#25,n2
mov nhc,#01h
n2: jb keym,n4
n3: acall nxs
jnb keym,n3
inc nmc
mov a,nmc
cjne a,#60,n4
mov nmc,#00h
n4:ret
;;;;;;;;;;;;;;;;;;;;;
;;;;2MS延时子程序;;;;
;;;;;;;;;;;;;;;;;;;;;
ys2ms:mov r3,#100
ys1: mov r4,#10
djnz r4,$
djnz r3,ys1
ret
;;;;;;;;;;;;;;;;;;;;;
;;;;;;定时中断0;;;;;;
;;;;;;;;;;;;;;;;;;;;
dszd:push acc
jb nlbz,ds1
mov a,nmc
cjne a,mc,ds1
mov a,nhc
cjne a,hc,ds1
clr nbb
ds1: inc r5
cjne r5,#10,ds0
mov r5,#00h
inc r6
cjne r2,#00h,d1
cpl leds
ajmp d3
d1: cjne r2,#1,d2
clr leds
ajmp d3
d2: setb leds
d3: cjne r6,#2,ds0
mov r6,#00h
inc sc
mov a,sc
cjne a,#60,ds0
mov sc,#00h
inc mc
setb nbb
mov a,mc
cjne a,#60,ds0
mov mc,#00h
inc hc
mov a,hc
cjne a,#25,ds0
mov hc ,#01h
ds0: mov th0,#3ch
mov tl0,#0b0h
pop acc
reti
;;;;;;;;;;;;;;;;;;;;
;;;;显示数据表;;;;;;
;;;;;;;;;;;;;;;;;;;;
tab: db 00h, 01h, 02h, 03h, 04h, 05h
db 06h, 07h, 08h, 09h, 0bh
end
|
|