QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[讨论结束] 51定时中断

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

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

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

x
请教各位,以下是一段51的普通定时中断程序,该程序产生一个10ms方波信号,由P1.0端输出。我有几个关于中断的问题不是很清楚,烦请各位指教:8 }* w* h  n' o" y8 ^1 h" u: x
(1)中断子程序结束之后,即第22行之后,程序转向哪里?第几行?/ c0 l' e9 N3 E/ e6 M# r
(2)整个中断子程序的执行时间是不是由第20和第21行决定的?系统自动根据这两行决定子程序执行时间吗?如果将这两行删除之后,中断子程序的执行时间又是怎样决定的呢?4 @7 \5 S  g  e* Q2 L
(3)其中第七行程序是在什么时候开始执行的?/ J3 h* S4 {" a3 f8 K5 {$ O" ~3 P
(4)程序执行路线是不是这样的:1---2---(8,9...16)---4---5---(18....22 )           22之后呢??????
' `6 @. F$ B5 O! D       在下先行谢过各位,还请各位不吝指教,谢谢 :P :P :P
* h3 J0 @6 o8 X$MOD51                                 -------------1! l  g/ ]# e5 ]5 {/ T. V# M
                 ORG   0000H         -------------26 U' v5 n8 x2 Q
                 LJMP  START        -------------37 N1 U# v* l0 X; V! S
                 ORG   000BH         -------------4
& r. z  Z6 _5 u) c6 P8 ^                  LJMP  TO_ISR       -------------5
( \. v' V  J" A" j% M2 b, M5 V;                                               -------------6- s9 ^0 q( D0 R  b1 N
                  ORG   0030H         -------------7
) p& B1 R( N/ B* G# S6 M1 ]START:     SETB  P1.0             -------------8
; T6 m) d, J8 p$ g- j                  MOV   TMOD,#11H -------------9
/ X) j) G. B7 W0 M. `7 R                  MOV   TH0,#0DBH -------------10# y9 j+ N' M- ^4 J6 o1 h0 B
                  MOV   TL0,#0FFH  -------------11: c) ?3 c, {) q1 ]2 I- N! Z! _2 t
                  CLR   TF0              -------------128 z1 }% K1 r' {; }0 X
                  SETB  TR0             -------------13
3 H0 I; d7 L1 ?  \8 t( L& l                  SETB  ET0              -------------14
, ?* m% V: K/ V7 F  r& `! x                  SETB  EA                -------------15( ?' L% V% Q9 M$ @
LOOP:       SJMP  LOOP      -----------------16
! [" ^! x3 S5 ?% c6 k) e& y  J;                                                -------------17
/ b) B* |+ S: c5 O$ C* V$ e" yTO_ISR:     CPL   P1.0             -------------18( c# S1 X' L9 _& y, g
                   CLR   TF0             -------------19
  ?( l" C$ u# p. V                   MOV   TH0,#0DBH -------------20
2 e3 m* {' r, u/ y7 M, n/ d# H                   MOV   TL0,#0FFH -------------21
) E! R6 ^4 G1 F1 W6 E! ~5 l; j% m' C2 H! @4 B                   RETI                      -------------22
- e8 H/ f3 `, g1 H  y# }                   END                       -------------23
发表于 2007-10-31 20:36:07 | 显示全部楼层
我来解答: ) ]0 M' H( Q6 X* j
1。此问题提得好(对于初学者来说)!
0 f- \$ Q, I8 U2。问题1:“中断子程序结束之后……?”,就回到主程序一直重复执行“LOOP:
, l# K! Z" w' t( Y, Y! ^- T! g/ ZSJMP  LOOP
-----16这行。! I7 s6 s7 x4 v7 {
3。问题2:“整个中断子程序的执行时间是不是由第20和第21行决定的?…….”。此提法有错 (不是中断子程序的执行时间!若是要求中断子程序的执行时间,则需计算一下“---18……---20行的所有指令执行时间总和即可!”),9 F2 \) ?) b5 b, C$ F! I
4。正确的提法为“定时器是不是由第20和第21行决定的?” 9 ~' f8 U* ~5 a
当启动主程序后,即执行“---9……---15行” 后就决定了定时器的延时特性并每当定时器到时后,在中断程序里需再次给定时器赋值,以达到10ms至要求。如“如果将这两行删除之后……”,则定时器到时后TH0 TL0将以最大的赋于#0FFH值并进行延时。这延时将大大超过10ms
& Q5 K4 w" W+ s5 M1 ~# U& {& ~7 `5。问题3:“其中第七行程序是在什么时候开始执行的?”实为第八行它是紧跟在第三行执行之后! ) g/ ]4 T9 p; l: d- q
6。问题4:“程序执行路线是不是这样的:……
  w# m" ?9 x2 N) r% C% J主程序的程序执行路线是:3---8---9……---15---16,以后一直重复执行---16
( v" W( |8 z1 x' p' E中断子程序的程序执行路线是(当有定时器中断信号时!):5---18---……---21---22
0 b/ C/ {7 z3 P  z& U
7。另需指出: ORG 是汇编指令中的伪指令,供编译之用,是不参与实际指令的执行!
8。希望我的解答能给楼主帮助。
6 I- I5 a# ?) S# m! E/ g

8 r/ `; i) ?$ u2 X7 j[ 本帖最后由 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” ; [+ {% b2 g' t% F0 a
1。看来你已有所领悟了,很是为你高兴!& Z! U" O0 b- |3 ]6 F, I/ A
2。再补充一点:每当定时器到时,转去执行中断子程序。在中断子程序中由于“CPL   P1.0
4 H& V5 f4 G; N--
-18的执行,使“P1.0的输出口状态取反一次,从而就形成“P1.0的输出口以每10ms
延时的方波输出。) ~  j% p$ v3 |0 f6 h
3。期望你今后编程更顺利! 8 V9 X) V( g* _5 H# J

" d' B; W1 l: R2 P% ^- q[ 本帖最后由 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 )

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