帮忙解释一下单片机编程中的 每一个指令的意思和控制过程、急用、谢谢
用to作50ms内部定时,每50ms在T1引脚产生一脉冲供T1计数器做计数脉冲,若T1计数器为20,便可得到定时1秒的定时程序:movtmod,#61hmovdptr,#...
用to作50ms内部定时,每50ms在T1引脚产生一脉冲供T1计数器做计数脉冲,若T1计数器为20,便可得到定时1秒的定时程序:
mov tmod, #61h
mov dptr, #15536
mov tl0,dpl
mov th0, dph
mov tl1, #236
setb tr0
setb tr1
loop: jnb tf0,$
clr tf0
mov dptr, #15536
mov tl0, dpl
mov th0, dph
clr p3.5
setb p3.5
jnb tf1 ,loop
clr tf1 展开
mov tmod, #61h
mov dptr, #15536
mov tl0,dpl
mov th0, dph
mov tl1, #236
setb tr0
setb tr1
loop: jnb tf0,$
clr tf0
mov dptr, #15536
mov tl0, dpl
mov th0, dph
clr p3.5
setb p3.5
jnb tf1 ,loop
clr tf1 展开
2个回答
展开全部
mov tmod, #61h;将61h这个数赋给tmod寄存器,具体什么模式你把它拆成16进制数对着寄存器看吧,好吧,刚帮你查了下,是:仅由TR0,TR1置位分别启动定时器T0、T1,T0为计数功能,T1为定时功能。T1是自动重装8位计数器,T0是16位计数器。
mov dptr, #15536 ;令dptr(记得是数据指针)的值为15536
mov tl0,dpl ;让dptr的低8位的值给定时器t0的低8位
mov th0, dph ;把dptr的高8位的值给定时器t0的高8位
mov tl1, #236 ;让t1的值为236
setb tr0;开启t0
setb tr1;开启t1
loop: jnb tf0,$; 表示测试tf0的值,如果不为1(为0)则程序继续执行本条指令($表示当前位置),如果为1则顺序执行下一条指令。 这里就是说当定时器T0溢出时进入下面的指令
clr tf0 ;清零tf0并进入下面的程序
mov dptr, #15536 ;与上面的意思一样
mov tl0, dpl
mov th0, dph
clr p3.5 ;使3.5口为0
setb p3.5 ;使3.5口为1
jnb tf1 ,loop ;还是检测,这次检测tf1位的值,如果不为1则继续本指令
clr tf1;令tf1为0,即低电平
大概就记得这些了 给你个参考吧
mov dptr, #15536 ;令dptr(记得是数据指针)的值为15536
mov tl0,dpl ;让dptr的低8位的值给定时器t0的低8位
mov th0, dph ;把dptr的高8位的值给定时器t0的高8位
mov tl1, #236 ;让t1的值为236
setb tr0;开启t0
setb tr1;开启t1
loop: jnb tf0,$; 表示测试tf0的值,如果不为1(为0)则程序继续执行本条指令($表示当前位置),如果为1则顺序执行下一条指令。 这里就是说当定时器T0溢出时进入下面的指令
clr tf0 ;清零tf0并进入下面的程序
mov dptr, #15536 ;与上面的意思一样
mov tl0, dpl
mov th0, dph
clr p3.5 ;使3.5口为0
setb p3.5 ;使3.5口为1
jnb tf1 ,loop ;还是检测,这次检测tf1位的值,如果不为1则继续本指令
clr tf1;令tf1为0,即低电平
大概就记得这些了 给你个参考吧
展开全部
用to作50ms内部定时,每50ms在T1引脚产生一脉冲供T1计数器做计数脉冲,若T1计数器为20,便可得到定时1秒的定时程序:
mov tmod, #61h ; 设置工作模式:T1自动在装入8位计数器,T0是16位定时器
mov dptr, #15536 ; 设置计时初值 15536=3CB0H,每50mS计满一次。
mov tl0,dpl ; 将初值装入T0低8位
mov th0, dph ; 装入T0高8位
mov tl1, #236 ; T1初值236,20次计满
setb tr0 ; 开T0定时器
setb tr1 ; 开T1计数器
loop: jnb tf0,$ ; 检测T0是否计满,未满等待
clr tf0 ; T0计满255,处理,清计满标志
mov dptr, #15536 ; 恢复初值
mov tl0, dpl ; 恢复初值
mov th0, dph ; 恢复初值
clr p3.5 ; P3.5输出低电平
setb p3.5 ; P3.5输出高电平
jnb tf1 ,loop ; 不够20次,继续从loop处循环
clr tf1 ; 满20次,清TF1标志
说明:这个程序有点问题,计时50mS不准。既然T0已经设置为自动装入,就不应该再次装入15536,这样会使计时变长,即大于50mS.。
mov tmod, #61h ; 设置工作模式:T1自动在装入8位计数器,T0是16位定时器
mov dptr, #15536 ; 设置计时初值 15536=3CB0H,每50mS计满一次。
mov tl0,dpl ; 将初值装入T0低8位
mov th0, dph ; 装入T0高8位
mov tl1, #236 ; T1初值236,20次计满
setb tr0 ; 开T0定时器
setb tr1 ; 开T1计数器
loop: jnb tf0,$ ; 检测T0是否计满,未满等待
clr tf0 ; T0计满255,处理,清计满标志
mov dptr, #15536 ; 恢复初值
mov tl0, dpl ; 恢复初值
mov th0, dph ; 恢复初值
clr p3.5 ; P3.5输出低电平
setb p3.5 ; P3.5输出高电平
jnb tf1 ,loop ; 不够20次,继续从loop处循环
clr tf1 ; 满20次,清TF1标志
说明:这个程序有点问题,计时50mS不准。既然T0已经设置为自动装入,就不应该再次装入15536,这样会使计时变长,即大于50mS.。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询