S51单片机 计时器 中断

[复制链接]
查看11 | 回复3 | 2010-6-13 13:43:53 | 显示全部楼层 |阅读模式
这是一个从P1.0输出频率为264hz 的方波程序。但是单片机没有运行出结果。
ORG 0000H

SJMP MAIN

ORG 000BH

CPL P1.0

RETI

ORG 0030H
MAIN:SETB ET0

SETB EA

MOV TOMD,#01H

SETB TR0
LOOP: MOV TH0,#0F6H

MOV TL0,#23H
HERE:SJMP HERE

SJMP LOOP

END
问题1.单片机设置完TR0,没有赋初值情况下,单片机会不会从0开始计数?

2.在上面HERE处等待中断,当中断完成后,单片机执行哪句语句?是继续HERE,还是SJMP LOOP?

3.需不需要将地址压栈出栈处理?

4。还有就是计数器溢出了后,在没有赋初值前,会自动清零吗?

5。如果一直执行HERE语句,计数器自动清零的话,就是说从第二次中断开始计数长度就是2的十六次方个周期了吗?要怎么样改写程序才能重新赋初值呢,只采用中断方式.

6.HERE:SJMP HERE 和SJMP $ 两句话的区别?

回复

使用道具 举报

千问 | 2010-6-13 13:43:53 | 显示全部楼层
1.不送初值,是从0 开始。一次中断就是65.536ms2.中断就是从哪里开始中断,中断子程序招待完后,又转回原来中断处。那就是还在HERE里。3.需不需要压栈要看有没需要 保护的,就是进入子程序后会不会改变原来的寄存器或内存的数据 ,你这就不需要了。4.清05.是的。你可以加个中断子程序 ,里面重新赋初值。你的程序 就是中断方式 ,只是你这样写
ORG 000BH
CPL P1.0
RETI改成: ORG000BH
AJMP T0INT然后在主程序 里加上中断子程序,名字可以任起一个。
T0INT:MOV TH0,#
回复

使用道具 举报

千问 | 2010-6-13 13:43:53 | 显示全部楼层
答1:不会从0 ,会继续上次的值。
回复

使用道具 举报

千问 | 2010-6-13 13:43:53 | 显示全部楼层
1. 要起动 Timer 0, 让它开始计数, 要有
MOV
TH0,#0F6H ; 先给 Timer 0 初始值
MOV
TL0,#23H
;
SETB
TR0
; 开启 Timer 0
SETB
ET0
; 致能 Timer
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行