1、实验二 P1口控制LED发光二极管 一、实验目的 1、进一步熟练Proteus及Keil软件的基本操作 2、掌握8051单片机P1口的使用方法 3、掌握LED发光二极管的原理及使用方法 4、学习汇编程序的调试及仿真方法 二、实验电路 三、实验内容及步骤: 要求:8个LED发光二极管循环左移显示(发光的移位),间隔时间为一秒。 1、使用Proteus画出电路原理图 2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件 3、进行Protues与Keil uVision联动的相关设置: 4、在Proteus中仿真运行。 四、思考 1、 将本
2、实验的实验现象改为“不发光二极管循环移位”。 2、 将本实验的实验现象改为“每隔0.5秒发光二极管循环移位”。 参考程序: ORG 0 LJMP MAIN ORG 30H MAIN: MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A SJMP LOOP DELAY: MOV R7,#20H DELAY1:MOV R6,#200 DELAY2:MOV R5,#123 DJNZ R5,$ DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 实验
3、三 数码管静态显示实验 一、实验目的 1、进一步熟悉51系列单片机 2、了解8051单片机P0口的使用方法 3、掌握共阴极数码管的原理及使用方法 4、学习8051的编程、调试、编译、仿真。 二、实验电路 图3 数码管静态显示电路原理图 注:数码管要从元件库选择Optoelectronics类中的7SEG-COM-CAT-GRN。 三、要求及步骤: 要求:在七段数码管上以递增方式循环显示数字0—9,间隔时间为一秒。 1、使用Proteus画出电路原理图 2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件 3、进行Protues与K
4、eil uVision联动的相关设置: 4、在Proteus中仿真运行。 四、思考 1、为什么要将P0口各引脚通过电阻R3-R9接到电源? 2、如何在共阴数码管上循环显示十六进制数字0—F(不区分字母的大小写 )? 3、怎样修改程序使数字以递减方式循环显示? 4、若用共阳极数码管应如何修改电路和程序,才能完成本实验的功能? 参考程序: ORG 00H LJMP START ORG 30H START: MOV DPTR,#TABLE S1: MOV R4,#00H S2: MOV A,R4 MOVC A,@A+DPTR MOV
5、P0,A LCALL DELAY INC R4 CJNE R4,#0AH,S2 SJMP S1 DELAY: MOV R5,#20 ;延时子程序 D2: MOV R6,#200 D1: MOV R7,#123 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H ;段码表 DB 6DH,7DH,07H,7FH,6FH END 实验四 基本输入/输出实验 一、实验目的 1、进一步熟
6、悉8051单片机并行I/O口的使用方法 3、掌握并行I/O口输入/输出操作的方法 4、学习8051的编程、调试、编译、仿真。 二、实验电路 图4 并行I/O口基本输入/输出 注:按钮要从元件库选择Switches & Relays类中的BUTTON。 三、要求及步骤: 要求:在按钮动作的控制下,将十六进制数字0-F循环显示在数码管上(每按一次按钮,显示的数字加1)。 1、使用Proteus画出电路原理图 2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件 3、进行Protues与Keil uVision联动的相关设置: 4、在Proteus中
7、仿真运行。 四、思考 1、如何检测按钮是否按下? 2、怎样修改程序,可以使数字0-F在按钮控制下,以递减方式循环显示? 3、若在P0口接8个LED,如何实现每按一次按钮,点亮的LED左移一位(8个LED中只有一个点亮)? 参考程序: ORG 00H LJMP START ORG 30H START: MOV P1,#01H MOV DPTR,#TABLE MOV R4,#00H CLR A MOVC A,@A+DPTR MOV P0,A LOOP: MOV A,P1 ANL A,#01H
8、 JZ LOOP LOOP1: MOV A,P1 ANL A,#01H JNZ LOOP1 INC R4 MOV A,R4 ANL A,#0FH MOVC A,@A+DPTR MOV P0,A SJMP LOOP TABLE: DB 3FH,06H,5BH,4FH,66H ;段码表 DB 6DH,7DH,07H,7FH,6FH DB 77H,7CH,39H,5EH,79H,71H,76H END 实验五 数据传送指令练习 一、实验目的 1、进一步掌握Keil软件的使用。 2、熟
9、悉数据传送指令功能及使用。 二、实验内容 1、输入数据传送指令并单步执行输入的指令; 2、练习数据传送指令的基本应用。 三、实验步骤 1、数据传送指令的功能 1)输入如下程序: ORG 0030H MOV A,#0BBH MOV DPTR,#0070H MOVX @DPTR,A MOV R0,#70H MOV @R0,A MOV A,#0CCH XCHD A,@R0 SJMP $ END 2)观察DPTR、A、R0、内部RAM70H和外部RAM70H单元中内容并填入表中第一空行。 3)单步执行完上述程序,重
10、新观察上述寄存器和存储单元中内容并填入表中第二空行。 表1 程序执行前后有关寄存器和RAM单元内容对照表 程序执行 DPTR A R0 70H 内RAM 70H 外RAM 前 后 4)分析程序运行结果,并把分析结果和运行结果进行比较。 2、PUSH指令对堆栈的影响 1)输入如下程序: ORG 0040H MOV A,#0AAH MOV PSW,#0CCH PUSH ACC PUSH PSW SJMP $ END 2)观察A、PSW、SP、07H、08H和09H单元中内容,并填入表表。 表2 PUSH指令对
11、堆栈的影响 程序执行 A PSW SP 堆栈区 07H 08H 09H 前 后 3)单步执行上述程序,重新观察上述寄存器和堆栈区中内容填入表中。 4)分析程序运行结果,并把分析结果和实验结果进行比较,看两者是否相同。 3、编写把A、PSW、DPTR中内容入栈保护并恢复的程序,并验证。 4、编写将内RAM的30H、40H单元内容相互交换的程序,并验证。 5、编程实现交换外RAM 1050H、1060H单元的数据,并运行验证。 四、实验总结: 1、堆栈操作的原则是什么?在程序设计中需要保护
12、和恢复数据时应注意什么? 2、对内RAM、外RAM及ROM进行数据传送的指令,分别可使用何种寻址方式? 实验六 算术及逻辑运算指令练习 一、实验目的 1、熟悉算术及逻辑运算类指令的功能。 2、掌握算术及逻辑运算类指令对标志位的影响。 3、掌握算术、逻辑运算指令的编程应用。 二、实验内容 1、求两个16位无符号二进制数的和 2、四位十进制数的加法 3、算术、逻辑运算指令的基本应用 三、实验步骤 1、调试程序:求两个16位数的和 设内RAM30H和32H开头的两个单元分别存放有两个16位无符号二进制数(低8位在30H或32H单元,高8位在31H或33H单元),将和存放
13、在30H单元开始的存储区。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,30H ADD A,32H MOV 30H,A MOV A,31H ADDC A,33H MOV 31H,A SJMP $ END 要求:选择几组数据测试该程序,如有错,将其改正。 2、编程:四位十进制数的加法: 设内RAM中30H和32H开头的两个单元分别存放有两个四位十进制数的压缩BCD码(低8位在30H或32H单元,高8位在31H或33H单元),试编写程序求这两个十进制数的和,并将结果放在从34H单元开始的存储区(低8位在低地址单元)。
14、 第一组 第二组 30H 31H 32H 33H 30H 31H 32H 33H 程序执行前 程序执行后 要求:测试、调试程序,并记录测试数据及正确运行结果 3、分别编写实现如下功能的程序并运行、验证。 (1)外RAM1000H~1020H单元中8位无符号二进制数求和,结果存放在内RAM30H单元开始的存储区。 (2)外RAM的1000H和2000H单元中分别放着一个8位无符号二进制数X和Y,计算3X+4Y,并将结果存入内RAM的30H单元和31H单元。(低8位在30H单元)。 (3)将两位十进
15、制数的压缩BCD码转换成ASCII码。(源数据在内RAM 20H单元,结果存放在内RAM30H开始的两个单元,低字节在31H单元) (4)将内RAM 从30H开始的20个单元全部清零。 四、实验总结: 1、算术加、减法指令如何影响PSW中的有关标志位? 2、如何实现两个BCD数的减法? 实验七 汇编语言程序设计 一、实验目的: 1、练习常见的简单的分支、循环程序结构的设计方法。 2、练习常见的程序调试方法。 二、实验内容: 1、编写程序,将内RAM的30H~40H单元存放的单字节数据传送到外RAM中以1000H为起始地址的存储区。 在内RAM的30H-40H随意
16、输入数据,调试并运行程序,观察结果。 2、编写程序,查找外部RAM的1020H-1030H单元中是否有0AAH这个数,如果有,将内RAM的30H单元置为01H,否则将30H单元置为00H。 在外RAM中输入数据,运行程序,观察结果。 3、在内部RAM30-5FH单元存放着一组无符号数,编写程序查找出这些无符号数的最大值,将结果存放于60H单元。 在相关单元中输入一些数据,运行程序,观察实验结果。 4、内RAM从40H单元开始的10个单元中存放着单字节带符号数,编程分别统计出正、负数的个数,并存入50H、51H单元中。 三、实验要求: 1、实验前充分预习,写出所需程序 2、上机将
17、程序调试正确,并分析程序运行结果 四、实验报告要求: 写出调试正确的程序。 五、思考题: 1、汇编语言程序如何测试和调试? 2、在子程序调用和返回指令执行时,PC值如何变化? 实验八 外部中断实验 一、实验电路(如图3.3.45所示) 图3.3.45 外部中断实验电路原理图 二、实验目的 1、熟悉51系列单片机 2、了解AT89C51 P1口、P3口的使用方法 3、了解键盘的原理及使用方法 4、了解发光二极管的原理及使用方法 5、掌握外部中断的原理及使用方法 6、学习AT89C51的编程、仿真、调试、编译、芯片烧录。对应文件INT.HEX 三、
18、实验器材 1、单片机主板 2、单片机扩展板 3、连接导线若干 四、实验注意事项 1、单片机主板、单片机扩展板接+5V 2、因J14为有极性排阻,故单片机扩展板一定要连GND和VCC,否则发光二极管不亮 3、图中粗线部分为要求学生自己连线部分 五、实验现象 正常情况下8个LED发光二极管循环显示,延迟时间为1秒,当有按键按下即产生外部中断时,8个LED发光二极管全亮,延迟时间为2秒。 六、思考 请同学们自己试一下外部中断0。 实验 定时器中断 一、实验电路(如图3.3.46所示) 图3.3.46 定时器中断电路原理图 二、实验目的 1、熟悉51系列单
19、片机 2、了解AT89C51 P1口的使用方法 3、掌握定时器、计数器的原理及使用方法 4、学习AT89C51的编程、仿真、调试、编译、芯片烧录。对应文件INT.HEX 三、实验器材 1、单片机主板 2、单片机扩展板 3、连接导线若干 四、实验注意事项 1、单片机主板、单片机扩展板接+5V电压 2、因J14为有极性排阻,故单片机扩展板一定要接GND和VCC,否则LED发光二极管不亮 3、图中粗线部分为要求学生自己连线部分 五、实验现象 LED发光二极管循环显示,延迟时间为1秒。 六、思考 将LED发光二极管的循环延迟时间设置的更长或更短。 实验 数码管
20、动态显示实验 一、实验电路(如图3.3.33) 图3.3.33 数码管动态显示电路原理图 二、实验目的 1、熟悉51系列单片机 2、了解AT89C51 P1口、P2口的使用方法 3、学习驱动芯片ULN2003A的原理及使用方法 4、学习驱动芯片74HC245的原理及使用方法 5、掌握数码管(共阴、共阳两种)的原理及使用方法 6、学习AT89C51的编程、仿真、调试、编译、芯片烧录。对应文件LEDDT.HEX 三、实验器材 1、多功能实验板 2、单片机扩展板 3、连接导线若干 四、实验注意事项 1、多功能实验板、单片机扩展板均采用+5V电压 2、因图中将7
21、4HC245的GND和VCC引脚隐藏,故学生自己连线时一定要将GND和VCC连上,否则芯片不工作 3、图中粗线部分为要求学生自己连线部分 五、实验现象 1、显示数字1—6。 六、思考 1、显示其它数字和字符。 实验 矩阵键盘实验 一、实验电路(如图3.3.34所示) 图3.3.34 矩阵键盘实验电路原理图 二、实验目的 1、熟悉51系列单片机 2、了解AT89C51 P1口、P2口的使用方法 3、了解共阳数码管的原理及使用方法 4、掌握矩阵键盘的原理及使用方法 5、学习AT89C51的编程、仿真、调试、编译、芯片烧录。对应文件KEY.HEX
22、三、实验器材 1、多功能实验板 2、单片机扩展板 3、连接导线若干 四、实验注意事项 1、多功能实验板、单片机扩展板接+5V电压 2、数码管为共阳数码管,公共端接+5V 3、图中粗线部分为要求学生自己连线部分 五、实验现象 1、ENTER键为全亮键,ESC键为全灭键,其它数字键为按哪一位数字键,在数码管上显示其数字。 实验 液晶LCD实验 一、实验电路(如图3.3.43) 图3.3.43 液晶LCD电路原理图 二、实验目的 1、熟悉51系列单片机 2、了解AT89C51 P1口、P2口的使用方法 3、了解电位器的使用方法 4、掌握液晶模块LC
23、D的原理及使用方法 5、学习AT89C51的编程、仿真、调试、编译、芯片烧录。对应文件LCD.HEX 三、实验器材 1、单片机多功能实验板 2、单片机扩展板 3、连接导线若干 四、实验注意事项 1、单片机扩展板、单片机多功能实验板均采用+5V电压 2、单片机多功能实验板接GND和VCC时一定不能接反,否则会烧毁LCD液晶模块 3、图中粗线部分为要求学生自己连线部分 五、实验现象 1、显示“CS&S”字样。 六、思考 1、请同学们在液晶模块上显示“HOW ARE YOU”。 实验 交通灯控制(定时器延时法) 一、实验目的 1. 进一步理解单片机
24、内部定时器/计数器的工作原理和使用方法。 2. 学习模拟交通灯控制的方法。 3. 学习数据输出程序的设计方法。 4. 学习中断处理程序的编程方法。 二、实验内容 用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。 LED0、LED1、LED2分别表示南北方向红、黄、绿灯 三、实验电路连接 P1.0 ●-----------------------● LED0 LED3、LED4、LED5分别表示东西方向红、黄、绿灯 P1.1 ●-----------------------● LED1 P1.2 ●----------
25、● LED2 P1.3 ●-----------------------● LED3 P1.4 ●-----------------------● LED4 P1.5 ●-----------------------● LED5 四、实验说明 l. 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始为状态0。 状态0:东西红灯,南北红灯;然后转入 状态1:南北绿灯通车,东西红灯;过一段时间转入 状态2:南北绿灯闪几次转黄灯亮,延
26、时几秒,东西仍然红;再转入 状态3:东西绿灯通车,南北红灯;过一段时间转入 状态4:东西绿灯闪几次转黄灯亮,延时几秒,南北仍然红灯;最后循环至状态1。 2. 各用一组红、黄、绿色LED分别表示南北方向和东西方向。 3. 由定时器来产生通车延时时间,时间长短1秒以上(由同学自己确定)。 提示:内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是12MHZ,本程序定时器工作于方式1(16位方式)时,最大定时时间为: 216*1μs=65536μs=65.536ms 所以需要配合软件记数。如要延时2秒,则需要T0中断32次,所 用时间为
27、 65536*32=2097120μs≈2s 因此在T0中断处理程序中,要判断中断次数是否到32次,若不到32次,则只使中断次数加1,然后返回,若到了32次,定时2秒时间到。 4. 用软件延时方法产生“闪”延时时间。 五、实验仪器和设备 PC机、WAVE软件、E2000/S仿真器+POD8X5X仿真头、MULT1A用户板、实验板、开关电源等。 六、参考程序框图(见下页) 开始 设置T0时间常数0000H 设置状态记数初值B=0 置T0工作方式1,定时器 通过P1口送初始状态(东西南北都是红灯) 设置秒计数值R6=32(2秒) 中断允许,定时开始
28、 动态停机等待中断 T0中断入口 保护现场并重新设置T0时间常数 秒计数值R6减1 是否到2秒? 否 是 重新设置秒计数值R6=32 状态值B加1 是否状态1?
29、 否 是 是否状态2? 南北绿灯,东西红灯 是 南北绿灯闪转黄灯亮,东西红灯 否 主程序框图 是否状态3? 是 南北红灯,东西绿灯 否 进入状态4,南北红灯,东西绿灯闪转黄灯亮 重设状态记数初值R2=0 恢复现场 中断返回 中断处理程序框图






