SJMP STAR1循环显示中断服务程序INT_Timer0:
MOV TL0,#176-550ms定时器计数器初始值再装入(埋皮卖-5为微调,含响应中断用时) MOV TH0,#60 PUSH 01H压入堆栈 MOV R1,#ms50装入50ms计数内存地址数31H INC @R150ms计数内存加1
CJNE @R1,#20,ExitInt不够1秒,退出 MOV @R1,#050ms计数内存复位为0(31H)
INC R1转为秒内存地址(32H)
INC @R1秒计数内存加1 CJNE @R1,#60,ExitInt1不够60秒,退出 MOV @R1,#0够60秒,秒计数复位为0 INC R1转为分计数内存地址(33H)
INC @R1 分计数内存加1 CJNE @R1,#60,ExitInt1不够60分,退出 MOV @R1,#0够60分,分复位为0 INC R1转为时内存地址(34H) INC @R1 时计数内存加1 CJNE @R1,#24,ExitInt1不够24时,退出 MOV @R1,#0时计数内存复位为0ExitInt1:
SETB F0置位中断处理完成标志ExitInt:
POP 01H恢复现场 RETI 退出中断
HexToBCD:16进制转BCD码
MOV B,#10 DIV AB MOV @R0,B存余数(10进制个位) INC R0转伤地址 MOV @R0,A存伤(10进制十位) INC R0转下一次余数地址 RET
Display:显示转换与调用显示程序
MOV R0,#buffer10进制BCD秒显示缓存地址(35H) MOV A,sec ACALL HexToBCD十进制秒转换后存在(35H)、(36H) MOV @R0,#10H(37H)=#10H,秒与分之间的间隔,无实际意义,或与dispaly8有关
INC R010进制BCD分显示缓存地址(38H)
MOV A,min ACALL HexToBCD十进制分转换后存在(38H)、(39H)
MOV @R0,#10H(3AH)=#10H,分与时之间的间隔,无实际意义,或与dispaly8有关
INC R010进制BCD时显示缓存地址(3BH)
MOV A,hour ACALL HexToBCD十进制时转换后存在(3CH)、(3DH)
MOV R0,#buffer恢复显示缓存地址(35H),为dispaly8置初始显示地址 LCALL Display8调用实际显示程序 RET END
ORG 0000H程序起始于地址0000H,(一般不这样用)LJMP MAIN;跳到主程序MAIN
ORG 000BH;外部中断INT0程序的地址,此为规定的
LJMP INTT0;跳到外部中断INTT0程序
ORG 001BH;外部中断INT1程序的地址,此也为规定的
LJMP INTT1;跳到外部中断INTT1程序
ORG 0100H;主程序MAIN地址
MAIN: MOV SP,#60H;给堆栈指针SP附内部数据存储器地址60H
MOV 31H,#0;给31H地址内清零即(31H)=0
MOV 20H,#0FEH(20H)=11111110B
MOV 21H,#0FFH;(21H)=11111111B
MOV P1,20H;P1=11111110B
LCALL SHEZHI1;调用程序段SHEZHI1
MOV 20H,#0FDH;(20H)=11111101B
MOV P1,20H;P1=11111101B
MOV 40H,#10;(40H)=0AH
SETB EA;开总中断
SETB ET0;开定时中断T0
MOV TMOD,#11H;设置T0工作于轮悔定时方式1
MOV TH0,#3CH;定时初值设置高位
MOV TL0,#0B0H;定时初值设置低位
SETB TR0;允许T0中断
LL: LCALL KEY;调用KEY
LCALL KEYC;调用KEYC
SJMP LL;循环调派行用回LL
INTT0: PUSH ACC;将ACC值压栈
PUSH PSW;将PSW值继续压栈
SETB RS1;RS1位置1
SETB RS0;RS0位置1,即选中内部数据存储器组的3组
DJNZ 40H,DOWN;判断十次结束否?且计数值自减一,若没有够十次,则转入程序DOWN , 否则顺序执行
MOV 40H,#10;继续在(40H)存入计数值十
MOV R0,#41H;(R0)=41H
MOV A,@R0判秒是否到60
ADD A,#1;A中值加一
DA A;十进制调整
MOV @R0,A;再送腊羡正回原单元
CLR C;清进位位
SUBB A,#60H;与60相减
JC DOWN;通过判断进位位看是否到60了,没到就去DOWN,到了就顺序执行
MOV @R0,#0;41H单元清零
INC R0;地址自加一
MOV A,@R0判分是否到60
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0判时是否到24
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#24H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0判日是否到指定天数
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
MOV R4,A 月份送R4,本月天数送R5
JNB ACC.4,NEXT2
CLR C
SUBB A,#06H
NEXT2: MOV DPTR,#DAYTAB
DEC A
MOVC A,@A+DPTR
MOV R5,A
CJNE R4,#2,NEXT
JNB 08H,NEXT1
NEXT: INC R5
NEXT1: DEC R0
MOV A,R5
CLR C
SUBB A,@R0
JNC DOWN
MOV @R0,#1
INC R0
MOV A,@R0判月是否到13
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#13H
JC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 判年低位是否到00
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
DOWN: MOV A,#42H
CJNE A,4EH,DOWN2
MOV A,#43H
CJNE A,4FH,DOWN2
CLR 07H
DOWN2: JB 06H,DOWN4
DOWN4: CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
DAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)