QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
系统
[系统通知] 平台第一个项目外包——项目拼多;正式上线,欢迎各单位个人有外包、设计、采购、加工需求的,在此寻找更牛的解决方案
2021-07-01
查看: 1359|回复: 4
收起左侧

[讨论结束] 51定时中断

 关闭 [复制链接]
发表于 2007-10-31 18:33:32 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
请教各位,以下是一段51的普通定时中断程序,该程序产生一个10ms方波信号,由P1.0端输出。我有几个关于中断的问题不是很清楚,烦请各位指教:* M( `( s- K0 P* h1 ?
(1)中断子程序结束之后,即第22行之后,程序转向哪里?第几行?! o" ~( F# H! B  j
(2)整个中断子程序的执行时间是不是由第20和第21行决定的?系统自动根据这两行决定子程序执行时间吗?如果将这两行删除之后,中断子程序的执行时间又是怎样决定的呢?
  Q6 R6 J" f' b3 Y$ e5 A) P3 f' H(3)其中第七行程序是在什么时候开始执行的?
2 M; x6 f; M% X; ^  X* V(4)程序执行路线是不是这样的:1---2---(8,9...16)---4---5---(18....22 )           22之后呢??????& F/ u+ Q3 ~4 [% P
       在下先行谢过各位,还请各位不吝指教,谢谢 :P :P :P
  O1 j( q4 K/ A  x$MOD51                                 -------------1
( r0 J) Y. x2 {! N( g9 j                 ORG   0000H         -------------24 e! G/ u  L1 R) ?. O+ z
                 LJMP  START        -------------38 Y, H( s2 I0 C8 g* \2 c' m
                 ORG   000BH         -------------41 j# _7 v0 @) o7 m3 a
                  LJMP  TO_ISR       -------------5
. n9 ]  \6 D( B& q;                                               -------------61 Z& P6 ~& m1 @. u, X$ F7 }
                  ORG   0030H         -------------7
/ O" A2 h4 o  F6 o! HSTART:     SETB  P1.0             -------------8
! r+ N3 |6 k/ i1 ~                  MOV   TMOD,#11H -------------9& S* s1 X; H$ z. z/ m3 j8 ?. x
                  MOV   TH0,#0DBH -------------10* a" ]& P$ x3 t+ A/ W
                  MOV   TL0,#0FFH  -------------11! ^9 t! G% x; J) Z7 _
                  CLR   TF0              -------------12
# Q: X; A" K0 d                  SETB  TR0             -------------13
. f9 P  L% t6 Z8 X! |, v) H: s) m                  SETB  ET0              -------------14. Y  H6 H0 N: {
                  SETB  EA                -------------15( r% Z0 P, m+ f3 t
LOOP:       SJMP  LOOP      -----------------161 ^8 L% Q- K/ P. Y5 b7 G) X
;                                                -------------17- l4 P3 p9 N& g+ r% Z# f
TO_ISR:     CPL   P1.0             -------------18% H! f1 S% Y0 [% h& ^" x" ~
                   CLR   TF0             -------------19- T9 l, w, w/ S( n; S) r
                   MOV   TH0,#0DBH -------------20' d- `: ^: V- Y  m3 u
                   MOV   TL0,#0FFH -------------21
) `* ?* K! c" @# u& N+ o3 r5 f                   RETI                      -------------22
4 H$ E' {0 x% m; ~) N: R                   END                       -------------23
发表于 2007-10-31 20:36:07 | 显示全部楼层
我来解答: & U/ q$ Q  T3 \7 \% c5 i! F- f) A1 O
1。此问题提得好(对于初学者来说)!
% @- ~6 c- F+ v: C1 T2。问题1:“中断子程序结束之后……?”,就回到主程序一直重复执行“LOOP:
1 [! Z+ p8 F0 e% G3 ~SJMP  LOOP
-----16这行。+ z2 b1 A. M; S: k7 D; Z
3。问题2:“整个中断子程序的执行时间是不是由第20和第21行决定的?…….”。此提法有错 (不是中断子程序的执行时间!若是要求中断子程序的执行时间,则需计算一下“---18……---20行的所有指令执行时间总和即可!”),* ~5 a# \5 t3 m2 Z% d$ o
4。正确的提法为“定时器是不是由第20和第21行决定的?”
% q8 V/ K* Q9 v% X" s当启动主程序后,即执行“---9……---15行” 后就决定了定时器的延时特性并每当定时器到时后,在中断程序里需再次给定时器赋值,以达到10ms至要求。如“如果将这两行删除之后……”,则定时器到时后TH0 TL0将以最大的赋于#0FFH值并进行延时。这延时将大大超过10ms8 y; |' l# P0 L  `6 R
5。问题3:“其中第七行程序是在什么时候开始执行的?”实为第八行它是紧跟在第三行执行之后! ' _5 B. d' e& I, T0 x
6。问题4:“程序执行路线是不是这样的:……. [% ~# n3 l5 V  q4 ]8 F
主程序的程序执行路线是:3---8---9……---15---16,以后一直重复执行---16, K, X9 e" U5 U( S$ K  n
中断子程序的程序执行路线是(当有定时器中断信号时!):5---18---……---21---22
) l' X' l1 {. X: K% x# K
7。另需指出: ORG 是汇编指令中的伪指令,供编译之用,是不参与实际指令的执行!
8。希望我的解答能给楼主帮助。
3 X2 {" d! y* K, o

# E/ [% n/ X4 R3 s) w' a[ 本帖最后由 zhous_ch 于 2007-10-31 21:02 编辑 ]

评分

参与人数 1三维币 +10 收起 理由
bdblbyq + 10 应助

查看全部评分

 楼主| 发表于 2007-11-1 11:08:08 | 显示全部楼层

回复

首先感谢您的解答,谢谢!另外,我是不是可以这样理解:整个程序的执行过程是      只执行一次主程序,然后在第16行等待定时,等定时一到,就转向第4---5---(18---22 ) 执行中断子程序,子程序结束又到16行等待定时----定时到---中断子程序----16行--------定时到-----中断子程序-----------------如此不断循环以形成10ms方波输出???
发表于 2007-11-1 19:15:26 | 显示全部楼层
回复“word1236” 4 D  q0 ]3 B5 S) J& }# F* h7 u
1。看来你已有所领悟了,很是为你高兴!
6 V! |3 k+ L* N# P2。再补充一点:每当定时器到时,转去执行中断子程序。在中断子程序中由于“CPL   P1.0
0 X: l1 \  m. ^, z0 j' l--
-18的执行,使“P1.0的输出口状态取反一次,从而就形成“P1.0的输出口以每10ms
延时的方波输出。
( r! `/ U2 c8 ~$ P+ ^3。期望你今后编程更顺利!
3 l! a! }1 G0 B& l2 w2 Z: u5 n, Y& c7 a% ~2 w* n! _
[ 本帖最后由 zhous_ch 于 2007-11-3 12:19 编辑 ]

评分

参与人数 1三维币 +5 收起 理由
bdblbyq + 5 应助

查看全部评分

发表于 2008-7-14 10:12:46 | 显示全部楼层
楼上的解释的很清楚很透彻啊!建议楼主边练边学这样才能学好单片机!呵呵
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表