单片机实验讲义

更新时间:2023-03-11 19:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基本实验(8051)

实验一 P1口实验一

一、实验目的: 1. 2.

学习P1口的使用方法。 学习延时子程序的编写和使用。

二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容: 1. 2.

P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。 P1口做输入口,接八个按纽开关,以实验箱上74LS273做输出口,编写程序读取

开关状态,在发光二极管上显示出来。 四、实验原理:

P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写过“0”,在需要时应写入一个“1”,使它成为一个输入。

可以用第二个实验做一下实验。先按要求编好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1做输入口,会有什么结果。

再来看一下延时程序的实现。现常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。

本实验系统晶振为6.144MHZ,则一个机器周期为12÷6.144us即1÷0.512us。现要写一个延时0.1s的程序,可大致写出如下:

MOV R7,#X (1) DEL1:MOV R6,#200 (2) DEL2:DJNZ R6,DEL2 (3) DJNZ R7,DEL1 (4)

上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需要1÷0.256us,现求出X值:

1÷0.256+X(1÷0.256+200×1÷0.256+1÷0.256)=0.1×10? 指令(1) 指令(2) 指令(3) 指令(4) 所需时间 所需时间 所需时间 所需时间

X=(0.1××10?-1÷0.256)/(1÷0.256+200×1÷0.256+1÷0.256)=127D=7FH 经计算得X=127。代入上式可知实际延时时间约为0.100215s,已经很精确了。 五、实验原理图:

P1口输出实验

P1口输入实验

六、实验步骤:

执行程序1(T1_1.ASM)时:P1.0~P1.7接发光二极管L1~L8。

执行程序2(T1_1.ASM)时:P1.0~P1.7接平推开关K1~K8;74LS273的O0~O7接发光二极管L1~L8;74LS273的片选端CS273接CS0(由程序所选择的入口地址而定,与CSO~CS7相应的片选地址请查看第一部分系统资源,以后不赘述)。

七、程序框图:

程序初始化,设置P1口寄存器的初值为FEH延时0.1 秒,使显示稳定将P1口寄存器的数值逐位左移1位 循环点亮发光二极管

程序初始化,设置P1口为输入口将P1口数值读入累加器A将累加器A的数值送到273显示

通过发光二极管将P1口的状态显示

八、参考程序:

1、循环点亮发光二极管(T1_1.ASM)

NAME T1_1 ;P1口输实验 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV A,#0FEH

LOOP: RL A ; 左移一位,点亮下一个发光二极管 MOV P1,A LCALL DELAY JMP LOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELAY: MOV R1,#127 ; 延时0.1秒 DEL1: MOV R2,#200 DEL2: DJNZ R2,DEL2 DJNZ R1,DEL1 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END

2、通过发光二极管将P1口的状态显示(T1_2.ASM)

NAME T1_2 ;P1口输入实验 OUT_PORT

EQU

0CFA0H

;延时 0.1秒

CSEG AT 0000H LJMP START CSEG AT 4100H

START: MOV P1,#0FFH ;复位P1口为输入状态 MOV A,P1

;读P1口的状态值入累加器A

MOV DPTR,#OUT_PORT ;将输出口地址赋给地址指针DPTR MOVX @DPTR,A ;将累加器A的值赋给DPTR指向的地址 JMP START ;继续循环监测端口P1的状态 END

实验二 P1口实验二

一、实验目的: 1. 2.

学习P1口既做输入又做为输出的使用方法。 学习数据输入、输出程序的设计方法。

二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块

三、实验原理:

P1口的使用方法这里不讲了。有兴趣者不妨将实验例程中的“SETB P1.0, SETB P1.1”中的“SETB”改为“CLR”看看会有什么结果。

另外,例程中给出了一种N路转移的常用设计方法,该方法利用了JMP @A+DPTR的计算功能,实现转移。该方法的优点是设计简单,转移表短,但转移表大小加上各个程序长度

必须小于256字节。 四、实验原理图:

P1口输入、输出实验

五、实验步骤:

平推开关的输出K1接P1.0;K2接P1.1;

发光二极管的输入L1接P1.2;L2接P1.3;L5接P1.4;L6接P1.5。

运行实验程序,K1做为左转弯开关,K2做为右转弯开关。L5、L6做为右转弯灯,L1、L2做为左转弯灯。

结果显示:1:K1接高电平K2接低电平时,右转弯灯(L5、L6)灭,左转弯灯(L1、L2)

以一定频率闪烁;

2:K2接高电平K1接低电平时,左转弯灯(L1、L2)灭,右转弯灯(L5、L6)以一定

频率闪烁;

3:K1、K2同时接低电平时,发光二极管全灭; 4:K1、K2同时接高电平时,发光二极管全亮。 六、参考程序:T2.ASM

NAME T2 ;P1口输入输出实验 CSEG AT 0000H LJMP START CSEG AT 4100H START: SETB P1.0

SETB P1.1 ;用于输入时先置位口内锁存器

MOV A,P1

ANL A,#03H ;从P1口读入开关状态,取低两位 MOV DPTR,#TAB ;转移表首地址送DPTR MOVC A,@A+DPTR JMP @A+DPTR TAB: DB PRG0-TAB DB PRG1-TAB DB PRG2-TAB DB PRG3-TAB

PRG0: MOV P1,#0FFH ;向P1口输出#0FFH,发光二极管全灭 ;此时K1=0,K2=0 JMP START

PRG1: MOV P1,#0F3H ;只点亮L5、L6,表示左转弯 ACALL DELAY ;此时K1=1,K2=0

MOV P1,#0FFH ;再熄灭0.5秒

ACALL DELAY ;延时0.5秒 JMP START

PRG2: MOV P1,#0CFH ;只点亮L7、L8,表示右转弯 ACALL DELAY ;此时K1=0,K2=1 MOV P1,#0FFH ;再熄灭0.5秒 ACALL DELAY JMP START

PRG3: MOV P1,#00H ;发光二极管全亮,此时K1=1,K2=1

JMP START

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELAY: MOV R1,#5 ;延时0.5秒 DEL1: MOV R2,#200 DEL2: MOV R3,#126 DEL3: DJNZ R3,DEL3 DJNZ R2,DEL2 DJNZ R1,DEL1 RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END

七、程序框图:

上电,程序初始化,设置P1口为输入、输出双线口(P1.0、P1.1为输入口,P1.2、P1.3、P1.4、P1.5为输出口采集P1.0、P1.1输入口的值进入A累加器,根据累加器A的值调转到相应的子程序入口A=00A=01A=10A=11给P1口赋值0FFH(四个发光二极管全灭)依次给P1口赋值0F3H和0FFH,每种状态延时0.5秒依次给P1口赋值0CFH和0FFH,每种状态延时0.5秒给P1口赋值00H(四个发光二极管全亮)

实验三 简单I/O口扩展实验一

——交通灯控制实验

一、实验目的:

1. 学习在单片机系统中扩展简单I/O接口的方法。 2. 学习数据输出程序的设计方法。 3. 学习模拟交通灯控制的实现方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

扩展实验箱上的74LS273做为输出口,控制八个发光二极管亮灭,模拟交通灯管理。 四、实验原理:

要完成本实验,首先必须了解交通路灯的亮灭规律。本实验需要用到实验箱上八个发光二极管中的六个,即红、黄、绿各两个。不妨将L1(红)、L2(绿)、L3(黄)做为东西方向的指示灯,将L5(红)、L6(绿)、L7(黄)做为南北方向的指示灯。而交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。各发光二极管的阳极通过保护电阻接到+5V的电源上,阴极接到输入端上,因此使其点亮应使相应输入端为低电平。

五、实验原理图

六、实验步骤:

74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273接片选信号CSO,此时74LS273的片选地址为CFA0H~CFA7H之间任选。

运行实验程序,观察LED显示情况是否与实验内容相符。

七、程序框图:

八、参考程序:T3.ASM

NAME T3 ;I/O口扩展实验一 PORT EQU 0CFA0H ;片选地址CS0 CSEG AT 0000H LJMP START CSEG AT 4100H

START: MOV A,#11H ;两个红灯亮,黄灯、绿灯灭 ACALL DISP

;调用273显示单元(以下雷同)

ACALL DE3S ;延时3秒

LLL: MOV A,#12H ;东西路口绿灯亮;南北路口红灯亮 ACALL DISP

ACALL DE10S ;延时10秒

MOV A,#10H ;东西路口绿灯灭;南北路口红灯亮 ACALL DISP

MOV R2,#05H ;R2TTT: MOV A,#14H ; ACALL DISP

ACALL DE02S ; MOV A,#10H ; ACALL DISP

ACALL DE02S ; DJNZ R2,TTT ; MOV A,#11H ; ACALL DISP

ACALL DE02S ; MOV A,#21H ; ACALL DISP

ACALL DE10S ; MOV A,#01H ; ACALL DISP

MOV R2,#05H ;GGG: MOV A,#41H ; ACALL DISP

ACALL DE02S ; MOV A,#01H ; ACALL DISP

ACALL DE02S ; DJNZ R2,GGG ; MOV A,#03H ; ACALL DISP

中的值为黄灯闪烁次数 东西路口黄灯亮;南北路口红灯亮 延时0.2秒

东西路口黄灯灭;南北路口红灯亮 延时0.2秒

返回TTT,使东西路口黄灯闪烁五次 两个红灯亮,黄灯、绿灯灭 延时0.2秒

东西路口红灯亮;南北路口绿灯亮 延时10秒

东西路口红灯亮;南北路口绿灯灭 黄灯闪烁五次

东西路口红灯亮;南北路口黄灯亮 延时0.2秒

东西路口红灯亮;南北路口黄灯灭 延时0.2秒

返回GGG,使南北路口;黄灯闪烁五次 两个红灯亮,黄灯、绿灯灭

ACALL DE02S ;延时0.2秒 JMP LLL ;转LLL循环 DE10S: MOV R5,#100 ;延时10秒 JMP DE1

DE3S: MOV R5,#30 ;延时3秒 JMP DE1

DE02S: MOV R5,#02 ;延时0.2秒 DE1: MOV R6,#200 DE2: MOV R7,#126 DE3: DJNZ R7,DE3 DJNZ R6,DE2 DJNZ R5,DE1 RET

DISP: MOV DPTR,#PORT ;273显示单元

CPL A MOVX @DPTR,A RET

END

实验四 简单I/O口扩展实验二

一、实验目的:

1. 学习在单片机系统中扩展简单I/O口的方法。 2. 学习数据输入,输出程序的编制方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块

三、实验原理:

MCS-51外部扩展空间很大,但数据总线口和控制信号线的负载能力是有限的。若需要扩展的芯片较多,则MCS-51总线口的负载过重,74LS244是一个扩展输入口,同时也是一个单向驱动器,以减轻总线口的负担。

程序中加了一段延时程序,以减少总线口读写的频繁程度。延时时间约为0.01秒,不会影响显示的稳定。 四、实验内容:

利用74LS244做为输入口,读取开关状态,并将此状态通过发光二极管显示出来。 五、实验原理图:

简单I/O实验2

六、实验步骤:

1. 74LS244的IN0~IN7接开关的K1~K8,片选信号CS244接CS1。 2. 74LS273的O0~O7接发光二极管的L1~L8,片选信号CS273接CS2。 3. 编程、全速执行。

4. 拨动开关K1~K8,观察发光二极管状态的变化。

七、程序框图:

八、参考程序:T4.ASM

NAME T4 ;I/O口扩展实验 CSEG AT 0000H LJMP START CSEG AT 4100H

INPORT EQU 0CFA8H ;74LS244端口地址 OUTPORT EQU 0CFB0H ;74LS273端口地址 START: MOV DPTR,#INPORT

LOOP: MOVX A,@DPTR ;读开关状态 MOV DPTR,#OUTPORT

MOVX @DPTR,A ;显示开关状态 MOV R7,#10H ;延时 DEL0: MOV R6,#0FFH DEL1: DJNZ R6,DEL1 DJNZ R7,DEL0 JMP START END

实验五 中断实验

———有急救车的交通灯控制实验

一、实验目的:

1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

在实验三的内容的基础上增加允许急救车优先通过的要求。当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。本实验以单脉冲为中断申请,表示有急救车通过。 四、实验原理:

交通灯的燃灭规律见实验三。

本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:

MOV A,#0F0H (0) MOVX @R1,A (1) MOV SAVE,A (2)

程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV A,SAVE指令,由于主程序中没有执行(2),故SAVE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。 五、实验原理图:(同实验三) 六、实验步骤:

74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。单脉冲输出端P-接CPU板上的INT0。

七、程序框图: 主程序框图 中断程序框图

八、参考程序:T5.ASM

NAME T5 ;OUTPORT EQU 0CFB0H ;SAVE EQU 55H ;saveCSEG AT 0000H LJMP START CSEG AT 4003H LJMP INT CSEG AT 4100H

中断控制实验 端口地址

保存从端口cfa0输出的数据

START: SETB IT0 SETB EX0 SETB EA

MOV A,#11H ;置首显示码 MOV SAVE,A ;保存 ACALL DISP ;显示输出 ACALL DE3S ;延时3秒

LLL: MOV A,#12H ; MOV SAVE,A ACALL DISP

ACALL DE10S ; MOV A,#10H ; MOV SAVE,A ACALL DISP

MOV R2,#05H ;TTT: MOV A,#14H MOV SAVE,A ACALL DISP ACALL DE02S MOV A,#10H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,TTT

MOV A,#11H ; MOV SAVE,A ACALL DISP

ACALL DE02S ; MOV A,#21H ; MOV SAVE,A ACALL DISP

ACALL DE10S ; MOV A,#01H ; MOV SAVE,A

东西路口绿灯亮,南北路口红灯亮延时10秒 东西路口绿灯灭 东西路口黄灯闪烁5次 红灯全亮 延时0.2秒

东西路口红灯亮,南北路口绿灯亮 延时10秒 南北路口绿灯灭 ACALL DISP

MOV R2,#05H ;南北路口黄灯闪烁5次 GGG: MOV A,#41H MOV SAVE,A ACALL DISP ACALL DE02S MOV A,#01H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,GGG

MOV A,#11H ; MOV SAVE,A ACALL DISP

ACALL DE02S ; JMP LLL ;DE10S: MOV R5,#100 ; JMP DE1

DE3S: MOV R5,#30 ; JMP DE1

DE02S: MOV R5,#02 ;DE1: MOV R6,#200 DE2: MOV R7,#126 DE3: DJNZ R7,DE3 DJNZ R6,DE2 DJNZ R5,DE1 RET INT: CLR EA

PUSH ACC ; PUSH PSW MOV A,R5 PUSH ACC

MOV A,#11H ; ACALL DISP

红灯全亮 延时0.2秒 转LLL循环 延时10秒 延时3秒 延时0.2秒 中断处理

红灯全亮,绿、黄灯全灭 DEL10S: MOV R3,#100 ;延时10秒 DEL1: MOV R2,#200 DEL2: MOV R5,#126 DEL3: DJNZ R5,DEL3 DJNZ R4,DEL2 DJNZ R3,DEL1

MOV A,SAVE ;取SAVE中保存数据输出到cfa0端口 ACALL DISP

POP ACC ;出栈 MOV R5,A POP PSW POP ACC

SETB EA ;允许外部中断 RETI

DISP: MOV DPTR,#OUTPORT

CPL A

MOVX @DPTR,A RET END

实验六 定时器实验

———循环彩灯实验

一、实验目的:

1. 学习8031内部计数器的使用和编程方法。 2. 进一步掌握中断处理程序的编写方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

1. 定时常数的确定

定时器/计数器的输入脉冲周期与机器周期一样, 为振荡频率的1/12。本实验中时钟

频率为6.0 MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.1秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=05H,即可实现0.5秒延时。

时间常数可按下述方法确定:

机器周期=12÷晶振频率=12/(6×10?)=2us

设计数初值为X,则(2e+16-X)×2×10=0.1,可求得X=15535 化为十六进制则X=3CAFH,故初始值为TH1=3CH,TL1=AFH 2. 初始化程序

包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行 正确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP便不必设置。

3. 设计中断服务程序和主程序

中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。主程序则用来控制发光二极管按要求顺序燃灭。 四、实验题目

由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。P1口的P1.0~P1.7分别接发光二极管的L1~L8。要求编写程序模拟一循环彩灯。彩灯变化花样可自行设计。例程给出的变化花样为:①L1、L2、?L8依次点亮;②L1、L2、?L8依次熄灭;③L1、L2、?L8全亮、全灭。各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。

五、实验电路:

-6

六、实验步骤:

P1.0~P1.7分别接发光二极管L1~L8即可。 七、参考程序:T6.ASM

NAME T6 ;定时器实验 OUTPORT EQU 0CFB0H CSEG AT 0000H

LJMP START

CSEG AT 401BH ;定时器/计数器1中断程序入口地址

LJMP INT

CSEG AT 4100H

START: MOV A,#01H ;首显示码

MOV R1,#03H ;03是偏移量,即从基址寄存器到表首的距离 MOV R0,#5H ;05是计数值 MOV TMOD,#10H ;计数器置为方式1 MOV TL1,#0AFH ; MOV TH1,#03CH

ORL IE,#88H ;CPU ;1 SETB TR1 ;LOOP1: CJNE R0,#00,DISP

MOV R0,#5H ;R0 INC R1 ; CJNE R1,#31H,LOOP2

MOV R1,#03H ;LOOP2: MOV A,R1 ; MOVC A,@A+PC JMP DISP

DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H DISP: MOV P1,A ; JMP LOOP1

INT: CLR TR1 ; DEC R0 ; MOV TL1,#0AFH ; MOV TH1,#03CH

SETB TR1 ; RETI ;END

装入时间常数 中断开放标志位和定时器 溢出中断允许位均置位 开始计数 计数计完一个周期,重置初值 表地址偏移量加1 如到表尾,则重置偏移量初值 从表中取显示码入累加器 将取得的显示码从P1口输出显示 停止计数 计数值减一 重置时间常数初值 开始计数 中断返回

八、程序框图:T6.ASM

主程序框图

中断程序框图

实验七 8255A可编程并行接口实验一

一、实验目的:

1. 了解8255A芯片的结构及编程方法。 2. 掌握通过8255A并行口读取开关数据的方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

设置好8255A各端口的工作模式。实验中应当使三个端口都工作于方式0,并使A口为输出口,B口为输入口。 四、实验内容:

利用8255A可编程并行接口芯片,重复实验四的内容。实验可用B通道作为开关量输入口,A通道作为显示输出口。

五、实验电路:

六、实验步骤:

8255A的PA0~PA7接发光二极管L1~L8;PB0~PB7接开关K1~K8;片选信号8255CS接CS0。 七、程序框图:

系统初始化,设置8255的A口输出,B口输入。通过8255的B口将开关的状态读入CPU中通过8255的A口将读入的开关状态送给发光二极管显示延时10ms

八、参考程序:T7.ASM

NAME T7 ;8255A实验一

CSEG AT 0000H LJMP START CSEG AT 4100H

PA EQU 0CFA0H PB EQU 0CFA1H PCTL EQU 0CFA3H

START: MOV DPTR,#PCTL ;置8255A控制字,A、B、C口均工作 ;方式0,A、C口为输出,B口为输入 MOV A,#82H MOVX @DPTR,A

LOOP: MOV DPTR,#PB ; MOVX A,@DPTR

MOV DPTR,#PA ; MOVX @DPTR,A

MOV R7,#10H ;DEL0: MOV R6,#0FFH DEL1: DJNZ R6,DEL1 DJNZ R7,DEL0 JMP LOOP END

从B口读入开关状态值 从A口将状态值输出显示 延时

实验八 8255A可编程并行接口实验二

——键盘实验 一、实验目的:

1. 掌握8255A编程原理。 2. 了解键盘电路的工作原理。 3. 掌握键盘接口电路的编程方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

1.识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

本实验例程采用的是行反转法。

行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。

2.程序设计时,要学会灵活地对8255A的各端口进行方式设置。

3.程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。 实验题目

利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。 四、实验步骤:

将键盘RL10~RL17接8255A的PB0~PB7;KA10~KA12接8255A的PA0~PA2;PC0~PC7接发光二极管的L1~L8;8255A芯片的片选信号8255CS接CS0。 五、实验电路:

六、程序框图T8.ASM

实验九 数码显示实验

一、实验目的:

1. 进一步掌握定时器的使用和编程方法。 2. 了解七段数码显示数字的原理。

3. 掌握用一个段锁存器,一个位锁存器同时显示多位数字的技术。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

本试验采用动态显示。动态显示就是一位一位地轮流点亮显示器的各个位(扫描)。将8031CPU的P1口当作一个锁存器使用,74LS273作为段锁存器。 四、实验题目

利用定时器1定时中断,控制电子钟走时,利用实验箱上的六个数码管显示分、秒,做成一个电子钟。显示格式为: 分 秒

定时时间常数计算方法为:

定时器1工作于方式1,晶振频率为6MHZ,故预置值Tx为: (2e+16-Tx)x12x1/(6x10e+6)=0.1s Tx=15535D=3CAFH,故TH1=3CH,TL1=AFH 五、实验电路:

六、实验接线:

将P1口的P1.0~P1.5与数码管的输入LED6~LED1相连,74LS273的O0~O7与LEDA~LEDDp相连,片选信号CS273与CS0相连。去掉短路子连接。 七、程序框图:T9.ASM

实验十 8279显示接口实验一

一、实验目的:

1. 掌握在8031系统中扩展8279键盘显示接口的方法。

2. 掌握8279的工作原理和编程方法。 3. 进一步掌握中断处理程序的编程方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

利用8279键盘显示接口电路和实验箱上提供的2个数码显示,做成一个电子钟。 利用8279可实现对键盘/显示器的自动扫描,以减轻CPU的负担,且具有显示稳定、程序简单、不会出现误动作等特点。本实验利用8279实现显示扫描自动化。

8279操作命令字较多,根据需要来灵活使用,通过本实验可初步熟悉其使用方法。 电子钟做成如下格式:

XX 由左向右分别为十位、个位(秒)。 四、实验电路:

五、实验步骤:

本试验不必接线 六、程序框图:T10.ASM

实验十一

8279键盘显示接口实验二

一、实验目的:

1. 进一步了解8279键盘、显示电路的编程方法。 2. 进一步了解键盘电路工作原理及编程方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理:

本实验用到了8279的键盘输入部分。键盘部分提供的扫描方式最多可和64个按键或传感器阵列相连,能自动消除开关抖动以及对多键同时按下采取保护。

由于键盘扫描由8279自动实现,简化了键盘处理程序的设计,因而编程的主要任务是实现对扫描值进行适当处理,以两位十六进制数将扫描码显示在数码管上。

可省略对8279进行初始化,因为监控程序对8279已经进行了初始化,详见第三章键盘操作说明的4.5节。 四、实验题目

利用实验箱上提供的8279,键盘电路,数码显示电路,组成一个键盘分析电路,编写程序,要求在键盘上按动一个键,就将8279对此键扫描的扫描码显示在数码管上。 五、实验电路:

六、实验接线:

将键盘的KA10~KA12接8279的KA0~KA2;RL10~RL17接8255A的RL0~RL7; 七、程序名:T11.ASM

八、实验提示:

编译全速运行程序后,按某一键,数码管将显示键值,可仔细观察键与键值的对应关系。

实验十二 串行口实验一

———单机实验

一、实验目的:

1. 掌握8031串行口方式1的工作方式及编程方法。 2. 掌握串行通讯中波特率的设置。

3. 在给定通讯波特率的情况下,会计算定时时间常数。

二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验原理

MCS-51单片机串行通讯的波特率随串行口工作方式选择的不同而不同,它除了与系统的振荡频率f,电源控制寄存器PCON的SMOD位有关外,还与定时器T1的设置有关。

1) 在工作方式0时,波特率固定不变,仅与系统振荡频率有关,其大小为f/12。 2) 在工作方式2时,波特率也只固定为两种情况: 当SMOD=1时, 波特率=f/32 当SMOD=0时, 波特率=f/64

3) 在工作方式1和3时,波特率是可变的: 当SMOD=1时, 波特率=定时器T1的溢出率/16 当SMOD=0时, 波特率=定时器T1的溢出率/32

其中,定时器T1的溢出率=f/(12*(256-N)),N为T1的定时时间常数。 在实际应用中,往往是给定通讯波特率,而后去确定时间常数。例如:f=6.144MHZ,波特率等于1200,SMOD=0时,则1200=6144000/(12*32*(256-N)),计算得N=F2H。

例程中设置串行口工作于方式1,SMOD=0,波特率为1200。 循环彩灯的变化花样与实验六相同。也可自行设计变化花样。 四、实验题目

利用8031串行口发送和接收数据,并将接收的数据通过扩展I/O口74LS273输出到发光二极管显示,结合延时来模拟一个循环彩灯。 五、实验连线:

8031的TXD接RXD;74LS273的CS273接CS0;O0~O7接发光二极管的L1~L8; 六、程序名称:T12.asm

实验十三 串行口实验二

———双机实验

一、实验目的:

1. 掌握串行口工作方式的程序设计,掌握单片机通讯程序的编制。 2. 了解实现串行通讯的硬件环境,数据格式、数据交换的协议。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容

利用8031串行口,实现双机通讯。编写程序让甲机负责发送,乙机负责接收,从甲机的键盘上键入数字键0~F,在两个实验箱上的数码管上显示出来。如果键入的不是数字按键,则显示“Error”错误提示。 四、实验原理及电路:

本实验通讯模块由两个独立的模块组成:甲机发送模块和乙机接收模块。

MCS-51单片机内串行口的SBUF有两个:接收SBUF和发送SBUF,二者在物理结构上是独立的,单片机用它们来接收和发送数据。专用寄存器SCON和PCON控制串行口的工作方式和波特率。定时器1作为波特率发生器。

编程时注意两点:一是初始化,设置波特率和数据格式,二是确定数据传送方式。数据传送方式有两种:查询方式和中断方式。例程采用的是查询方式。

为确保通讯成功,甲机和乙机必须有一个一致的通讯协议,例程的通讯协议如下: 通讯双方均采用2400波特的速率传送,甲机发送数据,乙机接收数据。双机开始通讯时,甲机发送一个呼叫信号“06”,询问乙机是否可以接收数据;乙机收到呼叫信号后,若同意接收数据则发回“00”作为应答,否则发“15”表示暂不能接收数据;甲机只有收到乙

机的应答信号“00”后才可把要发送的数据发送给乙机,否则继续向乙机呼叫,直到乙机同意接收。其发送数据格式为:

字节数n:甲机将向乙机发送的数据个数 数据1~数据n:甲机将向乙机发送的n个数据

累加校验和:字节数n,数据1,……,数据n这(n+1)个字节内容的算术累加和。 乙机根据接收到的“校验和”判断已接收到的数据是否正确。若接收正确,向甲机回发“0F”信号,否则回发“F0”信号给甲机。甲机只有接到信号“0F”才算完成发送任务,否则继续呼叫,重发数据。实验线路示意图如下:

五、实验步骤:

甲机8031CPU板上的TXD接乙机的RXD 甲机的RXD接乙机的TXD 甲机的GND接乙机的GND

8279与键盘、显示数码管的连线方法请参见实验十和实验十一。

六、程序框图:

程序名称T13f.asm,T13j.asm

发送程序 接收程序

实验十四 D/A转换实验

一、实验目的:

1. 了解D/A转换的基本原理。

1. 了解D/A转换芯片0832的性能及编程方法。 2. 了解单片机系统中扩展D/A转换的基本方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块

三、实验内容:

利用DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波形轮流显示。 四、实验原理:

D/A转换是把数字量转换成模拟量的变换,从D/A输出的是模拟电压信号。产生锯齿波和三角波只需由A存放的数字量的增减来控制;要产生正弦波,较简单的手段是造一张正弦数字量表。取值范围为一个周期,采样点越多,精度就越高。

本实验中,输入寄存器占偶地址端口,DAC寄存器占较高的奇地址端口。两个寄存器均对数据独立进行锁存。因而要把一个数据通过0832输出,要经两次锁存。典型程序段如下:

MOV DPTR,#PORT MOV A,#DATA MOVX @DPTR,A INC DPTR MOVX @DPTR,A

其中第二次I/O写是一个虚拟写过程,其目的只是产生一个WR信号。启动D/A。 五、实验电路:

六、实验步骤:

1、 DAC0832的片选CS0832接CS0,输出端OUT接示波器探头。 2、 将短路端子DS的1、2短路

七、程序框图T14.ASM

主程序MAIN 锯齿波显示子程序:PRG1

三角波显示子程序:PRG2 正弦波显示子程序:PRG3

中断子程序:DELAY

实验十五

A/D转换实验

一、实验目的:

1. 掌握A/D转换与单片机的接口方法。 2. 了解A/D芯片ADC0809转换性能及编程方法。 3. 通过实验了解单片机如何进行数据采集。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。 四、实验原理:

A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。

实验用的ADC0809属第二类,是八位A/D转换器。每采集一次需100us。

ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令:

MOV DPTR,#PORT MOVX @DPTR,A

A中为何内容并不重要,这是一次虚拟写。

在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相连接。在中断处理程序中,使用如下指令即可读取A/D转换的结果:

MOV DPTR,#PORT MOVX A,@DPTR

五、实验电路:

六、实验步骤:

1. 0809的片选信号CS0809接CS0。 2. 电位器的输出信号AN0接0809的ADIN0。 3. EOC接CPU板的INT0.

七、程序框图:T15.ASM

主程序

中断服务程序

实验十六

一、实验目的:

1. 掌握PC存储器扩展的方法。

存储器扩展实验

2. 熟悉62256芯片的接口方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

向外部存储器的7000H到8000H区间循环输入00~0FFH数据段。设置断点,打开外部数据存储器观察窗口,设置外部存储器的窗口地址为7000H—7FFFH。全速运行程序,当程序运行到断点处时,观察7000H—7FFFH德内用是否正确。 四、实验原理图:

实验系统上的两片6264的地址范围分别为:3000H~3FFFH,4000H~7FFFH,既可作为实验程序区,也可作为实验数据区。62256的所有信号均已连好。 五、程序框图:T16.asm

实验十七 8253定时器实验

一、实验目的:

1、学习8253扩展定时器的工作原理。 2、学习8253扩展定时器的使用方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

向8253定时控制器写入控制命令字,通过示波器观察输出波形。 四、实验接线:

1、 8253的片选CS8253与CS0相连;8253CLK0与CLK3相连;OUT0与8253CLK1相连; 2、示波器的信号探头与OUT0相连;OUT1与发光二极管的输入L8相连 五、实验原理图:

六、程序框图:T17.ASM

开 始写T0方式控制字写T0计数初值写T1方式控制字写T1计数初值写T2方式控制字写T2计数初值空操作结束

七、实验提示:

8253是自动控制系统中经常使用的可编程定时器/计数器,其内部有三个相互独立的计数器,分别称为T0,T1,T2。8253有多种工作方式,其中方式3为方波方式。当计数器设好初值后,计数器递减计数,在计数值的前一半输出高电平,后一半输出

低电平。实验中,T0的时钟由CLK3提供,其频率为750KHz。程序中,T0的初值设为927CH(37500十进制),则OUT0输出的方波周期为(37500*4/3*10-6=0.05s)。T1采用OUT0的输出为时钟,则在T2中设置初值为n时,则OUT2输出方波周期为n*0.05s。n的最大值为FFFFH,所以OUT2输出方波最大周期为3276.75s(=54.6分钟)。可见,采用计数器叠加使用后,输出周期范围可以大幅度提高,这在实际控制中是非常有用的。

实验十八 8259中断控制器实验

一、实验目的:

1、学习8259中断扩展控制器的工作原理。 2、学习8259中断扩展控制器的使用方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

向8259中断扩展控制器写入控制命令字,通过发光二极管观察中断情况。 四、实验原理图

五、实验接线:

1、 8259的片选CS8259与CS0相连;51INTX与INT0相连;

2、P1.0----P1.7与发光二极管的输入LED1---LED8相连;P+逐次与IR0---IR7相连。

六、实验步骤:

1、 编译、全速运行程序T18.ASM,应能观察到发光二极管点亮约2秒后熄灭, 2、先将P+与IR0相连,按动PULSE按键,发光二极管LED1点亮,再按PULSE键,发光二极管LED1熄灭,依次将P+与IR1---IR7相连,重复按动PULSE键,相应的LED发光二极管有亮、灭的交替变化。 七、程序框图:T18.ASM

实验十九 CPLD实验

一、实验目的:

1、学习CPLD芯片的工作原理。 2、学习MAXPLUS-II的编程方法。 二、实验设备:

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容:

由PC机通过串口,与系统板的JTAG接口,下载编写的CPLD程序,通过试验加以验证。 四、实验原理图:

五、实验接线:

1、8255的片选CS8255与LCS0相连;

2、 PA.0--PA.7与发光二极管的输入LED1---LED8相连; 3、 PB.0--PB.7与平推开关的输出K1---K8相连;。 六、实验步骤

1、将附带的CPLD程序通过JTAG接口下载到CPLD芯片EPM7064.

2、编译、全速运行程序T19.ASM,拨动平推开关,相应的发光二极管有亮、灭变化。 七、程序框图:T19.ASM 八、实验提示:

可以在8000H----CFBF、CF0H---FFFFF任意选择LCS信号,用户可自行试验,要注意测试程序的片选信号要与CPLD的得知相一致。 九、CPLD参考配置:

十、CPLD参考程序

TITLE \library IEEE;

use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all;

entity user_el_iii is port (

Address : IN STD_LOGIC_VECTOR(15 DOWNTO 0); RD,WR,MIO,AEN : IN STD_LOGIC; IOWR,IORD,MEMW,MEMR : IN STD_LOGIC;

LCS : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );

end user_el_iii;

ARCHITECTURE archde1 OF user_el_iii IS BEGIN

--MEMW<='Z'; --MEMR<='Z'; --IOWR<='Z'; --IORD<='Z';

LCS<=\WHEN (Address>\ELSE --FROM D000 TO D07F

\WHEN (Address>\ELSE --FROM D080 TO D0FF

\WHEN (Address>\ELSE --FROM D100 TO

D17F

\WHEN (Address>\ELSE --FROM D180 TO D1FF

\WHEN (Address>\ELSE --FROM D200 TO D27F

\WHEN (Address>\ELSE --FROM D280 TO D2FF

\(Address>\ELSE --FROM D3FF LARGE ADDRESS1 256 BYTES \(Address>\ELSE --FROM D5FF LARGE ADDRESS2 512 BYTES

\ END archde1;

实验二十 LCD显示实验

一、实验目的:

学习液晶显示的编程方法,了解液晶显示模块的工作原理。 掌握液晶显示模块与单片机的接口方法。

WHEN D300 TO WHEN D400 TO 二、所需设备

EL-MUT-III型单片机实验箱、8051CPU模块 三、实验内容

编程实现在液晶显示屏上显示中文汉字“北京理工达盛科技有限公司”。 四、实验原理说明

五、实验步骤 1、实验连线

8255的PA0~PA7接DB0~DB7,PC7接BUSY,PC0接REQ,CS8255接CS0。 2、运行实验程序T20.asm,观察液晶的显示状态。 六、程序框图

开始初始化查表读数据NBUSY为0?Y数据输出REQ置位

NBUSY为1?YREQ复位N数据读完?Y结束

本文来源:https://www.bwwdw.com/article/54bw.html

Top