微机原理第二次实验报告-董东启 下载本文

内容发布更新时间 : 2024/12/23 14:23:00星期一 下面是文章的全部内容请认真阅读。

汕头大学微机原理实验报告

专业年级:15机电 学号:2015124014 姓名:董东启实验日期:2017.11.24

实验二 定时器实验

一、实验目的与要求

利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。

1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。

2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。

二、实验注意事项

1、 启动KEIL软件,选择菜单“工程\\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。

2、 选择菜单“文件\\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。

3、 在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。

4、 使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。如果提示有编译错误请自行修改源程序然后再重新编译。

5、 用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。

6、 完成仿真器与计算机之间的连线并通电。 7、 在KEIL软件中启动“调试\\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。

8、 观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\\关闭仿真模式”退出仿真,选择 “工程\\关闭工程”可关闭当前工程。

9、 参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。

10、 用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。

11、 输入程序并仿真运行,注意数码管的显示内容。 12、 根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。

13、本次实验主要连线如图

汕头大学微机原理实验报告

专业年级:15机电 学号:2015124014 姓名:董东启实验日期:2017.11.24

三、实验内容

1. 利用定时器控制产生占空比可变的 PWM 波,通过按K01可PWMH值增加,

则占空比增加,LED 灯渐暗。按K2,PWM值减小,则占空比减少,LED 灯渐亮。

PWMH DATA 40H ;高电平脉冲的个数 PWM DATA 41H ;PWM周期 COUNTER DATA 42H ; TEMP DATA 43H OUTPWM EQU P1.0 ;PWM波输出引脚 OUTPWMb EQU P1.1 ;PWM波输出引脚b,用于外接示波器探头 INCKEY EQU P1.6 ;K01, PWMH值增加键。 DECKEY EQU P1.7 ;K02, PWMH值减小键。 ORG 0000H AJMP MAIN ORG 000BH AJMP INTT0 ORG 0100H MAIN: MOV SP,#60H ;给堆栈指针赋初值 MOV PWMH,#0bH ;赋初值 MOV COUNTER,#01H MOV PWM, #15H MOV TMOD, #02H ;定时器0在模式2下工作 MOV TL0, #38H ; 每200μs产生一次溢出 MOV TH0, #38H ;自动重装初值 SETB ET0 ;使能定时器0中断 SETB EA ;使能总中断

汕头大学微机原理实验报告

专业年级:15机电 学号:2015124014 姓名:董东启实验日期:2017.11.24

SETB TR0 ;开始计时 KSCAN: SETB INCKEY ;端口输入状态,扫描按键 SETB DECKEY JNB INCKEY,K1CHECK ;扫描K01,如果按下跳转到KEY1处理程序 JNB DECKEY,K2CHECK ;扫描K02,如果按下跳转到KEY2处理程序 SJMP KSCAN

K1CHECK: JB INCKEY,K1HANDLE

;若按下K01后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序 SJMP K1CHECK

K1HANDLE:MOV A,PWMH ; CJNE A,PWM,K1H0 ;判断是否到达上边界 SJMP KSCAN ;是,则不进行任何操作 K1H0: MOV A,PWMH INC A CJNE A,PWM,K1H1 ;如果在加1后到达最大值 CLR TR0 ;定时器停止 SETB OUTPWM ;置输出为高电平 SETB OUTPWMb SJMP K1H2

K1H1: CJNE A,#02H,K1H2 ;如果加1后到达下边界 SETB TR0 ;重开定时器 K1H2: INC PWMH ;增加占空比 SJMP KSCAN

K2CHECK: JB DECKEY,K2HANDLE

;若按下K02后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序 SJMP K2CHECK K2HANDLE: MOV A,PWMH ; CJNE A,#01H,K2H0 ;判断是否到达下边界,是,则不进行任何操作 SJMP KSCAN ; K2H0: MOV A,PWMH ; MOV TEMP,PWM DEC A CJNE A,#01H,K2H1 ;如果在减1后到达下边界 CLR TR0 ;定时器停止 CLR OUTPWM ;输出为低电平 CLR OUTPWMb SJMP K2H2 K2H1: DEC TEMP ; CJNE A,TEMP,K2H2 ;如果到达上边界 SETB TR0 ;启动定时器 K2H2: DEC PWMH SJMP KSCAN ;降低占空比 INTT0: PUSH PSW