1、单片机实验报告概况北京联合大学单片机实验报告学 院: 自动化 专 业: 班 级: 学 号: 姓 名: 2012年12月29日实验1单片机实验系统硬软件环境认识一 实验目的了解单片机实验板、计算机和仿真器组的连接方法,了解WAVE仿真软件,学会单步、断点和全速运行的程序调试运行方法,学会察看各存储单元、特殊寄存器等参数变化情况。二 实验设备伟福通用微控制器实验系统一台,通用计算机一台,WAVE仿真软件三 实验内容1. 编写计算1234H0FE7H的程序(程序1),要求把和的高8位存入51H单元,和的低8位存入50H单元,并用WAVE仿真软件调试运行。2. 编写一个程序(程序2),实现将20H29
2、H内的数据由小到大的顺序排列。四 实验步骤1观察了解通用微控制器实验系统的硬件组成,及其与通用计算机的连接;打开计算机可在桌面上看到WAVE仿真软件图标。2键入实验程序(1)双击桌面上的“WAVE中文版”图标,打开开发环境,选择“模拟仿真”,点击“文件”新建一个汇编程序文件,并以.asm后缀保存。(2)输入实验程序1。程序1代码: ORG 0000H LJMP MAIN ORG 0000HMAIN: MOV A,#34H ADD A,#0E7H MOV 50H,A MOV A,#12H ADDC A,#0FH MOV 51H,A END(3)点击“项目管理”选择“编译”,注意观察编译结果有无错
3、误。若有错误打开文件进行修改,若无错误转向下一步。3.运行程序(1)编译无误后,点击“窗口/CPU窗口”以便在寄存器(或特殊寄存器)查看或送入必要的初始数据;点击 “窗口/数据窗口” 以便在RAM数据区DATA中查看或送入必要的初始数据。点击”执行/复位”(2)观察寄存器的值及PSW各位的初始状态。(3)点击调试/单步(F8),单步运行各条指令,注意观察有关寄存器的值及PSW的数据变化。(4)也可点击调试/全速运行(Ctrl+F9)连续运行程序。(5)将运行结果填入表1。表1:程序1运行结果地址A51H50H运行前000000运行后22221B4. 将程序2输入,并在20H29H单元中输入10
4、个数据,点击“执行”选择“全速运行”,并将相关结果记录在表2中。程序2代码:EXCH_FLAG BIT 7FH ORG 0000H CLR R0 MOV 20H,#36 MOV 21H,#01 MOV 22H,#78 MOV 23H,#23 MOV 24H,#15 MOV 25H,#05 MOV 26H,#75 MOV 27H,#89 MOV 28H,#16 MOV 29H,#07 LJMP MAIN ORG 0030HMAIN: MOV R1,#20H MOV R5,#10 CLR EXCH_FLAG DEC R5 MOV A,R1LOOP: MOV R3,A INC R1 CLR C MO
5、V A,R1 SUBB A,R3 JNC NO_EXCH SETB EXCH_FLAG MOV A,R3 XCH A,R1 DEC R1 XCH A,R1 INC R1NO_EXCH: MOV A,R1 DJNZ R5,LOOP JB EXCH_FLAG,MAIN SJMP $END表2:程序2运行结果地址20H21H22H23H24H25H26H27H28H29H运行前24014E170F054B591007运行后0105070F1017244B4E595. 改变20H29H单元中的10个数据,调试运行程序将结果记录在表3中。表3:程序2运行结果地址20H21H22H23H24H25H26H
6、27H28H29H运行前21011917593B24311007运行后01071017192124313B59五 思考与总结1要求数据1234H和0FE7H分别存入31H、30H和33H、32H单元(高字节在高地址单元),如何编写程序。 ORG 0000HLJMP MAINORG 0030HMAIN: MOV 30H,#34H MOV 31H,#12H MOV 32H,#0E7H MOV 33H,#0FH END2在程序2中实现将20H27H内的8个数据由大到小的顺序排列,应如何修改程序? 答:LOOP中的JNC NO_EXCH改为JC_EXCH。 实验2并行输入/输出接口P1一实验目的巩固并
7、行输入输出接口的基本知识,掌握P1口的使用方法。理解CPU对P1口的操作可以是字节操作,也可以是位操作,每一位可以独立定义为输入输出。熟悉汇编语言对P1口操作的编程方法。二 实验设备伟福通用微控制器实验系统一台,通用计算机一台,WAVE仿真软件三 实验内容1 按照图1将P1.0P1.3接扳鍵开关,P1.4P1.7接发光二极管。依据P1.0P1.3接扳鍵开关状态控制P1.4P1.7发光二极管点亮。 图1并行接口实验原理图四 实验步骤2 分别输入程序,调试并运行,记录实验现象。程序代码: ORG 0000H LJMP MAIN ORG 0030HMAIN:MOV P1,#0FFH L1: MOV
8、A,P1 SWAP A ORL A,#0FH MOV P1,A SJMP L1 END3 将P1.0P1.7全部接发光二极管,要实现如下功能:开始P1.0、P1.1点亮,左移50次后,P1.6、P1.7点亮,右移30次,循环往复之。试编制程序并实验之。程序代码:ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#03H MOV R1,#50 LJMP ZY1 MOV A,#0C0H MOV R1,#30 LJMP YY1 LJMP MAINZY1: DJNZ R1,ZY2 RETZY2: DEC R1 MOV P1,A RL A LJMP DL500MS RETYY
9、1: DJNZ R1,YY2 RETYY2: DEC R1 MOV P1,A RR A LJMP DL500MS RETDL500MS: MOV R2,#100DL1: MOV R3,#10DL2: MOV R4,#250DL3: DJNZ R4,DL3 DJNZ R3,DL2 DJNZ R2,DL1 RET END 五 思考与总结1. 在实验程序2中,若要将循环次数分别改为100和60,应如何修改程序?答:可直接将程序相应指令的50和30改为100和60,也可以再主程序中分别调用2次左移和右移子程序2. 在实验程序2中,若要将循环方向改为先右循环再左循环,应如何修改程序?答:可将主程序中相应
10、的左移和右移部分交换调用次序。3. 本次实验你有哪些收获?答:感觉自己学到的东西很有趣,很实用,能用自己的思维将功能要求通过程序转化为可以实际看到的,很有成就感。实验3定时器/计数器一实验目的巩固定时器/计数器的基本知识,掌握定时器/计数器方式控制字的设定方法,会应用定时器/计数器实现定时和计数功能。熟悉汇编语言对定时/计数器编程的方法。二 实验设备伟福通用微控制器实验系统一台,通用计算机一台,WAVE仿真软件三 实验内容按照图1将P1.7接发光二极管。要求利用定时器控制使LED亮一秒停一秒,周而复始。注意:其中长时间延时利用内部计数器方式。四 实验原理原理图如图1: 图1定时/计数器实验原理
11、图定时/计数器方式控制字:定时器1:方式2,计数方式,10次初值:F6H定时器0:方式1,定时方式,50ms初值:3CB0H五 实验步骤1根据实验内容要求设计程序并实验之。程序代码: ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV TMOD,#61H MOV TH1, #0F6H MOV TL1, #0F6H SETB TR1LOOP: MOV TH0, #3CH MOV TL0, #0B0H SETB TR0T3_10: JBC TF0,T3_20 SJMP T3_10T3_20: CPL P1.0 NOP JBC TF1,T3_30 SJMP LOOPT3_3
12、0: CPL P1.7 SJMP LOOP END2若要使LED亮0.5秒停0.5秒循环,应如何修改程序?实验之。答:子程序LOOP改为LOOP: MOV TH0,#9EH MOV TL0,#58H SETB TR0六 思考与总结1定时器的方式控制字TMOD应如何确定,其值是多少?答:61H=0110 0001B2T1、T0的初值是如何刷新的?答:T1没有进行刷新,T0由定时1s后重新进入LOOP重装T0初值3若要用R7做计数器计定时器0溢出次数实现1秒钟定时,应当怎样修改程序?答: ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV TMOD,#01H MOV R7
13、, #10LOOP: MOV TH0, #3CH MOV TL0, #0B0H SETB TR0T3_10: JBC TF0,T3_20 SJMP T3_10T3_20: CPL P1.0 NOP DEC R7 DJNZ R7,T3_30 SJMP LOOPT3_30: MOV R7,#10CPL P1.7 SJMP LOOP END4本次实验你遇到了哪些问题?是如何解决的?答:试验中定时器的初值计算和试验箱的晶振周期不清楚,出现了LED灯亮灭时间不符合要求,最后请教老师解决了。实验4中断的使用一实验目的进一步理解中断的概念,掌握使用中断功能的一般方法,识记中断服务程序的入口地址。理解中断服务
14、程序的编程方法。二实验设备伟福通用微控制器实验系统一台,通用计算机一台,WAVE仿真软件三实验内容由中断信号控制P1.7,并连接发光二极管LED,使其亮灭交替变换。四实验原理如图1:图1 中断实原理图五实验步骤1根据实验内容要求设计程序并实验之。程序代码: ORG 0000H LJMP MAIN ORG 0003H ;外部中断0入口地址 LJMP EX0_INT ORG 001BH ;定时器T1中断入口地址 LJMP T1_INT ORG 0030HMAIN: MOV SP,#5FH SETB P3.2 ;初始化P3.2即外部中断口 CLR IT1 ;初始化定时器1中断 CLR PX0 ;初始
15、化外部0中断优先 SETB EX0 ;外部中断0允许 SETB EA ;中断总允许 SJMP $ ORG 1000HEX0_INT: MOV TMOD,#10H ;外部中断0 MOV TH1,#0DCH ;定时器1初值 MOV TL1,#00H SETB TR1 ;启动T1 SETB ET1 ;允许T1中断 SETB PT1 ;T1优先 MOV R7,#100 ;计数100次 JNB P3.2,$ ;无外部中断 CLR TR1 ;由外部中断,停止计时 RETI ORG 2000HT1_INT:MOV TH1,#0DCH ;T1初值 MOV TL1,#00H DJNZ R7,BREAK ;R7计满100次,跳转BREAK返回 MOV R7,#100 CPL P1.7 ;脉冲取反BREAK: RETI END六思考与总结1外部中断0、定时器1的中断处理程序入口地址分别是多少?答:0003H,001BH2给实验程序写出注释。答:注释如上。3修改程序使LED亮1秒灭1秒并实验之。4若要使LED灯在开关SB打开时总是处于灭的状态,试修改程序并实验之。答:EX0_INT中JNB P3.2,$之后加一句 CLR P1.7
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1