武汉轻工大学
---现代微机原理与接口技术报告
20## 年 5 月 15 日
实验1 定时与中断接口程序设计
实验项目:定时与中断接口程序设计
实验日期:4月22日
实验场地:东7-409
实验环境:
硬件环境:PC机一台;
软件环境:操作系统不限,TURBO C++3.0。
实验目的:
1.学习定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;
2.学习使用TURBO C++对8253、8255进行编程操作;
3.熟悉拦截PC机中断向量的TC++ 编程方法。
实验过程:
1.建立源文件
启动TURBO C++3.0,建立Timer.CPP。保存到D:/110511313/Timer.CPP;
2.设置TC工作目录
选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录。这样,TC生成的可执行文件就会存放到此工作目录下。
3.输入源程序
#include <stdio.h> //支持标准输入输出,如printf()。
#include <dos.h> //支持接口访问、中断向量操作函数
#include <STDLIB.H> //支持exit()函数
#ifdef __cplusplus //定义C++使用的中断函数标识符。
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
int nTick=0,sec=0,flag=0;
unsigned char sys_PB,my_PB;
void interrupt far (*sys_int_08)(__CPPARGS);
void interrupt far my_int_08(__CPPARGS)
{//8号中断,每55ms中断一次,由8253的0号定时器定时,并向8259 IRQ0申请中断
++nTick;
if(nTick ==1) outportb(0x61,my_PB); //开始鸣叫
else if(nTick ==3) outportb(0x61,0x01); //停止鸣叫,PB1=0, PB0保持为1
else if(nTick>18)
{ // 1second/55ms 近似等于18
flag=1;
nTick=0;
sec++;
}
sys_int_08(); //调用系统的中断向量
}
void main()
{ unsigned int Time_up;
printf("Please input Up Time(5--30): ");
scanf("%d",&Time_up);
printf("\n");
if(Time_up<5 || Time_up>30)
{ printf("Input Error!");
exit(1); //结束程序
}
sys_PB=inportb(0x61); //读取PB口,内容
my_PB=sys_PB|0x03; //将PB口低2位(PB0,PB1)置1
//8253通道2,产生1KHz方波,送到扬声器,使扬声器发声
outportb(0x43,0xb6);
//CW=10110110 B,通道2,先低字节,再高字节,方式3,二进制
outportb(0x42,0xa6); //low byte,
outportb(0x42,0x04); //high byte,0x04a6=1190,f = 1.19MHz,out=f/1190=1000Hz
sys_int_08=getvect(0x08); //保存系统的中断向量
setvect(0x08,my_int_08); //设置系统向量
while(1)
{ if(flag==1)
{ flag=0;
printf("%d ",sec);
if(sec==Time_up) break;
}
}
printf("Timer Up!\n\n");
outportb(0x61,sys_PB); //恢复系统的PB口状态
setvect(0x08,sys_int_08); //恢复系统的中断向量
}
4.运行程序,并修改一些数据重新运行。
实验结果及分析:
通过本次实验学习使用TURBO C++对8253、8255进行编程操作,我熟悉了8253、8255的接口逻辑和它们的内部结构、工作原理。了解了8253、8255的工作方式,并熟练掌握了8259的工作原理。
实验2 MFC串行通信程序设计
实验项目:MFC串行通信程序设计
实验时间:4月29日
实验地点:东7-409
实验环境:
硬件环境:PC机一台
串行通信终接头一个
串行通信电缆一根
软件环境:Windows7操作系统VC++6.0
实验目的:
1.了解MFC编写Windows应用程序的一般方法,熟悉Windows API 接口函数的使用;
2.熟悉定时器Timer( )函数、RS232 API接口函数的使用,两者之间的协调工作。
实验过程:
1.建立基于对话框的MFC工程
工程名为Scom,对话框的类(Class)为CscomDlg,对应的头文件为ScomDlg.h,源程序文件为ScomDlg.cpp。
2. 建立串行通信接口
(1)在ScomDlg.h文件中定义串行通信接口对象的句柄
class CScomDlg : public CDialog
{
// Construction
public:
CScomDlg(CWnd* pParent = NULL); // standard constructor
HANDLE hCom; //自己添加的代码
……
(2)在ScomDlg.cpp文件中的OnInitDialog()函数中创建串行通信接口
BOOL CScomDlg::OnInitDialog()
{ ......
// TODO: Add extra initialization here
hCom=CreateFile( "COM1",GENERIC_READ|GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, NULL); //创建接口对象,返回句柄
if(hCom==(HANDLE)-1) { MessageBox( "创建串口1接口实例失败",
"未找到COM1口",MB_ICONSTOP|MB_OK );
return TRUE;
}
DCB dcb; //定义DCB(设备控制块)结构,用于设置串口设备的属性和参数
GetCommState(hCom,&dcb); //先得到系统默认的DCB属性和参数
BuildCommDCB("COM1: 1200, n,8,1", &dcb );
//再修改DCB的几个参数:1200bps,无奇偶校验,8数据位,1停止位
SetCommState(hCom,&dcb);
COMMTIMEOUTS ComTimeOut;
//定义超时结构,用于设置串口读写的等待时间
ComTimeOut.ReadIntervalTimeout=MAXWORD; //读间隔超时
ComTimeOut.ReadTotalTimeoutMultiplier=0; //读总超时系数
ComTimeOut.ReadTotalTimeoutConstant=0; /读总超时常数
ComTimeOut.WriteTotalTimeoutMultiplier=0; /写总超时系数
ComTimeOut.WriteTotalTimeoutConstant=400; //写总超时常数
SetCommTimeouts(hCom,&ComTimeOut);
//按超时结构设置串口读写的等待时间
SetupComm(hCom,1000,1000); //设置读写缓冲区
PurgeComm(hCom,PURGE_TXCLEAR); //清空发送缓冲区
PurgeComm(hCom,PURGE_RXCLEAR); //清空接收缓冲区
……
3. 用可视化工具在对话框窗体上添加按钮、编辑框.
按下表设置各控件的属性。
为上述控件加入变量。选View/ClassWizard,选Member Variables卡,按下图设置
4. 建立各控件的消息响应函数
(1)为“退出”按钮建立消息响应函数,双击“退出”按钮,弹出对话框,点击确定。于是MFC自动在CscomDlg类中建立了“退出”按钮的响应函数OnCancel();请在该函数中添加代码:
void CScomDlg::OnCancel()
{ // TODO: Add extra cleanup here
CloseHandle(hCom); //最后释放串口资源
……
(2)为“发送” 按钮建立消息响应函数,双击“发送”按钮,弹出对话框,点击确定。于是MFC自动在CscomDlg类中建立了“发送”按钮的响应函数OnSend ();请在该函数中添加代码:
void CScomDlg::OnSend()
{ // TODO: Add your control notification handler code here
COMSTAT state; //定义串口状态结构,用于存放串口通信的状态
DWORD BytesWritten; //定义存放实际发送了多少字节的变量
int SendBytes; //定义应发送的字节数存放变量
LPTSTR TxdBuff; //定义将发送的字符串
UpdateData(TRUE); //将当前编辑框中输入的字符更新到m_SenTxt变量中
SendBytes=m_SenTxt.GetLength(); //得到m_SenTxt变量中存放的字符数
TxdBuff=m_SenTxt.GetBuffer(SendBytes); //使发送字符串指针指向m_SenTxt
BOOL OK=WriteFile(hCom,TxdBuff,SendBytes,&BytesWritten,NULL); //发送
if(!OK) { //发送失败
ClearCommError(hCom,&BytesWritten,&state); //清除发送错误
}
}
5. 为接收数据创建定时器
每隔500ms自动检测是否有数据发来。如果有数据发来,则读取、显示传来的数据。
(1)先在ScomDlg.cpp文件中的OnInitDialog()函数中创建定时器:
BOOL CScomDlg::OnInitDialog()
{......
// TODO: Add extra initialization here
SetTimer(1,500,NULL); //创建定时器
hCom=CreateFile( "COM1", GENERIC_READ|GENERIC_WRITE,
......
当程序退出时,应删除本定时器:
void CScomDlg::OnCancel()
{ // TODO: Add extra cleanup here
KillTimer(1); //删除定时器
CloseHandle(hCom); //最后释放串口资源
......
(2) 再创建“定时时间到”消息响应函数。选菜单项View/ClassWizard,选Message Map卡,在Object IDs列表框中选CScomdlg,在Class Name列表框中选CScomdlg,在Messages列表框中选WM_TIMER,点击“Add Function”、“Edit Code”。于是,在CScomDlg类中添加了OnTimer(UINT nIDEvent)函数,请输入代码:
void CScomDlg::OnTimer(UINT nIDEvent)
{ // TODO: Add your message handler code here and/or call default
DWORD BytesRead, dwErrorFlags; //定义存放实际接收到多少字节的变量
BYTE RxdBuff[51]; //定义存放接收到的字符的数组
COMSTAT ComStat;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
//读取串行设备的当前状态,获取接收缓冲区中已有的字节数
BytesRead =min(50,ComStat.cbInQue); //应该读取的数据长度
If(BytesRead)
{
ReadFile(hCom,RxdBuff, BytesRead,&BytesRead,NULL);
//试图接收BytesRead个字符
if(BytesRead>0)
{ //实际收到了BytesRead个字符
RxdBuff[BytesRead]=0; //在收到的字符串后加结尾标志
m_Receive+=_T(RxdBuff); //将收到的字符串连接到接收编辑框变量
UpdateData(FALSE); //更新接收编辑框的显示
}
}
实验结果及分析:
实验截图:
实验总结:
通过本次实验了解MFC编写Windows应用程序的一般方法,熟悉Windows API 接口函数的使用。
这个实验 也是做通信,我们也做过内斯的实验。同样是先创建连接(接口),通过验证,然后发送、接收信息。我们做的事linux中的tcp/ip通信协议,感觉差不多。
第二篇:微机原理及接口技术 实验报告
微机原理及接口技术
实验报告
学 院: 信息工程学院
专业班级: 通 信 0801
姓 名:
学 号:
实验一 多位十进制数相加实验
一.实验目的
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送和算术运算指令的用法。
二.实验内容
将两个多位十制数28056,47193相加,并显示加数,被加数,和。要求加数和被加数均以ASCII码形式各自顺序存放在DATAl和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。
三.程序流程图
N
Y
四.参考程序
SHOW MACRO B
MOV DL,B
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
DATA3 DB '__', 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
STA DB 20 DUP (?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2
MOV BX,05
SHOW 20H
CALL DISPL
SHOW 0DH
SHOW 0AH
MOV SI,OFFSET DATA1
MOV BX,05
SHOW 2BH
CALL DISPL
SHOW 0DH
SHOW 0AH
MOV CL,7
S1: SHOW 2DH
LOOP S1
SHOW 0DH
SHOW 0AH
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2
CALL ADDA
MOV SI,OFFSET DATA1
MOV BX,05
SHOW 20H
CALL DISPL
MOV AX,4C00H
INT 21H
DISPL PROC NEAR
DS1: SHOW [SI+BX-1]
DEC BX
JNZ DS1
RET
DISPL ENDP
ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,05
AD1: SUB BYTE PTR [SI+BX-1],30H
SUB BYTE PTR [DI+BX-1],30H
DEC BX
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL
AAA
MOV [SI],AL
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
四.实验过程
进入DOS环境,进入E盘MASM子目录,键入:
E: 回车
CD: MASM 回车
EDIT *.ASM 回车(*为程序名)
打开编辑窗口将汇编语言源程序输入
对源程序进行汇编链接,执行并调试可执行文件
六.思考题
不改变数据段DATA1和DATA2的内容,如何将加数与被加数分别由28056和47193变成65082和39174,并且相加
答:源程序不变将
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
后加上
DATA4 DB 37H,34H,31H,39H,33H
DATA5 DB 32H,38H,30H,35H,36H
并将全部DATA1和DATA2全部改成DATA4和DATA5
就可以实现
七、实验感想:
通过本实验,基本学会了数据传送和算术运算指令的用法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验二 统计数据个数实验
一.实验目的
掌握将多位十六进制数转换成多位十进制数ASCII码的方法
二.实验内容
统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数
三.程序流程图
Y
N
Y
四.参考程序
DATA SEGMENT
ARY DB 1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3
DB -4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4
DB 2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7
N=$-ARY
LRESULT DW 0
HRESULT DW 0
TJJG DB 'STATISTICS RESULT:',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS, AX
MOV ES, AX
SHOW MACRO B
PUSH DX
PUSH AX
MOV AH,02H
INT 21H
POP AX
POP DX
ENDM
XOR CX,CX
MOV CX,N
LEA SI,ARY
LOP: MOV AL,[SI]
CMP AL,0
JNS PLUS
INC LRESULT
JMP CONT
PLUS: INC HRESULT
CONT: INC SI
LOOP LOP
LEA DX,TJJG
MOV AH,09H
INT 21H
SHOW '+'
MOV AX,HRESULT
CALL DISPL
SHOW 0DH
SHOW 0AH
SHOW '-'
MOV AX,LRESULT
CALL DISPL
MOV AX,4C00H
INT 21H
DISPL PROC
PUSH DX
PUSH AX
MOV CX,10
MOV DX,00H
MOV BX,00H
DIV CX
MOV BX,DX
ADD AL,30H
DISPL1: MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
POP AX
POP DX
RET
DISPL ENDP
CODE ENDS
END START
五.实验过程
进入E盘的MASM子目录,打开编辑窗口将汇编语言源程序输入,对源程序进行汇编链接,执行并调试可执行文件
六.思考题
试分析程序中语句“MOV CX,N”执行后,赋给CX寄存器的值是多少?
答:赋给CX的值是63
七、实验感想:
通过本实验,基本学会了数据传送和算术运算指令的用法及将多位十六进制数转换为多位十进制数ASCII码得方法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验三 直流电机测速实验
一. 实验目的:
1.掌握8254的工作原理和编程方法
2.了解光电开关的使用方法,掌握用光电传感器测量电机转速的方法
二. 实验内容
光电测速的基本电路由光电传感器、计数器和定时器组成。测量时在被测电机主轴上固定一个圆盘,圆盘的边缘上打上小孔。传感器的红外发射端和接收端装在圆盘的两测,电机带动圆盘转到有孔的位置时,红外光通过,红外接收管导通,输出低电平。红外光被挡住时接收管截止,输出高电平。用计数器记录在一定时间内传感器发出的脉冲个数就可以计算出电机转速。
三. 线路连接
接线方法:8254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0接1MHZ脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。GATE0、GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端相连,GATE1与8255的PC0相连。电机DJ端与+5V~0V模拟开关SW1相连。
四. 编程提示
8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。
8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。
五. 流程图
六. 参考程序
DATA SEGMENT
IOPORT EQU 0D880H-0280H
IO8255K EQU IOPORT+283H
IO8255A EQU IOPORT+280H
IO8255C EQU IOPORT+282H
IO8254K EQU IOPORT+28BH
IO82542 EQU IOPORT+28AH
IO82541 EQU IOPORT+289H
IO82540 EQU IOPORT+288H
MESS DB 'STRIKEANY KEY,RETURN TO DOS!',0AH,0DH,'$'
COU DB 0
COU1 DB 0
COUNT1 DB 0
COUNT2 DB 0
COUNT3 DB 0
COUNT4 DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,09H
INT 21H
MOV DX,IO8254K
MOV AL,36H
OUT DX,AL
MOV DX,IO82540
MOV AX,50000
OUT DX,AL
NOP
NOP
MOV AL,AH
OUT DX,AL
MOV DX,IO8255K
MOV AL,90H
OUT DX,AL
MOV DX,IO8255C
MOV AL,00
OUT DX,AL
LL: MOV AH,01H
INT 16H
JNZ QUIT1
MOV DX,IO8254K
MOV AL,70H
OUT DX,AL
MOV DX,IO82541
MOV AL,0FFH
OUT DX,AL
NOP
NOP
OUT DX,AL
MOV DX,IO8254K
MOV AL,90H
OUT DX,AL
MOV DX,IO82542
MOV AL,100
OUT DX,AL
MOV DX,IO8255C
MOV AL,01H
OUT DX,AL
JMP A0
QUIT1: JMP QUIT
A0: MOV DX,IO8255A
A1: IN AL,DX
AND AL,01H
JZ A1
MOV DX,IO8255C
MOV AL,00H
OUT DX,AL
MOV DX,IO8254K
MOV AL,70H
OUT DX,AL
MOV DX,IO82541
IN AL,DX
MOV BL,AL
IN AL,DX
MOV BH,AL
MOV AX,0FFFFH
SUB AX,BX
CALL DISP
MOV DL,0DH
MOV AH,02
INT 21H
MOV DL,0AH
MOV AH,02
INT 21H
JMP LL
DISP PROC NEAR
MOV DX,0000H
MOV CX,03E8H
DIV CX
MOV COUNT1,AL
MOV AX,DX
MOV CL,64H
DIV CL
MOV COUNT2,AL
MOV AL,AH
MOV AH,00H
MOV CL,10
DIV CL
MOV COUNT3,AL
MOV COUNT4,AH
MOV AL,COUNT1
CALL DISP1
MOV AL,COUNT2
CALL DISP1
MOV AL,COUNT3
CALL DISP1
MOV AL,COUNT4
CALL DISP1
RET
DISP ENDP
DISP1 PROC NEAR
AND AL,0FH
CMP AL,09H
JLE NUM
ADD AL,07H
NUM: ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H
RET
DISP1 ENDP
QUIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
七. 实验结果
八. 思考题
关闭电机后,为什么8254计数不为0?
答:关闭电机后,但主机未断电,计数值锁存在锁存器中,所以读数会一直为锁存器的值,8254计数不会显示0
九.实验感想
通过本实验,基本掌握了8254的工作原理和编程方法,了解了光电开关,掌握了用光电传感器测量电机转速的方法。同时,也进一步提高了自己实践动手的能力,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。
实验四 十字路口红绿灯闪烁实验
一.实验目的
通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。
二.实验内容
对8255A接口芯片进行编程,使红,黄,绿发光二极管按照十字路口交通灯的形式点亮或熄灭。
三.线路连接
发光二极管共8个,其中两组绿,黄,红灯用6个,L2、L3、L4为一组,L5、L6、L7为一组;实验台连接如图4.3所示。高电平“1”时,点亮。
四.流程图
五.参考程序
DATA SEGMENT
IOPORT EQU 0D880H-280H
IO8255C EQU IOPORT+282H
IO8255T EQU IOPORT+283H
PB DB ?
MESS DB 'ENTER ANY KEY CAN EXIT TO DOS!',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
STA DW 50 DUP(?)
TOP EQU LENGTHSTA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS
INT 21H
MOV DX,IO8255T
MOV AL,81H
OUT DX,AL
MOV DX,IO8255C
IN AL,DX
MOV PB,AL
MOV DX,IO8255T
MOV AL,80H
OUT DX,AL
MOV DX,IO8255C
MOV AL,PB
OR AL,0CH
OUT DX,AL
MOV AL,30H
OUT DX,AL
CALL DELAY10
LLL: MOV DX,IO8255C
MOV AL,12H
OUT DX,AL
CALL DELAY10
CALL DELAY10
CALL DELAY10
CALL DELAY10
MOV AL,10H
OUT DX,AL
MOV CX,0040H
TTT: MOV AL,0CH
OUT DX,AL
PUSH CX
MOV CX,80H
LOP1: CALL DELAY1
LOOP LOP1
MOV AL,00H
OUT DX,AL
MOV CX,80H
LOP2: CALL DELAY1
LOOP LOP2
POP CX
LOOP TTT
MOV AL,30H
OUT DX,AL
CALL DELAY10
MOV AL,21H
OUT DX,AL
CALL DELAY10
CALL DELAY10
CALL DELAY10
CALL DELAY10
MOV AL,20H
OUT DX,AL
MOV CX,0040H
GGG: MOV AL,0CH
OUT DX,AL
PUSH CX
MOV CX,80H
LOP3: CALL DELAY1
LOOP LOP3
MOV AL,00H
OUT DX,AL
MOV CX,80H
LOP4: CALL DELAY1
LOOP LOP4
POP CX
LOOP GGG
MOV AL,30H
OUT DX,AL
CALL DELAY10
MOV AH,06H
MOV DL,0FFH
INT 21H
JNZ PPP
JMP LLL
PPP: MOV AX,4C00H
INT 21H
DELAY1 PROC NEAR
PUSH CX
MOV CX,0FFFFH
CCC: LOOP CCC
POP CX
RET
DELAY1 ENDP
DELAY10 PROC NEAR
PUSH AX
PUSH CX
MOV CX,0F00H
UUU: CALL DELAY1
LOOP UUU
POP CX
POP AX+*+*
RET
DELAY10 ENDP
CODE ENDS
END START
六.实验结果
1、汇编成功
2、 经测试灯是按照指定规律变化
七.实验现象
红黄绿变化的规律为:两个路口红灯全亮;南北路口绿灯亮,东西路口红灯亮;南北路口绿灯灭,东西路口红灯亮;两个路口黄灯闪烁;两个路口红灯全亮;东西路口绿灯亮,南北路口红灯亮;东西路口绿灯灭,南北路口红灯亮;两个路口黄灯闪烁;依次从头到尾循环出现
八.思考题:程序中红,绿,黄灯点亮和熄灭的延时时间是如何设定的?
答:通过用延时子程序CALL DELAY 10的次数来设定
九.实验感想
通过本实验,基本掌握了8255A接口芯片的编程方法,熟悉了DOS环境,同时,也进一步提高了自己的实践动手能力,并且对微机原理及接口技术这门课程有了更深的了解和认识。