第四章 实验指导
4.1 实验一 程序设计
一、实验目的
① 学习windows平台下wave仿真软件的编辑、编译、排错、调试方式 ② 学习单步、断点、自动跟踪/单步、全速执行等各种执行方法。 二、实验步骤
1. 运行WAVE软件,点击菜单栏选项中的“仿真器”,并点击其中 “使用伟福软件模拟器”,使其中出现“√”,“选择CPU ” 选项中的 8031或8032(取决你是用89S51还是用89S52),点击 “√好”,即进入软件模拟环境。
2. 鼠标点击菜单“文件(F)” →“新建文件(N)”, 进入编辑窗口键入以下 实验程序:
INDEX EQU 20H SUM EQU 21H ORG 0000H START:MOV INDEX, #5 MOV A,#0
LOOP: ADD A,INDEX
DJNZ INDEX,LOOP MOV SUM,A SJMP START END
以FIRST.ASM文件存盘。 预先分析程序的执行结果
3. 点击快捷菜单编译(或按F9 键),伟福仿真器自带的汇编器对源程序汇编,生成FIRST· HEX。
2. 击快捷菜单,打开CPU窗口,打开内部数据存储器DATA窗口,调整窗口大小,和窗口位置,
使DATA窗口、CPU窗口能同时显示在屏幕上。 自动跟踪/单步 执行程序 3. 鼠标点击菜单“执行(R)” →“自动跟踪/单步” ,可以看到程序自动单步执行,同时可以
观察A 累加器内容的变化及内部数据存储器DATA窗口中内容的变化。
4. 利用各种操作方式(单步、全速)逐条执行观察A、21H单元、20H单元内容的变化。
三、程序设计选题:
1.将外部数据存储器0001H和0002H单元内容互换。
2.将外部数据存储器010~01FH单元内容移到020~02FH单元。
3.统计内部数据存储器从30H单元开始的十个字节中,正数﹑负数和零的个数, 并分别置于R4,R5,R6中。
4.完成八位数除以八位数,即R2/R1=R3......R4。
5.将外部数据存储器0~05H单元的BCD码转换为ASCII码放回原单元。
6.将外部数据存储器0~05H单元中的十六进制数转换成ASCII码放回原单元。
13
7.将R0中的二进制数转换成BCD码存于内部数据存储器的22H~20H单元。 8.完成两个四字节数的相加(即32位数),和存于内部数据存储器的24H~20H单元 9.完成两个四字节数BCD码数的相加,和存于内部数据存储器的24H~20H单元
4.2 实验二 并行接口
一、实验目的
1、熟悉51单片机并行口的输入方式,输出方式的编程 2、熟悉51单片机并行口应用编程软件仿真调试方法 3、学会在线烧写单片机程序(在线编程ISP)方法 二、实验电路和程序 `
实验程序(1)
一个数码管是由八个发光二进管组成,电路中小数点段没连接,将下列程序烧进单片机中,观察执行现象
开关K0~K7ON向上拨:02345678向下拨:11COMgfedcba+5V开关K0~K774LS573K0K1K2K3K4K5K6K7P2.6P2.5P2.4P2.3P2.2P2.1P2.074LS04P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.789C51/52 89S51/52图13.20 并行接口输入/输出实验电路1P1.0
ORG 0000H MOV P1,#01H MOV A,#01 NEXT:MOV P1 , A MOV R3 , #0 LOOP:MOV R4, #0
DJNZ R4, $
DJNZ R3,LOOP RL A
SJMP NEXT
自编程序 ① 使第三个数码管各段轮流亮。③④
② 使六个数码管共42段LED各段轮流亮
实验程序(2)
电路见下图,573接成直通方式驱动数码管,用两个短接块将J2、J3的上面的两脚相连(见下
14
图红线,这样P1.4和P1.5就连接了第五个和第六个数码管的阴极,此时这两个数码管可受程序控制工作。有关电路如下:
P2.0P2.1P2.2P2.3P2.4P2.5P2.69D0876543Q012D6Vcc+5V74LS57311G20OE10GND1314151617Q6181g??11111P1.012345P1.5613513111??aga74LS04??9J3LEDJ2ADLEDAD
例2 拨动几号开关置“ON”第一个数码管显示几。程序如下:
ORG 0
MOV DPTR,#TAB0 MOV P1,#01H STA1:SETB C
MOV R0,#01
ASP:MOV P0,#0FFH MOV A,P0 ASP1:RRC A
JNC LED ;检测是哪个开关置”ON ” INC R0
CJNE R0,#9, ASP1 SJMP STA1
LED:MOV A,R0 ;R0为开关号 MOVC A,@A+DPTR MOV P2,A SJMP STA1
TAB0:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H END
自编程序 编程并烧写程序完成置1键ON第一个数码管亮“1”, 拨2键第二个
数码管亮“2”, 拨3键第二个数码管亮“3”
例3 数码跑马程序
DLED: MOV R0,#0 ;R0存字形表偏移量 WE: MOV A,#01 ;A置数码管位选代码 NEXT: MOV B,A ;保存位选代码
15
MOV P1,A MOV DPTR,#TAB0 ;DPTR置字形表头地址;
MOV A, R0
MOVC A,@A+DPTR ;查字形码表
MOV P2,A ;送P2口输出 MOV R3,#0 ;延时 LOP: MOV R4,#0 LOP1: NOP
NOP
DJNZ R4,LOP1 DJNZ R3,LOP MOV A,B
RL A ;指向下一位
CJNE A,#10H, NEXT ;五个数码管显示完否 INC R0 ;指向下一位字形 CJNE R0,#10H,WE ;从0到F显示完否
SJMP DLED
TAB0:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 自编程序 编程并烧写程序完成置1键ON六个数码管轮流亮“1”, 拨2键六个数码管轮流亮“2”, 拨3键六个数码管轮流亮“3”。。。。
三、自编程序并在板上执行通过 ①每两个数码管为一组交替点亮“8”。
②对第四个数码管按照 一段亮→二段亮→三段亮??→全部亮→灭一段→灭二段→灭三段→灭四段??→全部灭方式,如此反复进行。
③测试开关k0,当k0开关向上拔ON时,六个数码管同时亮“8”,当k0开关向下拔时,八个数码管同时灭,同时灭的交替进行。
④将开关K1~K6的置位情况显示在数码管上,开关置“ON”的对应数码管显“0”,开关置“OFF”(拨向下的对应数码管显“1”,
⑤将开关K1~K8的置数显示在数码管上,如K1~K8全部拨向下,第一、二个数码管显FF。 ⑥将开关K1~K8的置数变换成显示在数码管上,如K1~K8全部拨向下,第一、二个数码管显FF。
4.3
实验三 中断
一、 实验目的
了解中断的产生及响应过程,掌握中断程序的编制。
二、 实验连线
用短接块将J5的1、2脚相连(即连向INT0方向时,脉冲源向单片机的外部中断INT0引脚提供中断所需的脉冲,每按两次开关w2,电平变反一次,产生一个跳变缘,作为外部中断INT0的中断请求信号。用两个短接块将J2、J3的上面的两脚相连,这样P1.4和P1.5就连接了第五个和第六个数码管的阴极,此时这两个数码管受程序控制工作。
16
实验连线见图粗黑线: 三、实验程序 实验程序1:
ORG 0 脉冲源INT0P3.2AJMP STAR &J5 ORG 3 ;中断服务
P3.4W2 RL A
T0 MOV P2,A +5V& RETI
STAR: MOV P1,#04H ;第三个数码管亮
MOV A,#01H
中断信号产生电路
MOV P2,A
SETB EA ;置EA=1
SETB EX0 ;允许INT0中断, SETB IT0 ;边缘触发中断 SJMP $
①分析该程序的功能及实验现象
②将该程序烧进单片机、运行,观察执行的现象是否和估计一致
注:每按两次按钮, 产生一次中断,LED点亮有何变化, 叙述程序的执行过程。 .自编程序并通过
① 七个发光二极管(即一个数码管)同时点亮,中断一次 ,七管同时熄灭,每中断一次 ,
变反一次
② 要求同①,每中断一次 ,变反四次
实验程序2 : 记录并显示INT0中断次数(中断次数<16 次)
ORG 0 AJMP NT ORG 0003H
AJMP INT0R
NT: MOV IE,#81H ;允许INT0中断,置EA=1 SETB IT0 ;边沿触发中断 MOV R0,#0 ;计数初值为0
BIOU: MOV P1,#01 ;第一个数码管显示中断次数 MOV DPTR,#TAB0 ;字形码表送DPTR
MOV A,R0
MOVC A,@A+DPTR ;查表 MOV P2,A ;显示 SJMP $ ;结束
INT0R: INC R0 ;中断次数加1
CJNE R0,#10H,RET0 ;中断是否满15次 MOV R0,#0 ;循环
RET0: POP DPH ;弹出断点
17