大家好,又见面了,我是你们的朋友全栈君。
定时器实验循环彩灯实验-单片机原理及应用实验报告
计算机与信息工程学院设计性实验报告专业:通信工程 年级/班级:2011 级 2013—2014 学年第一学期课程名称 单片机原理及应用 指导教师 岳明本组成员学号姓名实验地点 计科楼 214 实验时间 周五 3-4节项目名称 定时器实验 – 循环彩灯实验 实验类型 设计性一、实验目的:1、学习 8031内部计数器的使用和编程方法。2、进一步掌握中断处理程序的编写方法。二、实验设备:EL-8051-III型单片机实验箱三、实验原理: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=AFH2、初始化程序包括定时器初始化和中断系统初始化,主要是对 IP、IE、TCON、TMOD 的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP 便不必设置。3、设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。主程序则用来控制发光二极管按要求顺序燃灭。四、实验题目由 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秒。让发光二极管按以上规律循环显示下去。五、实验电路:六、实验步骤:P1.0~P1.7 分别接发光二极管 L1~L8 即可。七、程序框图:T6.ASM主程序框图 中断程序框图 八、参考程序:T6.ASM NAME T6 ;定时器实验OUTPORT EQU 0CFB0HCSEG AT 0000HLJMP STARTCSEG AT 401BH ;定时器/计数器 1中断程序入口地址LJMP INTCSEG AT 4100HSTART: MOV A,#01H ;首显示码MOV R1,#03H ;03是偏移量,即从基址寄存器到表首的距离MOV R0,#5H ;05是计数值MOV TMOD,#10H ;计数器置为方式 1MOV TL1,#0AFH ;装入时间常数MOV TH1,#03CHORL IE,#88H ;CPU中断开放标志位和定时器;1溢出中断允许位均置位SETB TR1 ;开始计数LOOP1: CJNE R0,#00,DISPMOV R0,#5H ;R0计数计完一个周期,重置初值INC R1 ;表地址偏移量加 1CJNE R1,#31H,LOOP2MOV R1,#03H ;如到表尾,则重置偏移量初值LOOP2: MOV A,R1 ;从表中取显示码入累加器MOVC A,@A+PCJMP DISPDB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCHDB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEHDB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFHDB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00HDISP: ;MOV DPTR,#OUTPORT ;MOVX @DPTR,AMOV P1,A ;将取得的显示码从 P1口输出显示JMP LOOP1INT: CLR TR1 ;停止计数DEC R0 ;计数值减一MOV TL1,#0AFH ;重置时间常数初值MOV TH1,#03CHSETB TR1 ;开始计数RETI ;中断返回END教师签名:年 月 日
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160493.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...