实验三定时器实验.docVIP

  • 85
  • 0
  • 约1.82千字
  • 约 3页
  • 2019-10-12 发布于山东
  • 举报
实验三 定时器实验 一、实验题目 采用内部定时器1,按方式1工作,即作为十六位定时器使用,每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。要求开机后第一秒钟D1、D3亮,第二秒钟D2、D4亮,第三秒钟D5、D7亮,第四秒钟D6、D8亮,第五秒钟D1、D3、D5、D7亮,第六秒钟D2、D4、D6、D8亮,第七秒钟8个二极管全亮,第八秒钟全灭,以后又从头开始,D1、D3亮……一直循环下去。 二、实验目的 1、学习8051内部计时器的使用和编程方法。 2、掌握中断处理程序的编程方法。 三、实验原理 1、定时常数的确定 定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。 本实验中时钟频率为12MHZ,现要采用中断方法来实现1S延时,要在定时器1中设置一个时间常数,使其每隔0.05S产生一次中断,CPU响应中断后将R0中计数器减一,令(R0)=20,即可实现1S延时。 时间常数可按如下方法确定: 机器周期=12÷晶振频率=12÷12×10-6=1×10-6 S=1μS 需设初值为X,则(216-X)×1×10-6=0.05S X=65536-50000=15336,化为十六进制:X=3CB0, 故初始值为TH1=3CH,TL1=0B0H。 2、初始化程序 包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。 由于只有定时器中断,IP便不必设置。注意: 定时器1初始化建议不用指令: MOV TMOD,#10H 而用下述指令: ANL TMOD,#0FH ORL TMOD,#10H 3、设计中断服务程序和主程序。 中断服务程序要将时间常数重新送入定时器中,为下一次中断做准备。主程序则用来控制发光二极管按要求顺序亮灭。 四、实验电路及连线 图3-1 8位独立LED 表3-1 硬件连接表 MCU-AT89S52 8位独立LED P10~ P17 D1~ D8 五、思考题 1、8051单片机有哪几种中断源?写出各自的中断地址? 2、若定时器1工作在模式2,晶振频率为12MHz,要定时100μS则定时初值=? 程序: ORG 0000H LJMP MAIN ORG 001BH ;T1的中断入口地址 LJMP ZD ORG 0100H MAIN: ANL TMOD,#0FH ORL TMOD,#10H MOV TH1,#3CH ;装入计数值高8位 MOV TL1,#0B0H ;装入计数值低8位 SETB TR1 ;启动定时器T1 SETB ET1 ;允许T1中断 SETB EA ;允许CPU中断 ;SJMP $ ;等待中断 MOV R0,#20 MOV R1,#0 MOV DPTR,#TAB TAB: DB 0FAH,0F5H,0AFH,05FH,0AAH,055H,00H,0FFH ; 13 ,24 ,57 ,68 ,1357,2468,全亮,全灭 LOOP1: MOV A,R1 MOVC A,@A+DPTR ;ROM查表,变址寻址 SJMP LOOP2 LOOP2: MOV P1,A JMP LOOP3 LOOP3: CJNE R0,#0,LOOP2 ;比较不等转 MOV R0,#20 INC R1 ;寄存器R1加一 CJNE R1,#08,LOOP1 MOV R1,#0 ZD: CLR TR1 ;位清零 DEC R0 ;减一 MOV TH1,#3CH ;装入计数值高8位 MOV TL1,#0B0H ;装入计数值低8位 SETB TR1 ;启动定时器T1 RETI END

文档评论(0)

1亿VIP精品文档

相关文档