实验一软件实验1.1 实验目的通过实验熟悉DAIS软件仿真环境和MCS-51系列单片机指令系统。
掌握程序编制、调试方法和技巧。
1.2 实验内容1、把R1中内容传送至R0中。
2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
5、应用MOVC A,@A+PC指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:当x>=50时y=x;当x<50时y=5x。
8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H31H单元中,(要求将ASCII码转换部分设计为子程序)。
汇编语言程序如下;1、把R1中内容传送至R0中。
;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
org 0000hmov r1,#22hmov a,r1 ;1、把R1中内容传送至R0中mov r0,amov 20h,#33hmov 30h,20h ;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中mov dptr,#2000h ;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中mov a,#66hmovx @dptr,aclr amovx a,@dptrmov dptr,#2000h ;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
clr amovc a,@a+dptrsjmp $org 2000hdb 88hend;5、应用MOVC A,@A+dptr指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
org 0000hmov a,#3h ;查3的平方值mov dptr,#tab ;指向平方表的表头movc a,@a+dptr ;查表指令sjmp $tab:db 0,1,4,9,16,25,36,47,64,81,100,121,144,169,196,255;平方表end;6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
org 0000hclr cmov r2,#22hmov r3,#33hmov r4,#44hmov r5,#55hmov a,r3add a,r5mov 40h,amov a,r2addc a,r4mov 41h,asjmp $end;7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:;当x>=50时y=x;;当x<50时y=5x。
V AX equ 30HFUNC equ 40Horg 0000hmov V AX,#10mov a,V AXcjne A,#50,fen1fen1:jc fen2 ;小于50跳到fen2sjmp exit1fen2:mov b,#5mul abexit1:mov func,asjmp $end;8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
org 0000hmov dptr,#2000hmov r2,#31hloop:movx a,@dptrmov dph,#30hmovx @dptr,ainc dplmov dph,#20hdjnz r2,loopsjmp $end;9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H,31H单元中,(要求将ASCII码转换部分设计为子程序)。
org 0000hmov 20h,#2ahmov a,20hanl a,#0fhacall asc1mov 30h,amov a,20hanl a,#0f0hswap aacall asc1mov 31h,asjmp $asc1:cjne a,#10,fen1 ;ASCII码转换子程序fen1:jc fen2add a,#7hfen2:add a,#30hretsjmp $end实验二定时器/计数器实验2.1实验目的熟悉定时器/计数器的工作原理并掌握其编程方法和技巧,加深对中断的理解及运用。
2.2实验内容1、利用定时器T0的方式1编制一段程序,在P1.7引脚上输出一个方波控制一个红色指示灯。
①输出周期为40ms的方波,观察指示灯的变化。
②输出周期为200ms的方波,观察指示灯的变化。
2、利用计数器T1(P3.5)记录脉冲的个数。
每计满10个脉冲,使灯亮1秒,然后重新计数,循环以上操作。
外部脉冲通过实验箱右上角的/SP获得。
3.3实验预习1、熟悉MCS-51系列单片机定时器/计数器系统硬件结构与工作原理。
2、掌握定时器/计数器的编程方法,初值的计算方法等。
3、掌握查询方法和中断方式两种方法处理定时/计数的问题。
3.4注意事项1、注意定时器/计数器4种工作模式的选择以及初值的计算方法。
2、注意中断程序的应用方法。
3、实验系统的晶振为6MHz。
汇编语言程序如下;1、利用定时器T0的方式1编制一段程序,在P1.7引脚上输出一个方波控制一个红色指示灯。
;①输出周期为40ms的方波,观察指示灯的变化。
;②输出周期为1s的方波,观察指示灯的变化。
;实验二1、①org 0000hajmp mainorg 000bhajmp t0fworg 0030hmain:mov tmod,#01h ;T0定时器方式1mov th0,#0D8H ;20ms=10000个MC,因为计数1个内部脉冲为2微妙。
mov tl0,#0F0H ;初值=65536-10000=55536=0D8F0Hsetb easetb et0setb tr0sjmp $t0fw:mov th0,#0D8Hmov tl0,#0F0Hcpl p1.7retiend;实验二1、②org 0000hajmp mainorg 000bhajmp t0fworg 0030hmain:mov tmod,#01h ;T0定时器方式1mov th0,#3CH ;100ms=50000个MCmov tl0,#0B0H ; 初值=65536-50000=15536=3CB0Hsetb easetb et0setb tr0mov r7,#05hsjmp $t0fw:mov th0,#3CHmov tl0,#0B0Hdjnz r7,rtmov r7,#05hcpl p1.7rt:retiend;2、利用计数器T1(P3.5)记录脉冲的个数。
每计满10个脉冲,使灯亮1秒,然后重新计数,循环以上操作。
外部脉冲通过实验箱右上角的/SP获得。
;只利用T1计数,定时用软件定时org 0000hajmp mainorg 001bh;计数器T1中断入口,对外部脉冲计数ajmp t1fworg 0030hmain:mov tmod,#60h ;T1计数器方式2,8位自动重装初值计数器,GATE=0,C/T=1 mov th1,#0F6H ;输入10个脉冲引起中断mov tl1,#0F6Hsetb easetb et1setb tr1sjmp $t1fw: ;计数器T1中断子程序clr p1.7 ;亮灯acall dy1s ;1秒setb p1.7 ;灭灯retidy1s:mov r7,#04h ;1秒=250*4个1msm2:mov r6,#0fahm1:mov r5,#0fahdjnz r5,$ ;内循环=250*4μs=1msdjnz r6,m1djnz r7,m2retend;或者利用T1计数,T0定时org 0000hajmp mainorg 000bhajmp t0fworg 001bhajmp t1fworg 0030hmain:mov tmod,#61h ;T1计数器方式2,T0定时器方式1 mov th1,#0F6Hmov tl1,#0F6Hmov th0,#3ch ;100ms初值mov tl0,#0b0hmov r7,#0ahsetb easetb et1setb et0setb tr1sjmp $t1fw:clr p1.7 ;亮灯setb tr0 ;开定时器T0retit0fw:mov th0,#3CHmov tl0,#0B0Hdjnz r7,rtmov th0,#3CHmov tl0,#0B0Hmov r7,#0ahsetb p1.7 ;灯灭clr tr0 ;关定时器T0rt:retiend实验三键盘/显示实验3.1实验目的1、掌握键盘和显示器的接口方法和编程方法。
2、掌握行列扫描式键盘和动态显示的工作原理。
3.2实验要求利用实验系统提供的键盘电路和显示电路,做一个行列扫描式键盘和数码显示实验,把按下键盘的键码在数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。
3.3键盘扫描显示控制电路3.4实验说明74LS240为反相缓冲器。
74ls273是带有清除端的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。
74LS245是8路同相三态双向总线收发器,可双向传输数据。
当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;DIR=“1”,信号由 A 向 B 传输;当/CE为高电平时,A、B均为高阻态。
本实验系统自带一个8×4的键盘,在判断有键按下后,要有一定的延时,防止键盘抖动。
数码管为共阴极,0-9的字型代码分别为0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。
汇编语言程序如下;键盘显示,键码在最高两位以十进制方式显示ORG 0mov 30h,#01h ;显示缓冲单元mov 31h,#02hmov 32h,#03hmov 33h,#04hmov 34h,#05hmov 35h,#06hLP8:ACALL KINP ;键盘扫描程序JB PSW.5,LP7 ;无键不处理键值MOV B,#0AH ;有键,分离键码DIV ABMOV 34H,B ;送显示缓冲MOV 35H,ALP7:ACALL DISP ;调显示程序SJMP LP8KINP:LCALL KAP ;扫描键子程序JNZ KP1SETB PSW.5 ;置无键标志RETKP1:LCALL DEL Y ;去抖LCALL KAP ;再次扫描键盘JNZ KP2 ;转识键码程序SETB PSW.5 ;置无键标志RETKP2:CLR PSW.5 ;置有键操作标志MOV R4,#00H ;0列加数KP4:MOV DPTR,#0FFDDHMOV A,R2MOVX @DPTR,A ;送列扫描信号MOV DPTR,#0FFDEHMOVX A,@DPTR ;回读行信号JB ACC.0,L1 ;不是第一行,转第二行MOV A,#00H ;是第一行,行吗=0AJMP KP5L1:JB ACC.1,L2 ; 不是第二行,转第三行MOV A,#08H ;是第二行,行码=8AJMP KP5L2:JB ACC.2,L3 ;不是第三行,转第四行MOV A,#10H ;是第三行,行码=16AJMP KP5L3:JB ACC.3,NEXT ;不是第四行,转下一列MOV A,#18H ;是第四行,行码=24KP5:ADD A,R4 ;对应的行码+对应的列码=键码PUSH ACC ;保护已经得到的键码KP3:LCALL DEL YLCALL KAP ;继续扫描JNZ KP3 ;A值不等于0,表示手未松开!POP ACC ;A值等于0,手已经松开,弹回键码!RETNEXT:INC R4 ;下一列列码加1MOV A,R2JNB ACC.7,KINP ;列到最后列了吗?RL AMOV R2,A ;下一列AJMP KP4 ;扫描下一列KAP:MOV A,#00H ;全扫描字(列)MOV DPTR,#0FFDDHMOV DPTR,#0FFDEHMOVX A,@DPTR ;回读行信息CPL AANL A,#0FH ;得到A值,=0,无键;≠0,有键RETDELY:MOV R6,#14H ;去抖!DL:MOV R7,#0FFHDJNZ R7,$DJNZ R6,DLRETDISP:MOV R0,#30H ;显示缓冲首址MOV R2,#01H ;位控初始码(先亮最低位)LOOP:MOV A,#0FFH ;共阳灭码MOV DPTR,#0FFDCHMOVX @DPTR,AMOV A,R2 ;送位控信号MOV DPTR,#0FFDDHMOVX @DPTR,AMOV A,@R0 ;从显示缓冲中取数MOV DPTR,#TABMOVC A,@A+DPTR ;查出字形代码MOV DPTR,#0FFDCHMOVX @DPTR,A ;送显示字符段代码ACALL DY1MS ;稳定显示信息INC R0 ;取下一个数MOV A,R2JB ACC.5,EXIT ;判断是否送到最高位?RL AMOV R2,A ;得到下一个位控信号AJMP LOOPEXIT:RETDY1MS:MOV R7,#0FFHDJNZ R7,$RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F end- 11 -。