《单片机原理及应用》实验指导书余锡存主编南京师范大学电气与自动化工程学院2007年2月实验一单片机开发系统的操作练习1、实验目的通过简单程序的编辑、调试、执行,了解开发系统的操作过程。
2、实验设备计算机一台,MCS-51仿真调试软件SUPER ICES-G16一套。
3、实验内容A、熟悉SUPER ICES-G16软件的各项菜单功能。
B、计算N个数据的和:Y=ΣX i。
其中,X i分别放在片内RAM区50H~55H单元中,求和的结果放在片内RAM区03H(高位)、04H(低位)单元中。
参考程序SUM.ASM:ORG 0000HAJMP MAINORG 0100HMAIN:MOV R2,#06HMOV R3,#00HMOV R4,#00HMOV R0,#50HL1:MOV A,R4ADD A,@R0MOV R4 , AINC R0CLR AADDC A,R3MOV R3,ADJNZ R2,L1L2:SJMP L2运行MCS-51仿真软件,在编辑窗口编辑好文件SUM。
ASM后,按F10键进入主菜单选择Assemble项进行汇编,若无误后按F8键执行。
C、注意:在程序执行前,按F10键进入主菜单选择WINDOWS窗口,按Tab键将光标移到DATA项,修改50H~55H单元的内容。
重新编译后,按F8单步运行,观察内部RAM区03H、04H单元的内容,做好记录。
练习:(1)32H+41H+01H+56H+11H+03H=?(2)95H+01H+02H+44H+48H+12H=?(3)54H+F6H+1BH+20H+04H+C1H=?实验二MCS--51汇编程序编程练习一1、实验目的熟悉MCS--51的指令系统,了解编程方法。
2、实验设备计算机一台,MCS-51仿真调试软件SUPER ICES-G16一套。
3、实验内容在内部RAM的BLOCK开始的单元中有一无符号数据块,数据块长度存入LEN单元。
试编程求其中的最大数并存入MAX单元中。
参考程序MAX.ASM:ORG 0000HAJMP STARTORG 0300HBLOCK DATA 20HLEN DATA 40HMAX DATA 42HSTART:MOV MAX,#00HMOV R0,#BLOCKLOOP:MOV A,@R0CJNE A,MAX,NEXT1NEXT1:JC NEXTMOV MAX,ANEXT:INC R0DJNZ LEN,LOOPSJMP $END4、实验步骤A、运行MCS-51仿真软件,在编辑窗口编辑好文件MAX.ASM 。
B、在程序执行前,选择WINDOWS窗口,将光标移到DATA项,将10个数据装入内部RAM 20H~29H单元,并将40H的内容修改为10。
C、选择Assemble项进行汇编,若无误后按F8执行。
观察40H、42H单元的内容,并记录结果。
实验三MCS--51汇编程序编程练习二1、实验目的熟悉MCS--51的指令系统,了解编程方法。
2、实验设备计算机一台,MCS-51仿真调试软件SUPER ICES-G16一套。
3、实验内容在外部RAM的BLOCK单元开始有一数据块,数据块长度存入内部RAM的LEN单元。
试编程统计其中的正数、负数和零的个数分别存入内部RAM的PCOUNT、MCOUNT和ZCOUNT单元。
参考程序PMZ.ASM:ORG 0000HAJMP STARTORG 0300HBLOCK XDATA 1000HLEN DATA 20HPCOUNT DATA 21HMCOUNT DATA 22HZCOUNT DATA 23HSTART :MOV R0,#00HMOV R1,#00HMOV R2,#00HMOV DPTR,#BLOCKLOOP:MOVX A,@DPTRINC DPTRJB ACC.7,FUCJNE A,#00H,NEXT1INC R0SJMP NEXTNEXT1:INC R2SJMP NEXTFU: INC R1NEXT:DJNZ LEN,LOOPMOV ZCOUNT, R0MOV MCOUNT, R1MOV PCOUNT, R2SJMP $END4、实验步骤A、运行MCS-51仿真软件,在编辑窗口编辑好文件PMZ.ASM 。
B、在程序执行前,选择WINDOWS窗口,将光标移到XDATA项,将10个数据装入外部RAM 1000H~1009H单元,并将20H的内容修改为10。
C、选择Assemble项进行汇编,若无误后按F8执行。
观察21H、22H和23H单元的内容,并记录结果。
实验四MCS--51汇编程序编程练习三1、实验目的熟悉MCS--51的指令系统,了解编程方法。
2、实验设备计算机一台,MCS-51仿真调试软件SUPER ICES-G16一套。
3、实验内容将外部RAM的40H单元中的一个字节拆成2个ASCII 码,分别存入内部RAM41H和42H单元中。
参考程序ASCII.ASM:ORG 0000HLJMP STARTORG 1000HSTART :MOV DPTR,#40HMOV R0,#41HMOVX A,@DPTRPUSH AANL A,#0FHLCALL CHANGEMOV @R0,AINC R0POP ASWAP AANL A,#0FHLCALL CHANGEMOV @R0,ASJMP $CHANGE:CJNE A,#0AH,NEXTNEXT:JNC NEXT1ADD A,#30HRETNEXT1:ADD A,#37HRETEND4、实验步骤A、运行MCS-51仿真软件,在编辑窗口编辑好文件ASCII.ASM 。
B、在程序执行前,选择WINDOWS窗口,将光标移到DATA项,将12H数据装入外部RAM 40H单元。
C、选择Assemble项进行汇编,若无误后按F8执行。
观察41H、42H单元的内容,并记录结果。
D、选择WINDOWS窗口,将光标移到DATA项,把外部RAM 40H单元的内容修改为ABH。
再选择Assemble项进行汇编,若无误后按F8执行。
观察41H、42H单元的内容,并记录结果。
实验五 ADC0809模数转换实验一、实验目的1、掌握ADC0809模/数转换芯片与单片机的连接方法及ADC0809的典型应用2、掌握用少量的指令调试硬件的方法3、掌握用查询方式、中断方式完成模/数转换程序的编写方法二、实验说明本实验使用ADC0809模数转换器,ADC0809是8通道8位CMOS逐次逼近式A/D转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。
下图为该芯片的引脚图。
各引脚功能如下:IN0~IN7:八路模拟信号输入端。
ADD-A、ADD-B、ADD-C:三位地址码输入端。
八路模拟信号转换选择由这三个端口控制。
CLOCK:外部时钟输入端。
D0~D7:数字量输出端。
OE:A/D转换结果输出允许控制端。
当OE为高电平时,允许A/D转换结果从D0~D7端输出。
ALE:地址锁存允许信号输入端。
八路模拟通道地址由A、B、C输入,在ALE信号有效时将该八路地址锁存。
START:启动A/D转换信号输入端。
当START端输入一个正脉冲时,将进行A/D转换。
EOC:A/D转换结束信号输出端。
当 A/D转换结束后,EOC输出高电平。
ref(+)、ref(-):正负基准电压输入端。
基准正电压的典型值为+5V。
V CC和GND:芯片的电源端和地端。
三、实验步骤1、使用ADC0809与单片机接口模块,用十线扁平插头将P1口与8位发光二极管模块相连,用导线将RXD、TXD与串行静态显示模块的DIN、CLK相连,将+5V电源和地分别接口到模拟信号输入的“+”“-”两端,将实验台左右两块面板上,正负5V电源之间的地相连。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
4、输入源程序,编译无误后,全速运行程序,5LED静态显示“AD XX”,“XX”为AD 转换后的值,8位发光二极管显示“XX”的二进制值,调节模拟信号输入端的电位器旋钮,显示值随着变化,顺时针旋转值增大,AD转换值的范围是0~FFH。
5、可把源程序编译成OBJ文件,烧录到89C51芯片中。
四、流程图及源程序1.源程序DBUF0 EQU 30HTEMP EQU 40HDIN BIT 0B0HCLK BIT 0B1HORG 0000HSTART: MOV R0,#DBUF0 ;显示缓冲器存放0AH,0DH,-,0XH,0XH MOV @R0,#0AH ;串行静态显示“AD XX”XX表示0~FINC R0MOV @R0,#0DHINC R0MOV @R0,#11HINC R0MOV DPTR,#0FEF3H ;A/D地址MOV A,#0 ;清零MOVX @DPTR,A ;启动A/DWAIT: JNB P3.3,WAIT ;等待转换结束MOVX A,@DPTR ;读入结果MOV P1,A ;转换结果送入发光二极管显示MOV B,A ;累加器内容存入B中SWAP A ;A的内容高四位与低四位交换 ANL A,#0FH ;A的内容高四位清零XCH A,@R0 ;A/D转换结果高位送入DBUF3中INC R0MOV A,B ;取出A/D转换后的结果ANL A,#0FH ;A的内容高四位清零XCH A,@R0 ;结果低位送入DBF4中 ACALL DISP1 ;串行静态显示“AD XX” ACALL DELAY ;延时AJMP STARTDISP1: ;静态显示子程序 MOV R0,#DBUF0MOV R1,#TEMPMOV R2,#5DP10: MOV DPTR,#SEGTAB ;表头地址MOV A,@R0MOVC A,@A+DPTR ;取段码MOV @R1,A ;到TEMP中INC R0INC R1DJNZ R2,DP10MOV R0,#TEMP ;段码地址指针MOV R1,#5 ;段码字节数DP12: MOV R2,#8 ;移位次数MOV A,@R0 ;取段码DP13: RLC A ;段码左移MOV DIN,C ;输出一位段码CLR CLK ;发送一个位移脉冲SETB CLKDJNZ R2,DP13INC R0DJNZ R1,DP12RETSEGTAB:DB 3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,BDB 58H,5EH,79H,71H,0,40H ;C,D,E,F,(空格),- DELAY: MOV R4,#08H ;延时AA1: MOV R5,#0FFHAA: NOPNOPDJNZ R5,AADJNZ R4,AA1RETEND2.流程图图9 程序流程图五、思考题1、A/D转换程序有三种编制方式:中断方式、查询方式、延时方式,实验中使用了查询方式,请用另两种方式编制程序。