单片机汇编实验三:外部中断实验
由AT89S52内部定时器0,按方式1工作,即作为16位定时器使用每0.05秒T1溢出中断一次。P1口的P1.0~P1.8分别接8个发光二极管。要求编写程序模拟一时序控制装置。开机后第一秒钟L1,L8亮,第二秒钟L2,L7亮,第三秒钟L3,L6亮,第四秒L4,L5亮,第五秒L3,L6亮,第六秒L2,L7亮,第七秒L1,L8亮,第八秒L1,L3,L5,L7亮,第九秒L2,L4,L6,L8亮,第十秒全亮,第十一秒全灭。然后再从头循环。
由键盘生成外部中断信号,当任意键按下时,为外部中断请求信号,此时L3,L4, L5,L6亮,持续时间为5秒。
//This is the third program of the homework;
//Name: WQ DATE: 2013214
//In thisprogramwe used Intterput;
ORG 0000H //****无条件转移指令*******
LJMP MAIN //LJMP 长转移指令 65535 (双字节)
ORG 0003H //0003H 中断程序I0入口地址
LJMP WINTT0 //AJMP 绝对转移
ORG 000BH //000BH 计时器程序T0入口地址
LJMP WT0 //SJMP 短转移 -128——127
// ORG 001BH //001BH 计时器程序T1入口地址 JMP 变址转移 JMP @A+DPTR
// LJMP WT1 //另外只要程序段的空间能合理分配不冲突就能随便调用
ORG 0050H
MAIN:MOV DPTR,#TABLE
MOV R1,#11 //R1做一个计数器 查表用
CLR A //将A清零,用来寻址
MOV R2,A //另一个计数器用来加减
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
MOV R3,#20 //R3做一个计数器
SETB EA //开总中断
SETB ET0 //允许计时器
SETB TR0 //开启计时器0
// SETB TR1 //开启计时器1
SETB IT0 //边沿触发方式
SETB EX0 //允许外部中断0
MOV P0,#0FFH
OK1: MOV C,P3.4
JNC KAISHI
MOV C,P3.5
JNC KAISHI
MOV C,P3.6
JNC KAISHI
MOV C,P3.7
JNC KAISHI
SJMP OK1
KAISHI:CLR P3.2
SETB P3.2
SJMP OK1
//外部中断程序的入口
ORG 0AA0H
WINTT0:PUSH TH0
PUSH TL0
CLR TR0 //关闭定时器0
MOV P1,#3CH
CALL DELAY1
POP TL0
POP TH0
SETB TR0
RETI
ORG 0100H //计时器0程序
WT0: MOV TH0,#4CH //计时器0置数
MOV TL0,#00H
DJNZ R3,RETN //1秒钟到来了
MOV R3,#20
MOV A,R2 //
MOVC A,@A+DPTR
MOV P1,A
INC R2 //指针加一
DJNZ R1,RETN //不满足调见返回主程序继续计时
MOV R1,#11 //循环之后置数
MOV R2 ,#0 //循环之后清零
RETN:RETI //中断子程序的返回指令
//延时函数
ORG 0200H
delay1:MOV R7,#0FFH
DELY1:MOV R6,#0AAH
DELY2:MOV R0,#024H
DELY3: NOP//MOV P1,#00H
DJNZ R0,DELY3
DJNZ R6,DELY2
DJNZ R7,DELY1
RET
TABLE:DB 7EH,0BDH,0DBH,0E7H,0DBH
DB 0BDH,7EH,0AAH,55H,00H,0FFH //十六进制数前面要加零
END //主程序结束指令
单片机汇编实验外部中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)