急......可以将两个程序合并而互不影响吗?
[复制链接]
下面是两个汇编程序.一个是数码管显示程序,一分钟+1;另一个是延时程序. 可不可以将两个程序合并,但是两个程序互不影响. 怎么合并,请详细说说
请指教.不胜感激....
;本程序实现8段码动态显示功能 org 0000h ajmp main org 0030h main: mov dptr,#tab ;将表头位置送入DPTR mov 30h,#00h ;将30H个位显示缓冲单元清零 mov 31h,#00h ;将31H十位显示缓冲单元清零 mov 32h,#00h ;将32H百位显示缓冲单元清零 mov 33h,#00h ;将33H千位显示缓冲单元清零 loop: mov r4,#143 ;r4作为软件计数器 tt2: lcall display jb p3.0,tt ajmp tt1 tt: lcall delay1ms jb p3.0,tt2 tt1: lcall display ;调用显示程序 djnz r4,tt1 ;r4减一后不为零,返回tt1 lcall update ;调用刷新显示子程序 ajmp loop ;跳回loop,继续循环显示. display: mov dptr,#tab mov r7,#100 ;软件计数器赋值 dd1: mov a,30h ;将显示缓冲区30H中的值送入ACC movc a,@a+dptr mov p0,a ;将要显示的数送入P0口 clr p2.4 ;选中第一个数码管 lcall delay1ms ;延时1mS setb p2.4 ;关个位显示单元 mov a,31h ;将显示缓冲区别31H中的值送入A movc a,@a+dptr mov p0,a ;将要显示的数送入P0口 clr p2.5 ;开十位显示单元 lcall delay1ms ;延时1mS setb p2.5 ;关十位显示单元 mov a,32h ;将显示缓冲区32H中的值送入ACC movc a,@a+dptr mov p0,a ;将要显示的数送入P0口 clr p2.6 ;开百位显示单元 lcall delay1ms ;延时1mS setb p2.6 ;关百位显示单元 mov a,33h ;将显示缓冲区33H中的值送入ACC movc a,@a+dptr mov p0,a ;将要显示的数送入P0口 clr p2.7 ;开千位显示单元 lcall delay1ms ;延时1mS setb p2.7 ;关千位显示单元 djnz r7,dd1 ;R7不等于0返回至DD1处 ret ;R7等于0子程序返回 update: ;刷新显示子程序 inc 30h ;个位显示缓冲单元加一 mov a,30h cjne a,#10,exit ;还没加到十,退出 mov 30h,#00h ;加到十了,个位清零 inc 31h ;十位显示缓冲单元加一 mov a,31h cjne a,#10,exit ;还没加到十,退出 mov 31h,#00h ;加到十了,十位清零 inc 32h ;百位显示缓冲单元加一 mov a,32h cjne a,#10,exit ;还没加到十,退出 mov 32h,#00h ;加到十了,百位清零 inc 33h ;千位显示缓冲单元加一 mov a,33h cjne a,#10,exit ;还没加到十,退出 mov 33h,#00h ;加到十了,千位清零 exit: ret ;刷新显示子程序返回 delay1ms: mov r6,#10 tt7: mov r5,#50 djnz r5,$ djnz r6,tt7 ret delay10ms: mov r6,#100 tt8: mov r5,#50 djnz r5,$ djnz r6,tt8 ret tab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH end
延时控制程序: ORG 0000H JMP MAIN MAIN: CLR P1.0 JB P3.0, $ ;P3.0为高电平停止 CALL DELAY_2MS JB P3.0, main SETB P1.0 CALL DELAY_2MS CLR P1.0 CALL DELAY_6S JMP MAIN delay_2ms: mov r6,#20 tt7: mov r5,#50 djnz r5,$ djnz r6,tt7 ret delay_6s: ;6,018,356uS mov r6,#118 tt6: mov r5,#255 djnz r5,$ djnz r6,tt6 ret END
|