
———定时器实验
姓名:***
学号:01
班级:08自动化
指导老师:***
一、设计题目:
循环彩灯的设计。
由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化花样可自行设计。例程给出的变化花样为:①L1、L2、…L8依次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。
二、设计目的:
1.学习8031内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编写方法。
3.掌握protel的使用。
4.掌握电路设计的一般方法和仿真过程。
5.提高查阅资料的能力、分析问题和解决问题的能力。
三、实验原理:
1、定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样, 为振荡频率的1/12。本实验中时钟频率为6.0 MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.1秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=05H,即可实现0.5秒延时。
时间常数可按下述方法确定:
机器周期=12÷晶振频率=12/(6×106)=2us
设计数初值为X,则(2e+16-X)×2×106=0.1,可求得X=15535
化为十六进制则X=3CAFH,故初始值为TH1=3CH,TL1=AFH
2、初始化程序
包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行
正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP便不必设置。
3、设计中断服务程序和主程序
中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。主程序则用来控制发光二极管按要求顺序燃灭。
四、设计步骤:
P1.0~P1.7分别接发光二极管L1~L8即可。
五、实验电路:
六、程序框图:
七、实验程序:
NAME T6 ;定时器实验
OUTPORT EQU 0CFB0H
CSEG AT 0000H
LJMP START
CSEG AT 401BH ;定时器/计数器1中断程序入口地址
LJMP INT
CSEG AT 4100H
START: MOV A,#01H ;首显示码
MOV R1,#03H ;03是偏移量,即从基址寄存器到表首的距离
MOV R0,#5H ;05是计数值
MOV TMOD,#10H ;计数器置为方式1
MOV TL1,#0AFH ;装入时间常数
MOV TH1,#03CH
ORL IE,#88H ;CPU中断开放标志位和定时器
;1溢出中断允许位均置位
SETB TR1 ;开始计数
LOOP1: CJNE R0,#00,DISP
MOV R0,#5H ;R0计数计完一个周期,重置初值
INC R1 ;表地址偏移量加1
CJNE R1,#31H,LOOP2
MOV R1,#03H ;如到表尾,则重置偏移量初值
LOOP2: MOV A,R1 ;从表中取显示码入累加器
MOVC A,@A+PC
JMP DISP
DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH
DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH
DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH
DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H
DISP: ;MOV DPTR,#OUTPORT
;MOVX @DPTR,A
MOV P1,A ;将取得的显示码从P1口输出显示
JMP LOOP1
INT: CLR TR1 ;停止计数
DEC R0 ;计数值减一
MOV TL1,#0AFH ;重置时间常数初值
MOV TH1,#03CH
SETB TR1 ;开始计数
RETI ;中断返回
END
八、实验心得:
在这次课程设计过程中锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。
再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。
