试验八8255可编程并行接口试验二Word格式.docx
《试验八8255可编程并行接口试验二Word格式.docx》由会员分享,可在线阅读,更多相关《试验八8255可编程并行接口试验二Word格式.docx(42页珍藏版)》请在冰点文库上搜索。
![试验八8255可编程并行接口试验二Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/8dd32e0a-1aec-4dae-9c82-382f2a61c4e8/8dd32e0a-1aec-4dae-9c82-382f2a61c4e81.gif)
0.256+1÷
0.256)=0.1×
10?
指令
(1)指令
(2)指令(3)指令(4)所需时间所需时间所需时间所需时间=(0.1×
×
-1÷
0.256)/(1÷
0.256)=127D=7FH
经计算得X=127。
代入上式可知实际延时时间约为0.100215s,已经很精确了。
【实验原理图】
【实验步骤】
执行程序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。
【程序框图】
【参考程序】
⒈循环点亮发光二极管
NAMET1_1
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVA,#0FEH
LOOP:
RRA
MOVP1,A
LCALLDELAY
JMPLOOP
DELAY:
MOVR1,#127
DEL1:
MOVR2,#200
DEL2:
DJNZR2,DEL2
DJNZR1,DEL1
RET
END
⒉通过发光二极管将P1口的状态显示
NAMET1_2;
P1口输入实验
OUT_PORTEQU0CFA0H
LJMPSTART
MOVP1,#0FFH;
复位P1口为输入状态
MOVA,P1;
读P1口的状态值入累加器A
MOVDPTR,#OUT_PORT;
将输出口地址赋给地址指针DPTR
MOVX@DPTR,A;
将累加器A的值赋给DPTR指向的地址
JMPSTART;
继续循环监测端口P1的状态
实验二P1口实验二
⒈学习P1口既做输入又做为输出的使用方法。
⒉学习数据输入、输出程序的设计方法。
P1口的使用方法这里不讲了。
有兴趣者不妨将实验例程中的“SETBP1.0,SETBP1.1”中的“SETB”改为“CLR”看看会有什么结果。
另外,例程中给出了一种N路转移的常用设计方法,该方法利用JMP@A+DPTR的计算功能,实现转移。
该方法的优点是设计简单,转移表短,但转移表大小加上各个程序长度必须小于256字节。
平推开关的输出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接高电平K2接低电平时,右转弯灯(L5、L6)灭,左转弯灯(L1、L2)以一定频率闪烁;
⒉K2接高电平K1接低电平时,左转弯灯(L1、L2)灭,右转弯灯(L5、L6)以一定频率闪烁;
⒊K1、K2同时接低电平时,发光二极管全灭;
⒋K1、K2同时接高电平时,发光二极管全亮。
【参考程序】
NAMET2;
P1口输实验
SETBP1.0
SETBP1.1;
用于输入时先置位口内锁存器
MOVA,P1
ANLA,#03H;
从P1口读入开关状态,取低两位
MOVDPTR,#TAB;
转移表首地址送DPTR
MOVCA,@A+DPTR
JMP@A+DPTR
TAB:
DBPRG0-TAB
DBPRG1-TAB
DBPRG2-TAB
DBPRG3-TAB
PRG0:
向P1口输出0,发光二极管全灭;
此时K1=0,K2=0
JMPSTART
PRG1:
MOVP1,#0F3H;
只点亮L1、L2,表示左转弯
ACALLDELAY;
此时K1=1,K2=0
MOVP1,#0FFH;
再熄灭0.5秒
延时0.5秒
PRG2:
MOVP1,#03FH;
只点亮L5、L6,表示右转弯
此时K1=0,K2=1
MOVP1,#0FFH
AALLDELAY
PRG3:
MOVP1,#00H;
发光二极管全亮,此时K1=1,K2=1
MOVR1,#5;
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
实验三简单I/O扩展实验(交通灯控制)
【实验题目】
扩展实验箱上的74LS273做为输出口,控制八个发光二极管燃灭,模拟交通灯。
⒈学习在单片机系统中扩展简单I/O接口的方法。
⒉学习数据输出程序的设计方法。
⒊学习模拟交通灯控制的实现方法。
【实验原理】.
要完成本实验,首先必须了解交通路灯的燃灭规律。
本实验需要用到实验箱上八个发光二极管中的六个,即红、黄、绿各两个。
不妨将L1、L3、L5做为东西方向的指示灯,将L2、L4、L6做为南北方向的指示灯。
而交通灯的燃灭规律为:
初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。
闪烁若干次后,东西路口的红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,重复上述过程。
各发光二极管共阳极,阴极接有与非门,因此使其点亮使相应输入端为高电平。
74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273接片选信号CSO,此时74LS273的片选地址为CFA0H~CFA7H之间任选。
运行实验程序,观察LED显示情况是否与实验内容相符。
NAMET3;
I/O口扩展实验一
PORTEQU0CFA0H;
片选地址CS0
MOVA,#11H;
两个红灯亮,黄灯、绿灯灭
ACALLDISP;
调用273显示单元(以下雷同)
ACALLDE3S;
延时3秒
LLL:
MOVA,#12H;
东西路口绿灯亮;
南北路口红灯亮
ACALLDISP
ACALLDE10S;
延时10秒
MOVA,#10H;
东西路口绿灯灭;
MOVR2,#05H;
R2中的值为黄灯闪烁次数
TTT:
MOVA,#14H;
东西路口黄灯亮;
ACALLDE02S;
延时0.2秒
东西路口黄灯灭;
DJNZR2,TTT;
返回TTT,使东西路口;
黄灯闪烁五次
MOVA,#11H;
MOVA,#21H;
东西路口红灯亮;
南北路口绿灯亮
MOVA,#01H;
南北路口绿灯灭
GGG:
MOVA,#41H;
南北路口黄灯亮
南北路口黄灯灭
DJNZR2,GGG;
返回GGG,使南北路口;
MOVA,#03H;
JMPLLL;
转LLL循环
DE10S:
MOVR5,#100;
JMPDE1
DE3S:
MOVR5,#30;
DE02S:
MOVR5,#02;
DE1:
MOVR6,#200
DE2:
MOVR7,#126
DE3:
DJNZR7,DE3
DJNZR6,DE2
DJNZR5,DE1
DISP:
MOVDPTR,#PORT;
273显示单元
CPLA
MOVX@DPTR,A
实验四简单I/O扩展实验二
利用74LS244做为输入口,读取开关状态,并将此状态通过发光二极管显示出来。
⒈学习在单片机系统中扩展简单I/O口的方法。
⒉学习数据输入,输出程序的编制方法。
MCS-51外部扩展空间很大,但数据总线口和控制信号线的负载能力是有限的。
若需要扩展的芯片较多,则MCS-51总线口的负载过重,74LS244是一个扩展输入口,同时也是一个单向驱动器,以减轻总线口的负担。
程序中加了一段延时程序,以减少总线口读写的频繁程度。
延时时间约为0.01秒,不会影响显示的稳定。
⒈74LS244的IN0~IN7接开关的K1~K8,片选信号CS244接CS1。
⒉74LS273的O0~O7接发光二极管的L1~L8,片选信号CS273接CS2。
⒊编程、全速执行。
⒋拨动开关K1~K8,观察发光二极管状态的变化。
NAMET4;
I/O口扩展实验
INPORTEQU0CFA8H;
74LS244端口地址
OUTPORTEQU0CFB0H;
74LS273端口地址
MOVDPTR,#INPORT
MOVXA,@DPTR;
读开关状态
MOVDPTR,#OUTPORT
显示开关状态
MOVR7,#10H;
延时
DEL0:
MOVR6,#0FFH
DJNZR6,DEL1
DJNZR7,DEL0
实验五定时器实验(循环彩灯)
由8031内部定时器1按方式1工作,即作为16位定时器使用,每0.1秒钟T1溢出中断一次。
P1口的P1.0~P1.7分别接发光二极管的L1~L8。
要求编写程序模拟一循环彩灯。
⒈学习8031内部计数器的使用和编程方法。
⒉进一步掌握中断处理程序的编写方法。
【有关说明】
P彩灯变化花样可自行设计。
例程给出的变化花样为:
①L1、L2、…L8依次点亮;
②L1、L2、…L8依次熄灭;
③L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
【连线方法】
P1.0~P1.7分别接发光二极管L1~L8。
【实验电路】
(中断程序框图)
(主程序框图)
NAMET6;
定时器实验
OUTPORTEQU0CFB0H
CSEGAT401BH;
定时器/计数器1中断程序入口地址
LJMPINT
MOVA,#01H;
首显示码
MOVR1,#03H;
03是偏移量,即从基址寄存器到表首的距离
MOVR0,#5H;
05是计数值
MOVTMOD,#10H;
计数器置为方式1
MOVTL1,#0AFH;
装入时间常数
MOVTH1,#03CH
ORLIE,#88H;
CPU中断开放标志位和定时器;
1溢出中断允许位均置位
SETBTR1;
开始计数
LOOP1:
CJNER0,#00,DISP
R0计数计完一个周期,重置初值
INCR1;
表地址偏移量加1
CJNER1,#31H,LOOP2
如到表尾,则重置偏移量初值
LOOP2:
MOVA,R1;
从表中取显示码入累加器
MOVCA,@A+PC
JMPDISP
DB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH
DB0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH
DB0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH
DB0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H
;
MOVDPTR,#OUTPORT
MOVP1,A;
将取得的显示码从P1口输出显示
JMPLOOP1
INT:
CLRTR1;
停止计数
DECR0;
计数值减一
重置时间常数初值
RETI;
中断返回
实验六8255A可编程并行接口实验1
利用8255A可编程并行接口芯片,重复实验四的内容。
实验可用B通道作为开关量输入口,A通道作为显示输出口。
⒈了解8255A芯片的结构及编程方法。
⒉掌握通过8255A并行口读取开关数据的方法。
设置好8255A各端口的工作模式。
实验中应当使三个端口都工作于方式0,并使A口为输出口,B口为输入口。
8255A的PA0~PA7接发光二极管L1~L8;
PB0~PB7接开关K1~K8;
片选信号8255CS接CS0。
NAMET7;
8255A实验一
PAEQU0CFA0H
PBEQU0CFA1H
PCTLEQU0CFA3H
MOVDPTR,#PCTL;
置8255A控制字,A、B、C口均工作
;
方式0,A、C口为输出,B口为输入
MOVA,#082H
MOVDPTR,#PB;
从B口读入开关状态值
MOVXA,@DPTR
MOVDPTR,#PA;
从A口将状态值输出显示
实验七8255可编程并行接口实验2
⒈掌握8255A编程原理。
⒉了解键盘电路的工作原理。
⒊掌握键盘接口电路的编程方法。
⒈识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
本实验例程采用的是行反转法。
行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。
这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。
⒉程序设计时,要学会灵活地对8255A的各端口进行方式设置。
⒊程序设计时,可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。
利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。
将键盘RL10~RL17接8255A的PB0~PB7;
KA10~KA12接8255A的PA0~PA2;
PC0~PC7接发光二极管的L1~L8;
8255A芯片的片选信号8255CS接CS0。
NAMEt8;
8255键盘实验
PBEQUPA+1
PC0EQUPB+1
PCTLEQUPC0+1
CSEGAT4000H
PCTLEQUPC0+1
MOV42H,#0FFH;
42H中放显示的字符码,初值为0FFH
STA1:
MOVDPTR,#PCTL;
设置控制字,ABC口工作于方式0;
AC口输出而B口用于输入
MOVA,#82H
LINE:
MOVDPTR,#PC0;
将字符码从C口输出显示
MOVA,42H
从A口输出全零到键盘的列线
MOVDPTR,#PB;
从B口读入键盘行线值
MOV40H,A;
行线值存于40H中
CPLA;
取反后如为全零;
表示没有键闭合,继续扫描
JZLINE
有键按下,延时10MS去抖动
DL0:
DL1:
DJNZR6,DL1
DJNZR7,DL0
MOVDPTR,#PCTL;
重置控制字,让A为输入,BC为输出
MOVA,#90H
MOVA,40H
刚才读入的行线值取出从B口送出
从A口读入列线值
MOV41H,A;
列线值存于41H中
取反后如为全零
JZSTA1;
表示没有键按下
MOVDPTR,#TABLE;
TABLE表首地址送DPTR
MOVR7,#18H;
R7中置计数值16
MOVR6,#00H;
R6中放偏移量初值
TT:
从表中取键码前半段字节,行线值与实
CJNEA,40H,NN1;
际输入的行线值相等吗?
不等转NN1
INCDPTR;
相等,指针指向后半字节,即列线值
MOVXA,@DPTR;
列线值与实际输入的列线值
CJNEA,41H,NN2;
相等吗?
不等转NN2
MOVDPTR,#CHAR;
相等,CHAR表基址和R6中的偏移量
MOVA,R6;
取出相应的字符码
MOV42H,A;
字符码存于42H
BBB:
重置控制字,让AC为输出,B为输入
AAA:
MOVA,42H;
将字符码从C口送到二极管显示
MOVDPTR,#PC0
MOVDPTR,#PA;
判断按下的键是否释放
CLRA
MOVDPTR,#PB
JNZAAA;
没释放转AAA
MOVR5,#2;
已释放则延时0.2秒,减少总线负担
MOVR4,#200
DJNZR4,DEL2
DJNZR5,DEL1
转START
NN1:
INCDPTR;
指针指向后半字节即列线值
NN2:
指针指向下一键码前半字节即行线值
INCR6;
CHAR表偏移量加一
DJNZR7,TT;
计数值减一,不为零则转TT继续查找
JMPBBB
TABLE:
DW0FE06H,0FD06H,0FB06H,0F706H;
TABLE为键值表,每个键位占
DW0BF06H,07F06H,0FE05H,0FD05H;
两个字节,第一个字节为行
DW0EF05H,0DF05H,0BF05H,07F05H;
线值,第二个为列线值
DW0FB03H,0F703H