注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! 打开购物车 查看留言付款方式联系我们
初中电子 单片机教材一 单片机教材二
搜索上次看见的商品或文章:
商品名、介绍 文章名、内容
首页 电子入门 学单片机 免费资源 下载中心 商品列表 象棋在线 在线绘图 加盟五一 加入收藏 设为首页
本站推荐:
stc2052-clock.asm
文章长度[6176] 加入时间[2006/7/1] 更新时间[2024/11/18 11:56:31] 级别[3] [评论] [收藏]
org 00h
jmp config
ORG 03H
JMP TE0
ORG 0BH
JMP TT0
ORG 13H
JMP TE1
ORG 1BH
JMP TT1
config:
MOV TMOD,#00010010B;T0工作在8位自动重装计数器模式
mov th0,#8
setb tr0
setb et0
setb et1
setb ea
mov 3fh,#1;定时总路数,默认为第1路
mov 92h,#11111111b;大电流输出
mov 0b2h,#11111111b;大电流输出
mov 39h,#00;工作模式0=走时模式1=校时模式2=定时模式3=误差模式
mov r2,#0;设定默认的闪动模式
mov r1,#15;设定长按键的时间
mov r3,#30;设定不按键的最长时间

mov a,3eh
cjne a,#51,setup
jmp main
setup:
mov 36h,#12;时默认值
mov 37h,#00;分默认值
mov 38h,#00;秒默认值
mov r0,#80h;定时默认值24:30
dsmr:inc r0
mov @r0,#30
inc r0
mov @r0,#24
cjne r0,#0f0h,dsmr

main:mov 3eh,#51
call clock
call cup

call hled
call disp ;LED数码显示
call key
call run
jmp main


tt0:
inc r7
cjne r7,#168,t0end
mov r7,#0
setb 55h
t0end:reti

clock:
jnb 55h,cend;检查中断计数标志
clr 55h
cpl 56h
jnb 56h, cend;一次延时
cpl 57h
jnb 57h, cend;二次延时
cpl p3.7
jnb p3.7, cend;三次延时
inc 38h ;时钟程序秒加1
mov r6,38h
cjne r6,#60,cend
mov 38h,#0
ck1:inc 37h
mov r6,37h
cjne r6,#60,cend
mov 37h,#0
ck2:inc 36h
mov r6,36h
cjne r6,#24,cend
mov 36h,#0
cend:ret




tt1:
CLR TR1
MOV TL1,3eh
MOV TH1,3dh
SETB TR1

reti

te0:

reti

te1:

reti


cup:
mov 3ah,36h
mov 3bh,37h
mov 3ch,38h
mov a,39h
cjne a,#20,ms1up

mov 3ah,3fh
mov a,#80h
add a,3fh
add a,3fh
mov r0,a
mov 3bh,@r0
inc r0
mov 3ch,@r0

ms1up:cjne a,#30,msup
mov 3ch,55h
msup:mov a,3ch
mov b,#10
div ab ;将秒计算后送入显示缓存
mov 30h,b
mov 31h,a
mov a,3bh
mov b,#10
div ab ;将分计算后送入显示缓存
mov 32h,b
mov 33h,a
mov a,3ah
mov b,#10
div ab ;将小时计算后送入显示缓存
mov 34h,b
mov 35h,a
ret

hled:
mov a,39h
cjne a,#10,ms1
jb 56h,ms1
cjne r2,#0,h1
mov 35h,#11
mov 34h,#11
h1:cjne r2,#1,h2
mov 33h,#11
mov 32h,#11
h2:cjne r2,#2,ms1
mov 31h,#11
mov 30h,#11
ms1:cjne a,#20,ms2
jnb 57h,ms2
cjne r2,#0,h21
mov 35h,#11
mov 34h,#11
h21:cjne r2,#1,h22
mov 33h,#11
mov 32h,#11
h22:cjne r2,#2,ms2
mov 31h,#11
mov 30h,#11
ms2:cjne a,#30,hend
cjne r2,#0,h31
mov 35h,#12
mov 34h,#12
mov 33h,#12
mov 32h,#12
h31:cjne r2,#1,hend
mov 35h,#13
mov 34h,#13
mov 33h,#13
mov 32h,#13
hend:ret




disp:
mov p1,#10000000b
setb p3.0
setb p3.1
setb p3.2
setb p3.3
setb p3.4
setb p3.5

cjne r5,#6,ds0;r5等于显示的当前LED,r5的值不能随意改变
mov r5,#0
ds0:inc r5
cjne r5,#1,ds1
clr p3.5
mov a,30h
call ledtab
ds1:cjne r5,#2,ds2
clr p3.4
mov a,31h
jmp ledtab
ds2:cjne r5,#3,ds3
clr p3.1
mov a,32h
jmp ledtab
ds3:cjne r5,#4,ds4
clr p3.3
mov a,33h
jmp ledtab
ds4:cjne r5,#5,ds5
clr p3.2
mov a,34h
jmp ledtab
ds5:cjne r5,#6,edisp
clr p3.0
mov a,35h
jmp ledtab
edisp:
ret
ledtab:
jb p1.7, kk ;检查按键是否按下
mov 40h,r5 ;按键按下取键值
kk:mov dptr,#table
movc a,@a+dptr
mov p1,a
jmp edisp






key:
cjne r5,#1,scan1
mov 40h,#0
jmp kend
scan1:
cjne r5,#6,kend
mov r6,40h
cjne r6,#0,kset;不等于0说明有按键按下,分别设定有键无键的最长时间
mov r1,#20;设定长按键时间一般为2-3秒
clr 51h;按键放开中
jmp ksetend
kset:mov r3,#200;设定不按键的最长等待时间,一般为10-30秒
setb 51h;按键中
mov a,39h
add a,r6
mov r4,a;
ksetend:
djnz 56h,kend;检查长按键延时用
;mov 56h,#250;根据时钟频率来确定延时程度

cjne r6,#0,long1;不等于0说明有按键按下,分别求出有键按和无键按的时间
djnz r3,kend
mov 39h,#0;10秒钟长时间没有键按下时模式回到正常走时
;clr p3.7
jmp kend

long1:
djnz r1,kend
mov a,39h
add a,#10
mov 39h,a;有按键长按2秒以上模式加10
mov r2,#0

;setb p3.7
kend:

kendd:
ret


skey:


jmp kend


run:jb 51h,gotoend;按键是否放开,不放开不执行按键程序
jmp run0

gotoend:jmp runend

run0:cjne r4,#16,run1;校时模式
inc r2;调校时分秒三种情况选择
cjne r2,#3,run1
mov r2,#0

run1:cjne r4,#13,run2;校时加数模式

cjne r2,#0,jj1
inc 36h
mov a,36h
cjne a,#24,jj1
mov 36h,#0

jj1:cjne r2,#1,jj2
inc 37h
mov a,37h
cjne a,#60,jj2
mov 37h,#0

jj2:cjne r2,#2,run2
inc 38h
mov a,38h
cjne a,#60,run2
mov 38h,#0

run2:cjne r4,#14,run3;校时减数模式
cjne r2,#0,jg1
dec 36h
mov a,36h
cjne a,#255,jg1
mov 36h,#23

jg1:cjne r2,#1,jg2
dec 37h
mov a,37h
cjne a,#255,jg2
mov 37h,#59

jg2:cjne r2,#2,run3
dec 38h
mov a,38h
cjne a,#255,run3
mov 38h,#59


run3:cjne r4,#26,run4;定时模式
inc r2;定时模式的R2表示选择路数、设定小时和分钟的情况
cjne r2,#3,run4
mov r2,#0
run4:cjne r4,#23,run5;定时模式的加模式

dsjia:cjne r2,#0,dsjia1
inc 3fh
mov a,3fh
cjne a,#17,dsjia1;最大的定时路数
mov 3fh,#1
dsjia1:cjne r2,#1,dsjia2
inc 3bh
mov a,3bh
cjne a,#25,dsup11
mov 3bh,#0
dsup11:call dsup
dsjia2:cjne r2,#2,run5
inc 3ch
mov a,3ch
cjne a,#60,dsup22
mov 3ch,#0
dsup22:call dsup

run5:cjne r4,#24,run6;定时模式的减模式

dsjian:cjne r2,#0,dsjian1
dec 3fh
mov a,3fh
cjne a,#0,dsjian1
mov 3fh,#16;最大的定时路数
dsjian1:cjne r2,#1,dsjian2
dec 3bh
mov a,3bh
cjne a,#0ffh,dsup33
mov 3bh,#24

dsup33:call dsup
dsjian2:cjne r2,#2,run6
dec 3ch
mov a,3ch
cjne a,#0ffh,dsup44
mov 3ch,#59
dsup44:call dsup
run6:cjne r4,#36,run7;误差模式
inc r2;误差模式的调快还是调慢模式
cjne r2,#2,run7
mov r2,#0

run7:cjne r4,#33,run8;误差模式
inc 55h;误差系数的加法
mov a,55h
cjne a,#100,run8
mov 55h,#0

run8:cjne r4,#34,run9;误差模式
dec 55h;误差系数的减法
mov a,55h
cjne a,#255,run9
mov 55h,#99

run9:cjne r4,#46,run10;到正常模式
mov 39h,#0
run10:cjne r4,#43,run11;到正常模式
mov 39h,#0
run11:cjne r4,#44,rund;到正常模式
mov 39h,#0
rund:mov r4,#0
runend:ret


dsup:;保存定时时间
mov a,#80h
add a,3fh
add a,3fh
mov r0,a
mov @r0,3bh
inc r0
mov @r0,3ch
ret

table: db 11110111b,11000001b,10111011b,11101011b,11001101b,11101110b,11111110b
    db 11000011b,11111111b,11101111b,00000000b,00000000b,10001000b,10101010b
end
1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!
本站协议 | 版权信息 |  关于我们 |  本站地图 |  营业执照 |  发票说明 |  付款方式 |  联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102
E-mail:51dz$163.com($改为@);Tel:(0755)27947428
工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389