打印
[技术问答]

N76E003 T0 延时代码在keil调试时不结束,只有强退,为什么?

[复制链接]
1104|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
10jqka|  楼主 | 2018-3-22 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 10jqka 于 2018-3-22 17:26 编辑

请看星号标注
CKCON equ 8Eh
CKDIV equ 95h
IPH equ 0xB7
       
org  0000H
ljmp  START                                        ;4
org  000Bh
ljmp  T0_interruption                ;4
;T0中断服务程序
ORG  0100h
T0_interruption:
        setb TF0                                ;+4 clock cycles
        reti                                        ;+5 clock cycles
;主程序
START:
;空余
;延时准备
T0_DelayInit:                                       
        anl CKCON,#00001000b        ;4,使用系统频率
        anl CKDIV,#00000000b        ;4,系统不除频
        anl IP,#00000010b                ;4,1设置T0中断优先级为最高
        anl IPH,#00000010b                ;4,1
        anl TMOD,#00000001b                ;4,设置T0为16为计时器模式
        mov TL0,#0xff                        ;3,
        mov TH0,#0xff                        ;3,
        setb ET0                                ;4,使能TF0中断
;空余
        setb EA                                        ;+4,使能全部中断
        lcall T0_Delay1ms                        ;+4,
;延时执行
T0_Delay1ms:
        setb TR0                                ;+4,4*1/(16M)
        loop:
                jnb TF0,loop                ;+5,(0x10000-TH&TL)*5*1/(16M)
                ret/********************************
                在keil调试时不结束,只有强退,为什么?,*/
end
沙发
lyjian| | 2018-3-22 18:45 | 只看该作者
T0_interruption:
        setb TF0                                ;+4 clock cycles
        reti   
***
会不断运行T0中断。

使用特权

评论回复
板凳
643757107| | 2018-3-22 21:17 | 只看该作者
这个是写1清零,还是写0清零?

使用特权

评论回复
地板
10jqka|  楼主 | 2018-3-22 23:51 | 只看该作者
本帖最后由 10jqka 于 2018-3-24 00:51 编辑

错了

使用特权

评论回复
5
zhuomuniao110| | 2018-3-24 09:19 | 只看该作者
喔,解决了

使用特权

评论回复
6
zhuomuniao110| | 2018-3-24 09:19 | 只看该作者
   

使用特权

评论回复
7
10jqka|  楼主 | 2018-3-24 22:48 | 只看该作者

org  0000H
ljmp  START       
org  000Bh
        setb TF0
        clr TR0
reti

ORG  0100h
START:
        anl 0xB1,#00000000b        ;设置为推挽输出
        anl 0xB2,#00000001b        ;设置为推挽输出
        setb P0.0        ;p0.0口高电平,测试LED电流输入,LED不亮
;延时准备                                    
        anl TMOD,#00000001b         ;4,设置T0为16为计时器模式
        setb ET0                    ;4,使能TF0中断
    setb EA                     ;+4,使能全部中断控制
       
T0_CountLoop1:
        mov r6,#100
T0_CountLoop0:
        mov r7,#200
T0_Count:
                mov TL0,#0x00               ;3,65536
        mov TH0,#0x00               ;3,
               
        setb TR0                                        ;启动计数器
                jnb TF0,$                                        ;TF0为1则顺序执行
                       
                clr TF0                                                ;手工清零
                djnz r7,T0_Count
                djnz r6,T0_CountLoop0
               
                cpl P0.0
                sjmp T0_CountLoop1

;空余
end

还不是想要的,但是效果有了,精确还差好多。

使用特权

评论回复
8
lyjian| | 2018-3-25 09:19 | 只看该作者
org  000Bh
        setb TF0
        clr TR0
reti
******
脑残的写法。

使用特权

评论回复
9
10jqka|  楼主 | 2018-3-25 09:38 | 只看该作者
lyjian 发表于 2018-3-25 09:19
org  000Bh
        setb TF0
        clr TR0

跳?还是。。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝