单片机高手们请给我指点指点吧!

[复制链接]
查看11 | 回复2 | 2008-12-2 03:38:05 | 显示全部楼层 |阅读模式
用T0定时 从p1.0口输出周期为一秒 宽度为2ms的脉冲!
帮我看看错在那,怎运行不出来呀!
org
0000h

ljmpmain
main:

org
0100h
mov
tmod ,#01h
clr
P1.0
loop:
mov
th0 ,#0ffh
mov
tl0 ,#0ffh
setb
tr0

jnb
tf0 ,$
clr
tf0
clr
tr0
mov
th0 ,#003dh
mov
tl0 ,#0e0h
setb
tr0

jnb
tf0 ,$
cpl
P1.0
clr
tr0
clr
tf0
mov
th0 ,#0b1h
mov
tl0 ,#0e0h
setb
tr0

jnb
tf0 ,$
cpl
P1.0

clr
tr0
clr
tf0
sjmp
loop
end

回复

使用道具 举报

千问 | 2008-12-2 03:38:05 | 显示全部楼层
你的程序我怎么看不懂,而且我无法确定软件清除T0中断标志能不能使内部逻辑正常复位,通常应该由硬件自动复位中断标志的mov th0 ,#0ffh mov tl0 ,#0ffh setb tr0 jnb tf0 ,$ 这一段定时了一个机器周期,如果你是用的12MHz晶振,这里产生的效果就是延时了1us,实际上还不如一行nop精确,因为你的判断开始前中断标志就形成了mov th0 ,#003dh mov tl0 ,#0e0h setb tr0 jnb tf0 ,$ cpl P1.0 这一段定时了大约49.2ms,然后P1.0进行了一个正跳变mov th0 ,#0b1h mov tl0 ,#0e0...
回复

使用道具 举报

千问 | 2008-12-2 03:38:05 | 显示全部楼层
程序不对,没有开中断或者中断来了没地方去,用定时器了就不要这么写吧,另外写汇编尽量用大写好些,舒服,呵呵。要精确的话还是用定时器,用语句做的延时都是有一定的偏差的。MS_20 EQU 40H;20ms定时SEC_1 EQU 41H;秒定时ORG 0000H LJMP MAIN ORG 000BH LJMP T0INTERRUPT ...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行