这数码管的动态显示的延迟程序(汇编)怎么定好?
时间:10-02
整理:3721RD
点击:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT
ORG 0100H ;主程序开始地址
MAIN:
MOV R4,#20
MOV TMOD,#01H
MOV TH0,#3CH ;12M晶振时定时初值取#3CB0H,50MS中断一次
MOV TL0,#0B0H
SETB ET0
SETB EA
SETB TR0
DISP:
MOV A,R0
MOV B,#10
div AB ;商保存在A里面,即十位数,余数保存在B内,即个位数。
CLR P3.1 ;把个位数显示屏蔽
MOV P0,A ;用LED数码管在P0口输出十位数
ACALL D1MS ;调用延时子程序
SETB P3.1
MOV A,B ;将个位数move给A累加器
CLR P3.0 ;将十位屏蔽
MOV P0,A ;用LED数码管在P0口输出个位数
ACALL D1MS
SETB P3.0
AJMP DISP
INT:
MOV TH0,#03CH; 重装定时常数
MOV TL0,#0B0H;
DJNZ R4,RTI ;50msX20=1S,未满20次,跳出中断子程序
MOV R4,#20
INC R0
CJNE R0,#100,RTI
MOV R0,#0
RTI:
RETI
D1MS:
MOV R7,#44
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
END
用上面的延迟程序,proteus仿真,数码管不显示,,
将延时程序改成
D1MS:
MOV R7,#144
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
之后又太闪烁。
这时间应该怎么定才正确,,用的是11.0592MHZ。共阳数码管(还是电路有问题?)
新手不懂,请各位大神指教。
AJMP MAIN
ORG 000BH
AJMP INT
ORG 0100H ;主程序开始地址
MAIN:
MOV R4,#20
MOV TMOD,#01H
MOV TH0,#3CH ;12M晶振时定时初值取#3CB0H,50MS中断一次
MOV TL0,#0B0H
SETB ET0
SETB EA
SETB TR0
DISP:
MOV A,R0
MOV B,#10
div AB ;商保存在A里面,即十位数,余数保存在B内,即个位数。
CLR P3.1 ;把个位数显示屏蔽
MOV P0,A ;用LED数码管在P0口输出十位数
ACALL D1MS ;调用延时子程序
SETB P3.1
MOV A,B ;将个位数move给A累加器
CLR P3.0 ;将十位屏蔽
MOV P0,A ;用LED数码管在P0口输出个位数
ACALL D1MS
SETB P3.0
AJMP DISP
INT:
MOV TH0,#03CH; 重装定时常数
MOV TL0,#0B0H;
DJNZ R4,RTI ;50msX20=1S,未满20次,跳出中断子程序
MOV R4,#20
INC R0
CJNE R0,#100,RTI
MOV R0,#0
RTI:
RETI
D1MS:
MOV R7,#44
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
END
用上面的延迟程序,proteus仿真,数码管不显示,,
将延时程序改成
D1MS:
MOV R7,#144
MOV R6,#100
DJNZ R6,$
DJNZ R7,$-4
RET
之后又太闪烁。
这时间应该怎么定才正确,,用的是11.0592MHZ。共阳数码管(还是电路有问题?)
新手不懂,请各位大神指教。
电路图