单片机实验指导.docx
《单片机实验指导.docx》由会员分享,可在线阅读,更多相关《单片机实验指导.docx(16页珍藏版)》请在冰豆网上搜索。
单片机实验指导
实验一清零程序
一、实验目的
(1)掌握汇编语言设计和调试方法;
(2)熟悉MCS-51单片机实验系统。
二、实验内容
程序一:
把2000H~20FFH的内容清零。
三、程序框图
清零
四、实验步骤
程序一:
用连续或单步方式运行程序,检查2000~20FF中执行程序前后的内容变化。
五、思考
(1)对于清零程序,假使把2000H~20FFH中的内容改成FF,如何修改本程序?
(2)如何用断点方式调试程序?
ORG0000H
SE01:
MOVR0,#00H
MOVDPTR,#2000H
LOO1:
CLRA
MOVX@DPTR,A
INCDPTR
INCR0
CJNER0,#00H,LOO1
LOOP:
SJMPLOOP
END
实验二拆字程序
一、实验目的
(1)掌握汇编语言设计和调试方法;
(2)熟悉MCS-51单片机实验系统。
二、实验内容
把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H,高位清零,一般本程序用于把数据送显示缓冲区时用。
三、程序框图
拆字
四、实验步骤
用连续或单步方式运行程序,检查2000~2002H中内容变化情况。
五、思考
编写程序:
把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
ORG0000H
SE02:
MOVDPTR,#2000H
MOVXA,@DPTR
MOVB,A
SWAPA
ANLA,#0FH
INCDPTR
MOVX@DPTR,A
INCDPTR
MOVA,B
ANLA,#0FH
MOVX@DPTR,A
SJMP$
END
实验三P1口亮灯实验
一、实验目的
(1)学习P1口的使用方法;
(2)学习延时子程序的编写。
二、实验预备知识
(1)P1口对准双向口,每一位都可独立地定义为输出或输入。
(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。
三、实验内容
P1口作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
四、程序框图
五、实验电路
六、实验步骤
A2区的P10—P17用8芯排线连接到D1区的LED1—LED8,运行程序后,观察发光二极管闪亮移位情况。
七、思考
(1)改变延时常数,使发光二极管闪亮时间改变;
(2)修改程序,使发光二极管闪亮移位方向改变。
ORG0000H
SE18:
MOVP1,#0FFH
LO34:
MOVA,#0FEH
LO33:
MOVP1,A
LCALLSE19
RLA
SJMPLO33
SE19:
MOVR6,#0A0H
LO36:
MOVR7,#0FEH
LO35:
DJNZR7,LO35
DJNZR6,LO36
RET
END
实验四定时流水灯实验(定时器简单应用)
一、实验目的
通过学习单片机定时器的简单定时操作,掌握单片机定时器使用的一般方法。
二、实验内容
利用查询方式,利用定时器T0(或T1),实现在8051单片机的P1.0引脚输出一个周期为1S的连续方波,并通过L1指示观察其输出。
(fosc=6MHz)
三、实验原理图
四、实验步骤
用排线连接A2区P1口和D2区LED1—LED8,编写定时控制程序,观察LED发光情况
6MHz的晶振,采用50ms定时,工作方式1,循环10次来实现。
X=65536-500/2*10-3=40536=9E58H
TH=9EH
TL=58H
查询方式源代码:
ORG0000H
MAIN:
MOVTMOD,#10H;T1工作方式1
MOVR3,#10
LOOP1:
MOVTH1,#9EH
MOVTL1,#58H
SETBTR1
NOP
LOOP:
JNBTF1,LOOP
CLRTF1
CLRTR1
DJNZR3,LOOP1
MOVR3,#10
CPLP1.1
SJMPLOOP1
END
中断方式源代码:
ORG0000H
LJMPMAIN
ORG001BH
LJMPTF1INT
ORG0030H
MAIN:
MOVTMOD,#10H
MOVR3,#10
MOVTH1,#9EH
MOVTL1,#58H
SETBET1
SETBTR1
SETBEA
HERE:
SJMPHERE
TF1INT:
CLRTR1
MOVTH1,#9EH
MOVTL1,#58H
SETBTR1
DJNZR3,LOOP
CPLP1.1
MOVR3,#10
LOOP:
RETI
END
实验五数据区传送程序
一、实验目的
(1)掌握RAM中的数据操作;
(2)熟悉8031(8051)指令系统,掌握程序设计方法。
二、实验内容
把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、程序框图
数据区传送
四、实验步骤
在R2、R3中输入源首址(例如0000H),R4、R5中输入目的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查0000~1FFFH中内容是否和2000~3FFFH中内容完全一致。
ORG0000H
SJMPMAIN
MAIN:
MOVR2,#00H
MOVR3,#00H
MOVR4,#20H
MOVR5,#00H
MOVR6,#1FH
MOVR7,#0FFH
SE22:
MOVDPL,R3
MOVDPH,R2
MOVXA,@DPTR
MOVDPL,R5
MOVDPH,R4
MOVX@DPTR,A
CJNER3,#0FFH,LO42
INCR2
LO42:
INCR3
CJNER5,#0FFH,LO43
INCR4
LO43:
INCR5
CJNER7,#00H,LO44
CJNER6,#00H,LO45
SJMP$
NOP
LO44:
DECR7
SJMPSE22
LO45:
DECR7
DECR6
SJMPSE22
END
实验六简单I/O扩展实验
一、实验目的
(1)掌握P3口、P1口简单使用;
(2)学习延时程序的编写和使用。
二、实验内容
1.P3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一。
2.P1口做输出口,编写程序,使P1口接的8个发光二极管D1—D8按16进制加一方式点亮发光二极管。
三、实验说明
P3口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:
当P3口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
四、实验程序框图
五、实验线路图
六、实验步骤
①A2区INT1用插针连至D1区SW1孔,A1区P10—P17用排线连至D1区LED1—LED8。
②连续运行程序。
③开关SW1每拨动一次,LED1—LED8发光二极管按16进制方式加一点亮。
ORG0000H
MAIN:
JBP3.3,MAIN
LCALLDELAY
JBP3.3,MAIN
L1:
JNBP3.3,L1
LCALLDELAY
INCA
MOVP1,A
LJMPMAIN
DELAY:
MOVR6,#0FFH
L2:
MOVR7,#0FFH
L3:
DJNZR7,L3
DJNZR6,L2
RET
END
实验七键盘实验
一、实验目的
利用实验仪上提供的按键K1~K7作为电子琴按键,控制蜂鸣器发声,使用户了解计算机发声原理,熟悉定时器和键盘扫描电路的工作原理及编程方法。
(蜂鸣器3~4KHz的方波)
二、实验内容
编写一段程序,用P3.3口控制(输出7种音阶标称频率的方波),使B5区的蜂鸣器发出不同的音调。
程序检测按键的状态,当按下某一键时,蜂鸣器发出对应的音调。
三、实验电路
六、实验步骤
(1)用导线将A2区的P3.3口(INT1)和B5区的BUZZ接口相连,然后将D1区的J53接口和A2区的J61接口一一对应相连。
(2)编写按键的动态键盘扫描程序,根据不同音阶的频率编写蜂鸣器的音调控制程序。
BUZZEQUP3.3
ORG0000H
LJMPMAIN
ORG000BH
LJMPINT_T0
ORG0100H
MAIN:
MOVSP,#60H;初始化堆栈向量
MOV30H,#00;定时器初值清零
MOV31H,#00
MOVP1,#0FFH;设置P1口为输入模式
MOVTMOD,#01H;设置定时器0为工作模式1
SETBET0;开定时器0中断
SETBEA;开总中断
CLRTR0;关闭定时器0
START:
MOVR0,P1
CJNER0,#0FFH,KEY1;键盘扫描
CLRTR0
SJMPSTART
KEY1:
CJNER0,#0FEH,KEY2;K1键按下
MOV30H,#0FBH;设置音阶1
MOV31H,#0E9H
LJMPSET_TIMER
KEY2:
CJNER0,#0FDH,KEY3;K2键按下
MOV30H,#0FCH;设置音阶2
MOV31H,#5CH
LJMPSET_TIMER
KEY3:
CJNER0,#0FBH,KEY4;K3键按下
MOV30H,#0FCH;设置音阶3
MOV31H,#0C1H
LJMPSET_TIMER
KEY4:
CJNER0,#0F7H,KEY5;K4键按下
MOV30H,#0FCH;设置音阶4
MOV31H,#0EFH
LJMPSET_TIMER
KEY5:
CJNER0,#0EFH,KEY6;K5键按下
MOV30H,#0FDH;设置音阶5
MOV31H,#045H
LJMPSET_TIMER
KEY6:
CJNER0,#0DFH,KEY7;K6键按下
MOV30H,#0FDH;设置音阶6
MOV31H,#92H
LJMPSET_TIMER
KEY7:
CJNER0,#0BFH,NOKEY;K7键按下
MOV30H,#0FDH;设置音阶7
MOV31H,#0D6H
SET_TIMER:
SETBTR0;发声
SJMPSTART
NOKEY:
CLRTR0;无键按下
SJMPSTART
INT_T0:
;T0中断服务程序
MOVTH0,30H;定时器附初值
MOVTL0,31H
CPLBUZZ;输出方波
RETI
END
实验八D/A接口实验
一、实验目的
熟悉D/A转换的工作原理,学习使用并行数模转换芯片ADC0832进行数字信号到模拟信号的转换过程。
二、实验内容
通过片外总线方式访问并行模拟数字转换器芯片ADC0832,掌握数字信号到模拟信号的转换方法。
三、实验原理图
四、实验步骤
1.将DAC0832模块插入PARK2区
2.将模块上的JP1跳线帽跳至右侧的VCC处
3.将A7区的P2_CS连接到A2区的A15
4.将A7区的P2_IO2和P2_INT分别接入C4区的A-和AOUT,C4区的A+接D2区的GND.
5.将C4区的V+和V-分别接至C1区的+12V和-12V
6.运行程序,使用万用表观察C4区的AOUT处的电压是否和程序输出电压相同。
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVDPTR,#7FFFH
MOVA,#0FFH
LOOP:
MOVX@DPTR,A
LJMPLOOP
END
实验九A/D接口实验
一、实验目的
熟悉A/D转换的工作原理,学习使用并行模数转换芯片ADC0809进行电压信号的采集和数据处理。
二、实验内容
通过片外总线方式访问并行模拟数字转换器芯片ADC0809,掌握模拟电压的通用采集方法。
三、实验原理图
四、实验步骤
1.将ADC0809模块插入PARK2区
2.将D2区1K电位器的左端金属孔通过导线连接到该区的GND金属孔,而右端的金属孔通过导线连接到该区的VCC金属孔
3.将D2区1K电位器的中间金属孔链接到A7去的P2_IO2 金属孔
4.将A7区的P2_IO3—P2_IO5分别连接到A2区的A2—A0,P2_INT连接到A2区的INT0。
5.将A7区的P2_CS连接到A2区的A15
6.A1区P10—P17用排线连至D1区LED1—LED8
7.运行程序,设置断点,观察转换值是否与万用表测试值相同或者与对应的LED亮灭是否一致。
ORG0000H
MAIN:
MOVR1,#30H
MOVDPTR,#7FF8H
MOVR7,#02H
LOOP:
MOVX@DPTR,A
MOVR6,#20H
DELAY:
NOP
NOP
NOP
DJNZR6,DELAY
MOVXA,@DPTR
MOV@R1,A
INCDPTR
INCR1
DJNZR7,LOOP
LJMPMAIN
END