51单片机计数器使用,外部引脚加脉冲,p0.0的led不闪,但将TMOD改为00000010B,即定时器,会闪,求解,

ORG 0000H
JMP MAIN
ORG 000BH;计数器T0中断入口
JMP EXT0
MAIN:
MOV TMOD,#00000110B;计数器T0,模式2
MOV TL0,#(256-100)
mov TH0,#(256-100)
SETB EA;cpu允许中断
SETB ET0;计数器定时器T0中断允许
SETB TR0;启动
JMP $
EXT0:
CPL P0.0
RETI
END

嘿嘿 你可以利用P2.0端口线 外接一个开关K0 作为一个选择开关
当开关K0断开时, 定时计数器0被设置为计数方式,工作在方式1.
当开关K0闭合时, 定时计数器0被设置为定时方式,工作在方式2.p0.0的led闪.
ORG 0000H
LJMP MAIN
ORG 000BH;计数器T0中断入口
LJMP EXT0
MAIN:
SETB P2.0
JB LLL2
LLL0:
MOV TMOD,#00000010B;定时计数器0,选择定时方式,模式2
MOV TL0,#(256-100)
MOV TH0,#(256-100)
SETB EA;cpu允许中断
SETB ET0;计数器定时器T0中断允许
SETB TR0;启动
LLL1:
SETB P2.0
JNB LLL1
LLL2:
MOV TMOD,#00000101B;定时计数器0,选择计数方式 模式1
MOV TL0,#(256-100)
MOV TH0,#(256-100)
CLR ET0
SETB TR0;启动
LLL3:
SETB P2.0
JB LLL3
LJMP LLL0
EXT0:
CPL P0.0
RETI
END
呵呵 满意 就选满意回答追问

我的意思是定时器可以实现,但改成计数器为什么不能实现,我知道计数器需要外部脉冲,一个电平跳变。计数器加1,再溢出,p0.0取反,led闪,而不是定时器,计数器轮着用

追答

呵呵 那就更简单了
ORG 0000H
LJMP MAIN
ORG 000BH;计数器T0中断入口
LJMP EXT0
MAIN:
MOV TMOD,#00000110B;定时计数器0,选择计数方式,模式2
MOV TL0,#255
MOV TH0,#255
SETB EA;
SETB ET0;计数器器T0允许中断
SETB TR0;启动计数开始
JMP $
EXT0:
CPL P0.0
RETI
END

关键是你的计数器的初始值 设的不对,要设255,加1个脉冲后,就立即产生中断,在中断程序中让p0.0的led闪。即每来一个脉冲 就闪亮一次。

呵呵 满意 就选满意回答吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-13
应该是你的输入脉冲信号有问题。