实验四中断预习报告
- 格式:docx
- 大小:59.72 KB
- 文档页数:8
单片机原理与接口技术实验 实验报告
一、任务分析
1、正常情况下设置东西-南北交替放行的四种状态,先是南北交通灯由绿变黄、再由黄变红,东西交通灯由绿变黄再由黄变红,四种状态循环出现。三种灯亮的时间使用定时器定时。定时的时间,用倒计时方式在 2 个数码管上显示。
2、有救护车或警车到达时(使用单次脉冲进行模拟),申请外部中断,中断程序中设置南北东西两个方向交通信号灯全为红色,用延时子程序或定时器定时设定时间,定时的时间也在两个数码管上进行显示之后交通恢复正常。
二、设计思路
1、先进行初始化操作,设置外部中断1的入口地址等;
2、对寄存器TCON进行操作,设置外部中断1 的触发方式,开中断即把EX1、EA位置1;
3、编写中断函数,先清掉中断标志位,保护断点,编写终端服务函数,恢复现场,返回断点;
4、设置正常情况下的四种状态。先进行定时器T0的模式设置,再设置TH0和TH0的初值;取 T0 的定时为 25ms, TF0 溢出 40 次,即能完成定时一秒钟;
4、启动定时器0,通过将TR0置1来启动定时器;
5、TF0溢出40次则记时达到一秒,记时达到一秒后调用数码管显示函数显示记时的时间。
6、当没有警车或救护车(即没有外部脉冲时),将南北、东西交通灯设置成四种状态循环出现。
三、程序流程图 开始有救护车或警车状态一:南北放行南北绿灯东西红灯是否开启外部中断状态二:南北转黄灯,东西红灯状态三:东西放行东西绿灯南北红灯状态四:东西转黄灯南北绿灯设置初始状态外部中断入口保护现场东西、南北都亮红灯延时相应的时间恢复现场中断返回
图一 程序流程图
四、实验程序ORG 0000H
AJMP MAIN
ORG 0013H
AJMP INT1_Prm
ORG 0030H
MAIN:
MOV TCON,#00000100B;外部中断1触发方式
SETB EX1
SETB EA;开中断
;HERE:AJMP HERE;
INT1_Prm:;中断函数
CLR TR1 ;先清掉中断标志位
PUSH 90H
PUSH ACC
PUSH PSW
ACALL DISPLAY
SETB P1.7
SETB P1.5 ;有警车,南北都亮红灯
DELAY10S: ;误差 0us
MOV R7,#0BFH
DL1:
MOV R6,#0BDH
DL0:
MOV R5,#89H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
NOP
RET
POP PSW
POP ACC
POP 90H
SETB TR1
RETI
;设置初始状态
LOOP:
;状态一
SETB P1.0 ; 南北绿灯
SETB P1.5 ; 东西红灯
MOV R0,#40
MOV R1,#4
MOV R2,#5
LOOP1:
MOV TMOD,#00000001B MOV TH0,#(40536/256)
MOV TL0,#(40536%256);定时25ms
SETB TR0
WAIT1:
ACALL DISPLAY
ACALL DISPLAY1
JNB TF0,WAIT1
DJNZ R0,LOOP1 ;自减40次,40*25ms=1秒
DEC R1 ;到了一秒,自减一
;ACALL DISPLAY
;ACALL DISPLAY1
DJNZ R2,LOOP1 ;南北交通灯由绿变黄相隔4秒
;状态二 黄灯
CLR P1.0
SETB P1.2;南北黄灯
SETB P1.5 ;东西红灯
MOV R0,#40
MOV R2,#2
MOV R3,#2
LOOP2:
MOV TH0,#(40536/256)
MOV TL0,#(40536%256);定时25ms
WAIT2:
ACALL DISPLAY
ACALL DISPLAY1
JNB TF0,WAIT2
DJNZ R0,LOOP2 ;自减40次,40*25ms=1秒
DEC R3 ;到了一秒,自减一
DJNZ R2,LOOP2 ; 南北交通灯由黄变红相隔3秒
;状态三
SETB P1.4 ;东西绿灯
SETB P1.1;南北红灯
MOV R0,#40
MOV R2,#3
MOV R3,#4
LOOP3:
MOV TH0,#(40536/256)
MOV TL0,#(40536%256);定时25ms
WAIT3:
ACALL DISPLAY
ACALL DISPLAY1
JNB TF0,WAIT3 DJNZ R0,LOOP3 ;自减40次,40*25ms=1秒
DEC R3 ;到了一秒,自减一
DJNZ R2,LOOP3 ;东西交通灯由绿变黄相隔4秒
;状态四
SETB P1.6
SETB P1.7; 东西黄灯,南北红灯
MOV R0,#40
MOV R2,#3
MOV R3,#4
LOOP4:
MOV TH0,#(40536/256)
MOV TL0,#(40536%256) ;定时25ms
WAIT4:
ACALL DISPLAY
ACALL DISPLAY1
JNB TF0,WAIT4
DJNZ R3,LOOP4 ;自减40次,40*25ms=1秒
DEC R3 ;到了一秒,自减一
DJNZ R2,LOOP4 ;东西交通灯由黄变红相隔3秒
ACALL LOOP
DISPLAY:
MOV DPTR,#TAB
MOV 60H,R3
MOV A,60H;60H为显示数据存储单元,A的地址
MOVC A,@A+DPTR ;取值
MOV DPTR,#8004H ;74374(1)
MOVX @DPTR,A ;赋段选的值
MOV DPTR,#8002H ; 74374(2)
MOV A,#01H ;选中最后一个数码管
MOVX @DPTR,A ;显示十位的值
ACALL DELAY500MS
RET
DELAY500MS: ;误差 0us
MOV R7,#17H
DL5:
MOV R6,#98H
DL4:
MOV R5,#46H
DJNZ R5,$
DJNZ R6,DL4
DJNZ R7,DL5 RET
DISPLAY1:
MOV DPTR,#TAB
MOV 60H,R3
MOV A,60H;60H为显示数据存储单元,A的地址
MOVC A,@A+DPTR ;取值
MOV DPTR,#8004H ;74374(1)
MOVX @DPTR,A ;赋段选的值
MOV DPTR,#8002H ; 74374(2)
MOV A,#01H ;选中最后一个数码管
MOVX @DPTR,A ;显示位的值
ACALL DELAY500MS2
RET
DELAY500MS2: ;误差 0us
MOV R7,#17H
DL3:
MOV R6,#98H
DL2:
MOV R5,#46H
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL3
RET
TAB:
DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END
五、 程序分析 1、先进行程序的初始化操作,设置外部中断1的入口地址,即0013H等;
2、对寄存器TCON进行操作,设置外部中断1 的触发方式,开中断即把EX1、EA位置1;IP 是中断优先级寄存器,其中 PX0,PT0,PX1,PT1,PS 位分别对应 5 个中断的优先级设置,置“1”时设为高级中断,为“0”时是低级中断。
3、编写中断函数,先清掉中断标志位,保护断点,PUSH 90H;PUSH ACC;PUSH PSW。恢复现场,返回断点,POP PSW; POP ACC;POP 90H;
4、编写正常情况下的交通路灯南北-东西方向的四种状态;
5、在实验板上将 CS 端连接至系统地址 CS0,则确定段码锁存器地址为
8004H、位选码锁存器地址为8002H。点亮数码管时,先选择数码管的段选,使用查表法给数码管的段选进行赋值,再选择数码管的位选,若从左到右选中第一位数码管即赋值为00000100。
6、使用定时器定时,先要设置定时器的工作方式,即对TMOD寄存器进行操作,根据定时时间给TH0、TL0赋初值,开定时器,定时器定时时间到了以后需要清楚溢出标志位TF0。
六、问题分析
1、当有警车通过(即外部中断1有下降沿信号),程序进入外部中断,南北东西方向均为红灯,当警车通过后,程序应回到原来正常情况下的红绿灯时间,但程序并没有回到原来执行外部中断的执行的地方,后面发现是少了恢复现场,返回断点,POP PSW; POP ACC;POP 90H这部分的程序。
2、本应是在计数过程中两个数码管一直亮,但实际上是两个数码管轮流亮灭亮灭显示,经过检查,应该把display显示函数放在主函数中,使得数码管能一直显示相应的值。
3、当外部中断1有下降沿信号时,即进入外部中断程序,需要延时4秒,因此需要再写一个倒计时5秒的程序。
七、数据分析
1、使用12M晶振,执行一条指令所用的时间是1微秒,使用定时器的工作方式1,16位记时,最大记时时间是2^16=65536,因此要记时一秒钟,可以先通过计时25ms,定时器的溢出标志位溢出40次来达到记时一秒钟的目的。
2、分别设置南北-东西方向的倒计时相应的时间,并调用显示函数显示。
八、结论
1、使用定时器定时精确,但在溢出标志位溢出之后,需要清除中断标志位;
2、使用数码管显示数据时,需要先位选数码管,再给数码管赋段码值。
3、调用子函数用ACALL指令
4、在中断函数中,应先清掉中断标志位并保护断点,PUSH 90H;PUSH ACC;PUSH PSW。中断程序执行完后需要恢复现场,返回断点,POP PSW; POP ACC;POP 90H