……
MOV TMOD, #01H ;工作方式1
MOV TH0, #3CH ;装入初值 定时50毫秒
MOV TL0, #0B0H
SETB ET0
SETB EA
SETB TR0 ;定时器0控制位
; ----此处,缺少循环,自动往下执行到中断程序去了
SJMP $ ;-------加上这行,再试试看。
INT_T0:
MOV TH0, #3CH ;重新装入初值
MOV TL0, #0B0H
……
你如果没有用译码器,那应该问题出在扫描部分。在显示下一个数码管显示的时候,要关了上一个数码管,同时更新第二个数码管数据输出端的数据。延时一段时间之后,再显示下一个数码管数据。这样一直扫描。固定扫描时间,有两种方法,一种是定时器中断,一种是自已用延时程序来自已作一个软件定时器。还有一个要注意的问题就是按键要设置一个40-100ms的延时,这样可以防止误读按键。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 0030H
MAIN:
MOV SP,#5FH ;堆栈顶设为5FH
SETB EA ;开中断
SETB IT0 ;外部中断0沿触发
SETB EX0 ;开外部中断0
MOV 30H,#0 ;计数初值为0
SJMP $ ;死循环
EXTINT0:
INC 30H ;计数器加1
RETI ;中断返回
END
KEYR EQU P10//改下端口 忘记 p3口 是低还是高了
KEYL EQU P11
LED EQU P0
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB ET0
SETB EA
MOV A,#0FEH
MOV LED,A
MOV R2,#0
CLR 00H
LOOP:
CLR TR0
LOOPL:
JB KEYL,LOOPR
SETB TR0
RL A
MOV LED,A
JNB 00H,$
CLR 00H
SJMP LOOPL
LOOPR:
JB KEYR,LOOP
SETB TR0
RR A
MOV LED,A
JNB 00H,$
CLR 00H
SJMP LOOPR
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
INC R2
CJNE R2,#20,T0E
MOV R2,#0
SETB 00H
T0E:
RETI
END
以上就是关于51单片机汇编程序问题全部的内容,包括:51单片机汇编程序问题、51单片机,用键盘输入数码管显示的程序!!!用汇编语言,大家帮忙看看哪里错了!谢谢了!!!、51单片机用计数器中断实现100以内的按键计数,汇编语言程序是怎样的,能帮忙一下么,谢谢啦。。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)