微机原理课程实验指导书150914.docx
- 文档编号:15785030
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:31
- 大小:78.25KB
微机原理课程实验指导书150914.docx
《微机原理课程实验指导书150914.docx》由会员分享,可在线阅读,更多相关《微机原理课程实验指导书150914.docx(31页珍藏版)》请在冰点文库上搜索。
微机原理课程实验指导书150914
微机原理课程实验指导书
(XL600实验仪)
机电系摘录
2015.8
实验一P1口实验及延时子程序设计
一、实验目的与要求
利用单片机的P0口、P1口作为I/O口进行实验验证,掌握利用P0口、P1口作为输入口和输出口的编程方法,理解并掌握延时子程序的设计方法。
实验要求:
(1)编写一段程序,用P0口作为输出口,利用延时子程序达到控制LED输出跑马灯的效果。
(2)编写一段程序,用P1输入拨动开关的状态来控制P0口输出状态。
二、实验参考步骤
1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T1a.uv2)。
CPU型号可选择Atmel\at89c52;无需添加标准文件头。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test1a.asm,然后将其加入到源程序组1中(在sourcegroupet右键点击菜单然后选中addfilestogroup‘sourcegroup1’,注意文件扩展名为.asm)。
3、在工程菜单的选项“目标1属性”(optionsfortarget‘target1’)中设置相应的选项,包括“输出(output)\产生hex文件(creathex)”选项以便汇编生成HEX代码供编程器使用,在“调试(debug)\使用KeilMonitor-51Driver”的设置中选择相应的串口号。
4、使用“工程”(Project)中的“编译全部文件”(rebuildalltargetfiles)完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T1a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、用8PIN连线将P0(JP51)连接到8路指示灯部分的JP32,再完成仿真器与计算机之间的连线并通电。
6、在KEIL软件中启动“调试(debug)\开启仿真模式(start\stopdebugsession)”,然后用“运行”(run)命令实现全速运行的仿真。
7、记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”(先halt退出运行再StopDebugging,不要点击得太快!
)退出仿真,选择“工程(project)\关闭工程”(closeproject)可关闭当前工程。
8、参考步骤1-4完成参考源程序2的建立与输入,如新项目T1b.uv2和新的源程序test1b.asm,完成编译与仿真设置。
9、用8PIN连线将P0(JP51)连接到8路指示灯部分的JP32,将P1口连接到JP40的拨动开关。
10、仿真运行,注意拨动不同开关位观察指示灯的变化状态,记录后中断调试并退出仿真状态.
11、根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。
三、参考程序
1、用P0口作为输出口,利用延时子程序达到控制LED输出跑马灯的效果。
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#0FFH;初值全1,灯全灭
MOVP0,A;送P0口显示
CLRC;CY清零,循环中通过移位指令使灯亮
MAIN_LP:
LCALLDELAY;延时
RLCA;循环移位
MOVP0,A;新值送P0口,点亮下一个LED
JMPMAIN_LP;不停循环
;=========================================
DELAY:
MOVR7,#0FFH;延时子程序
MOVR6,#0FFH
DLY_LP:
NOP
NOP
DJNZR6,DLY_LP
MOVR6,#0FFH
DJNZR7,DLY_LP
RET
END
2、编写一段程序,用P1口输入控制P0口输出状态,试用P1口控制P0口输出学生自己学号的最后两位数码的组合BCD码(如38表示为00111000),试验成功后请拍照作为实验现象的原始数据。
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#0FFH;初值全1
MOVP1,A;置位P1口准备输入
MOVA,P1;将拨动开关状态通过P1口输入
OUTP0:
MOVP0,A;新值送P0口
JMPMAIN;不停循环
END
思考与拓展:
试根据参考程序1中多个状态变化的累计时间估算出延时子程序的时间并进行验算,通过修改R6和R7的赋值使每个状态变换的时间为N*10ms(其中N值为学号的最后两位数值,如恰好是00则取值为50)。
实验二定时器实验
一、实验目的与要求
利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。
1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。
2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。
掌握实验基础内容后根据参考源程序进行修改和拓展,自行设计程序目标并编程验证。
二、实验参考步骤
1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51Driver”的设置中选择相应的串口号。
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进行思考、修改和拓展,自行设计程序目标并编程验证。
三、参考程序
1、利用定时器控制产生占空比可变的PWM波,通过按K01可PWMH值增加,则占空比增加,LED灯渐暗。
按K2,PWM值减小,则占空比减少,LED灯渐亮。
PWMHDATA40H;高电平脉冲的个数
PWMDATA41H;PWM周期
COUNTERDATA42H;
TEMPDATA43H
OUTPWMEQUP1.0;PWM波输出引脚
OUTPWMbEQUP1.1;PWM波输出引脚b,用于外接示波器探头
INCKEYEQUP1.6;K01,PWMH值增加键。
DECKEYEQUP1.7;K02,PWMH值减小键。
ORG0000H
AJMPMAIN
ORG000BH
AJMPINTT0
ORG0100H
MAIN:
MOVSP,#60H;给堆栈指针赋初值
MOVPWMH,#02H;赋初值
MOVCOUNTER,#01H
MOVPWM,#15H
MOVTMOD,#02H;定时器0在模式2下工作
MOVTL0,#38H;每200μs产生一次溢出
MOVTH0,#38H;自动重装初值
SETBET0;使能定时器0中断
SETBEA;使能总中断
SETBTR0;开始计时
KSCAN:
SETBINCKEY;端口输入状态,扫描按键
SETBDECKEY
JNBINCKEY,K1CHECK;扫描K01,如果按下跳转到KEY1处理程序
JNBDECKEY,K2CHECK;扫描K02,如果按下跳转到KEY2处理程序
SJMPKSCAN
K1CHECK:
JBINCKEY,K1HANDLE
;若按下K01后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序
SJMPK1CHECK
K1HANDLE:
MOVA,PWMH;
CJNEA,PWM,K1H0;判断是否到达上边界
SJMPKSCAN;是,则不进行任何操作
K1H0:
MOVA,PWMH
INCA
CJNEA,PWM,K1H1;如果在加1后到达最大值
CLRTR0;定时器停止
SETBOUTPWM;置输出为高电平
SETBOUTPWMb
SJMPK1H2
K1H1:
CJNEA,#02H,K1H2;如果加1后到达下边界
SETBTR0;重开定时器
K1H2:
INCPWMH;增加占空比
SJMPKSCAN
K2CHECK:
JBDECKEY,K2HANDLE
;若按下K02后释放,跳转到KEY1处理程序,可考虑加延时去抖动程序
SJMPK2CHECK
K2HANDLE:
MOVA,PWMH;
CJNEA,#01H,K2H0;判断是否到达下边界,是,则不进行任何操作
SJMPKSCAN;
K2H0:
MOVA,PWMH;
MOVTEMP,PWM
DECA
CJNEA,#01H,K2H1;如果在减1后到达下边界
CLRTR0;定时器停止
CLROUTPWM;输出为低电平
CLROUTPWMb
SJMPK2H2
K2H1:
DECTEMP;
CJNEA,TEMP,K2H2;如果到达上边界
SETBTR0;启动定时器
K2H2:
DECPWMH
SJMPKSCAN;降低占空比
INTT0:
PUSHPSW
PUSHACC
INCCOUNTER
MOVA,COUNTER
CJNEA,PWMH,INTT01
CLROUTPWM
CLROUTPWMb
INTT01:
CJNEA,PWM,INTT02
MOVCOUNTER,#01H
SETBOUTPWM
SETBOUTPWMb
INTT02:
POPACC
POPPSW
RETI
END
2、数码管显示演示程序:
在8个LED数码管上依次显示1,2,3,4,5,6,7,8。
引用端口:
数码管数据p0,数码管控制p2;
DIS_DIGITEQU40H
;位选通值,传送到P2口用于选通当前数码管的数值,
;如等于0xfe时,选通P2.0口数码管
DIS_INDEXDATA41H
;显示索引,用于标识当前显示的数码管和缓冲区的偏移量
DIS_BUFDATA50H
;显于缓冲区起始地址
ORG0000H
AJMPMAIN
ORG000BH
AJMPINTT0
ORG0100H
MAIN:
MOVP0,#0FFH;初始化I/O口
MOVP2,#0FFH
MOVTMOD,#02H;定时器0在模式2下工作
MOVTL0,#38H;每200μs产生一次溢出
MOVTH0,#38H;自动重装初值
SETBET0;使能定时器0中断
SETBEA;使能总中断
MOVDPTR,#DIS_CODE;设定显示初值为1-8
MOVA,#1;初值为1,以后顺序加1
MOVCA,@A+DPTR
MOVDIS_BUF,A
MOVA,#2
MOVCA,@A+DPTR
MOVDIS_BUF+01H,A
MOVA,#3
MOVCA,@A+DPTR
MOVDIS_BUF+02H,A
MOVA,#4
MOVCA,@A+DPTR
MOVDIS_BUF+03H,A
MOVA,#5
MOVCA,@A+DPTR
MOVDIS_BUF+04H,A
MOVA,#6
MOVCA,@A+DPTR
MOVDIS_BUF+05H,A
MOVA,#7
MOVCA,@A+DPTR
MOVDIS_BUF+06H,A
MOVA,#8
MOVCA,@A+DPTR
MOVDIS_BUF+07H,A
DISPLAY:
MOVDIS_DIGIT,#0FEH;初始从第一个数码管开始扫描
MOVDIS_INDEX,#0
SETBTR0;启动定时器0,开始动态扫描显示
MAIN_LP:
NOP
;主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容
SJMPMAIN_LP
;=====================================================
INTT0:
;定时器0中断服程序,用于数码管的动态扫描
PUSHACC
PUSHPSW
MOVP2,#0FFH;先关闭所有数码管
MOVA,#DIS_BUF;获得显示缓冲区基地址
ADDA,DIS_INDEX;获得偏移量
MOVR0,A;R0=基地址+偏移量
MOVA,@R0;获得显示代码
MOVP0,A;显示代码传送到P0口
MOVP2,DIS_DIGIT;
MOVA,DIS_DIGIT
;位选通值左移,下次中断时选通下一位数码管
RLA
MOVDIS_DIGIT,A
INCDIS_INDEX
;DIS_INDEX加1,下次中断时显示下一位
ANLDIS_INDEX,#0x07
;当DIS_INDEX等于8(00001000B)时,清0
POPPSW
POPACC
RETI
DIS_CODE:
DB28h,7eh,0a2h,62h,74h,61h,21h,7ah
DB20h,60h,30h,25h,0a9h,26h,0a1h,0b1h
;0-9和ABCDEF的数码管显示代码
END
四、思考与拓展:
1、试根据参考程序1中PWM波控制周期的大小进行验算,调整定时时间初值并进行调试验算,使PWM波控制周期为Nms(其中N值为学号的最后两位数值,如恰好是00则取值为50)。
2、尝试改变参考程序2的显示内容为学生自己的学号的后8位。
*上述拓展题如果修改验证成功请自行拍照作为原始数据并保留修改后的源程序作为实验报告中相应的程序内容,相应的改动内容请添加必要的说明。
实验三串口通信实验
一、实验目的与要求
利用开发板的串口仿真功能,掌握串口通信的编程方法。
实验要求:
(1)利用串行口向PC机发送字符“0x55”,利用串口调试软件在计算机端观察接收到的数据是否与预期一致。
(2)利用串行口向PC机发送字符串,利用串口调试软件在计算机端观察接收到的数据是否与预期一致
(3)观察分析参考程序3,利用开发板接收PC机发送过来的16进制数据并用数码管显示。
(4)掌握实验基础内容后根据参考源程序进行修改和拓展,自行设计程序目标并编程验证,比如修改发送程序的内容,实现由上位机控制数码管显示内容等。
二、实验参考步骤
**由于串口功能要用于实验,所以本次实验采用程序写入开发板后直接运行方式进行实验,不能采用Keil仿真运行方式进行。
1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T3a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test3a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,不使用“调试\使用KeilMonitor-51Driver”功能。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T3a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、完成仿真器与计算机之间的通信连线并通电。
在开发板中将“编程\仿真”功能按钮设置为编程状态。
6、
图3-1XLISP操作界面
在计算机端先启动XLISP软件,如图3-1所示。
在“操作”界面可以检测编程器是否正常,不正常的话可尝试检查开发板中的“编程/仿真”功能按钮设置是否正确或者在“选项”中进行串口测试。
7、用XLISP软件中的“文件\打开”功能打开步骤4中生成的.hex文件;利用“智能一键通”功能快速完成指令代码的写入,写入成功后关闭XLISP软件。
(由于编程串口要用于下面的串口调试,所以记得要“关闭”软件以释放相应的串口控制而不是将窗口最小化!
)
8、打开串口调试软件,设置相应的串口号、波特率和其他通信参数,打开串口通信功能。
9、在开发板中将“编程\仿真”功能按钮设置为仿真状态,复位开发板功能,此时可以看到串口调试软件不断接收到“0X55”的数据,切换为文本显示功能则为“U”字符。
10、观察并记录实验现象,然后在开发板中将“编程\仿真”功能按钮设置为编程状态,然后在串口调试软件中“关闭串口”以释放对该串口控制,防止下次XLISP软件编程时串口控制冲突。
11、参考步骤1-8完成参考源程序2的建立与输入,如新项目T3b.uv2和新的源程序test3b.asm,完成编译生成T3b.hex。
12、连接仿真板上的P1.7引脚到JP37上的K01按钮,在开发板中将“编程\仿真”功能按钮设置为仿真状态,复位开发板功能,此时可以通过按下P1.7连接的K01按钮向PC机发送字符串,串口调试软件切换为文本显示功能。
13、观察并记录实验现象,然后在开发板中将“编程\仿真”功能按钮设置为编程状态,然后在串口调试软件中“关闭串口”以释放对该串口控制,防止下次XLISP软件编程时串口控制冲突。
14、参考步骤1-4完成参考源程序2的建立与输入,如新项目T3c.uv2和新的源程序test3c.asm,完成编译生成T3c.hex。
15、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。
16、参考步骤5-8完成代码的写入和串口调试软件的设置,打开串口通信功能。
17、在开发板中将“编程\仿真”功能按钮设置为仿真状态,复位开发板功能,利用串口调调试软件逐次向开发板端发送不同的十六进制数值,如00,01,02,03,04,05,06,07,08,09,0a,0b,0c,0d,0e,0f,00,01,02,03,……,11,01,02等,注意观察数码管的显示内容和串口调试软件中显示接收到仿真板发送回来的内容。
18、观察现象并记录完毕后,在开发板中将“编程\仿真”功能按钮设置为编程状态,然后在串口调试软件中“关闭串口”以释放对该串口控制,防止下次XLISP软件编程时串口控制冲突。
19、根据参考源程序1和参考源程序2进行思考、修改和拓展,自行设计程序目标并编程验证。
三、参考程序
1.利用串口向PC机发送字符“0x55”。
ORG0000H
LJMPMain
ORG00F0H
Main:
MOVTMOD,#22H;设置T1为方式2
MOVSCON,#40H
MOVTH1,#0F3H;设置速率4800,(12M晶体)
MOVTL1,#0F3H
MOVPCON,#80H;定时器1开始计数
SETBTR1
next:
lcalldelay
mova,#55h
movr3,#01
setbp1.7
jnbp1.7,SENDWT
mova,#56h
movr3,#02
setbp1.6
jnbp1.6,SENDWT
sjmpnext
SENDWT:
CLRTI
movsbuf,a;发送数据
JNBTI,$;;
djnzr3,SENDWT
ljmpnext
delay:
movr7,#0
l0:
movr6,#0
djnzr6,$
djnzr7,l0
ret
;
END
2.利用串口向PC机发送字符串
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVTMOD,#22H;设置T1为方式2
MOVSCON,#40H
MOVTH1,#0F3H;设置速率4800,(12M晶体)
MOVTL1,#0F3H
MOVPCON,#80H;定时器1开始计数
SETBTR1
MAINLOOP:
setbp1.7
jbp1.7,MAINLOOP
movdptr,#tab
send$:
CLRTI
mova,#0
movca,@a+dptr
cjnea,#81h,send_SBUF
;81作为输出字符串的结束标志,不发送
ljmpMAINLOOP
send_SBUF:
MOVSBUF,a
JNBTI,$
incdptr
sjmpsend$
tab:
db0dh,0ah
db".....$$...$$.....",0dh,0ah
db"....$$$$$$$$$....",0dh,0ah
db"...$$$$$$$$$$$...",0dh,0ah
db"...$$$$$$$$$$$...",0dh,0ah
db"....$$$$$$$
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程 实验 指导书 150914