计算机接口实验报告Word下载.docx
《计算机接口实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《计算机接口实验报告Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
4.编写相应的程序,联合发光二极管及数码管显示。
四实验设计
1.基本实验电路图:
2.外部发光二极管接口电路图如下所示:
3.FPGA内发光二极管引脚连接
P3O[7]-----PIN9
P3O[6]-----PIN8
P3O[0]-----PIN142
五实验仿真与测试
1.FPGA中51核的编绎及下载
(1)编绎工程。
(2)连接下载JTAG口,进行下载,点击工具条上的图标,进行下载。
(3)点HardwareSetup选择下载器,只勾上program/configure,其它不选,选start进行下载。
2.keil下51单片机编程
(1)环境建立。
打开medwin.exe,点模拟仿真项进入编程环境.
(2)medwin调用keil软件的编绎器和链接器(设置-》设置编绎目录),如下图所示:
(3)新建.c文件进行程序编写(不用建立工程)。
3.keil编程语言
(1)定义管脚sbit
sbitLED_0=P3^0;
sbitLED_1=P3^6;
sbitLED_2=P3^7;
(2)定义常用unsignedchar,定义8位的字节类型数据,范围为0到255.
(3)延时子程序作用
(4)主程序中while
(1){}控制
4.程序调试
(1)编绎C程序,生成目标代码hex文件。
(2)打开QuartusII中工具下的系统内存数据编缉器。
(3)点击窗口右侧的setup进行JTAG口查找,查找后能找到一个RAM,一个ROM。
(4)ROM内的数据既为程序的目标代码,右击ROM选importdatafromfile选择生成的.hex目标文件,按复位键运行程序。
4.运行结果截图
六实验结果分析
可以通过修改代码中的延时参数改变51单片机中发光二极管闪烁的频率。
函数如下:
voiddelay(intdel){
inti,j;
for(i=1;
i<
del;
i++){
for(j=1;
j<
100;
j++)
{;
}
}
改变del的值,由200逐步增大到1000,可以发现,发光二极管闪烁的频率变慢了。
七实验小结
通过本验,我了解到单片机即是把组成微型计算机的各个功能部件,如中央处理器CPU、随机存储器RAM、只读存储器ROM、输入/输出接口电路、定时器/计数器以及串行通信接口等集成在一块芯片中,构成一个完整的微型计算机。
51单片机主要包括8051微处理器(高速,低功耗),RAM(程序运行时堆栈区),ROM(程序代码存储区),UART(串行口),EEPROM(掉电不丢失),A/D,ISP,看门狗和四个8位并行端口。
第一次接触单片机这个概念,感觉很新奇。
事实证明,单片机结构完整功能强大,在控制领域发挥重要作用。
实验二键盘扫描、中断实验
键盘扫描,中断实验
G楼五层机房WindowsXP操作系统QuartusII软件
本实验主要进行对4*4键盘原理分析,实现对键盘扫描码的判断。
实验要求分别利用查询及中断方式进行扫描键盘,学会使用定时器中断。
具体实现步骤如下:
1.使用查询方式进行键盘扫描码判断(数码管输出)。
*2.设置定时器0中断,进行中断键盘扫描。
*3.定时器中断对实验1中发光二极管闪灭控制。
1.键盘行列扫描原理:
4*4键盘共有16个键,分4行,4列,设置为4行为输入,4列为输出。
如下所示:
输入值输出值89AB
COL11ROW10111
COL21ROW21011
COL30ROW31101
COL41ROW41110
输入值输出值0123
COL10ROW10111
COL31ROW31101
2.FPGA中键盘扫描设置:
1.对FPGA程序进行编绎,下载到FPGA内。
2.51核内程序编写
//设置列扫描值,值为1,2,4,8
voidSet_Col(unsignedcharCol)
{
switch(Col)
{
case1:
Col_1=0;
Col_2=1;
Col_3=1;
Col_4=1;
break;
case2:
…………
default:
break;
//键盘行引脚
sbitRow_4=P0^3;
sbitRow_3=P0^2;
sbitRow_2=P0^1;
sbitRow_1=P0^0;
//键盘列引脚
sbitCol_4=P3^5;
sbitCol_3=P3^4;
sbitCol_2=P3^3;
sbitCol_1=P3^2;
//读入行扫描值
unsignedcharGet_Row()
P0=P0|0X0F;
//_nop();
returnP0&
0x0f;
//键盘扫描值输出,返回扫描值
unsignedcharScan_key()
unsignedchari=0Scankey=0x00;
//扫描值
for(i=0;
4;
Set_Col(0x01<
<
i);
//设置扫描列
delay
(1);
Scankey=Get_Row();
//取得扫描值
switch((~Scankey)&
0x0f)
...
3.程序编绎下载
在keil中编绎好源代码,编绎好后下载到FPGA内。
(扫描的码值可以在数码管中进行显示)
4.显示数值为0~F。
实验截图如下:
在51单片机附加的键盘上进行按键操作,并观察记录路数码管中显示的数字。
可以发现,键盘上16个按键,编号分别是0、1、2、...、D、E、F。
但是在实验中可以发现,数码管有时会显示出错误的数字。
这是因为键盘在操作过程中会出现震荡,导致显示结果不正确。
通过本次试验,我了解到矩阵键盘又称行列式键盘,它是用4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样的键盘中按键的个数是4*4个。
这种行列式键盘结构能够有效的提高单片机系统中的I/O口的利用率。
实验三C语言实现PC串口驱动
C语言实现PC串口驱动
本实验是在PC机中用标准C语言的端口操作方式编写串口驱动程序。
实验要求具体如下:
1.实现PC机串口通信设计,用TC2.0调试。
2.用虚拟串口工具构建串口对来测试。
3.完成串口相关文件传送功能。
1.在TC2.0下编程,实现PC机串口通信。
主函数代码见下:
intmain()
unsignedchartemp;
/*临时变量用于缓存接收数据*/
charbuffer[10];
/*临时缓冲区用于接收控制台输入数据*/
char*pParme;
/*控制台输入字符串指针*/
charsendBuffer[1024];
/*发送数据缓冲区*/
boolbExit_Flag=0;
SeriesCOMMthisComm;
/*串口结构保存当前操作串口数据*/
thisCNumber=COM1;
thisCBps=2400;
thisCDataBit=BIT8;
thisCParity=NONE;
thisCStopBit=BIT1;
if(OpenCOMM(thisCNumber,thisCBps,thisCDataBit,thisCParity,thisCStopBit))
printf("
\nTheSeriesCOMMIsStart..."
);
else
\nTheSeriesCOMMOpenedFalse."
return0;
}
\nTheSeriesCOMMReadyToReceiveData."
while(!
bExit_Flag)
/*接收数据*/
temp=ReadData();
if(temp!
=0xFF)/*如果接收的不是0xff则打印接收结果*/
%c"
temp);
if(kbhit())
temp=getch();
switch(temp)
{
case0x1B:
bExit_Flag=1;
break;
case'
0'
:
1'
2'
3'
4'
5'
6'
7'
8'
9'
SendByte(temp);
default:
}
CloseCOMM();
2.用虚拟串口驱动器建立两个串口COM1和COM2。
如下图所示:
3.运行TC2.0编译代码后产生的exe文件。
同时运行串口调试助手,即可实现在两个串口之间实现数据通信。
通过上图所示的两个窗口即可实现数据的串行传送。
由上图可见,两个串口之间可以正常进行数据通讯。
主机与外设(或计计算机与计算机之间)的数据交换除了可采用并行传输外,还可以采用串行传输。
串行传输方式在每一个时间单位传输一位信息(即每位都占据固定长度的时间间隔),信息的所有位按顺序一位一位传送。
串行传输有时也称为串行通信,由于使用的传输线少,所以成本低,适合于远距离传输。
通过本次实验,我初步了解了Intel8250是专用于串行通信的可编程串行接口芯片,具有很强的串行通信能力和灵活的可编程性能,在微机中应用极为广泛。
实验四FPGA中串口设计
1.解总线的概念及特性。
2.掌握总线传输控制特性。
1.连接PC及单片机串口线。
2.设置两端波特率进行通信。
3.数据的发送及接收显示(要在数码管中显示接收到的数据),同时分析通过串口进行文件传送。
1.串行口初始化
串行口初始化编程格式:
SIO:
MOVSCON,#控制状态字;
写方式字且TI=RI=0
(MOVPCON,#80H);
波特率加倍
(MOVTMOD,#20H);
T1作波特率发生器
(MOVTH1,#X);
选定波特率
(MOVTL1,#X)
(SETBTR1)
(SETBEA);
开串行口中断
(SETBES)
2.发送程序:
(1)查询方式:
TRAM:
MOVA,@R0;
取数据
MOVSBUF,A;
发送一个字符
WAIT:
JBCTI,NEXT;
等待发送结束
SJMPWAIT
NEXT:
INCR0;
准备下一次发送
SJMPTRAM
(2)中断方式:
ORG0023H;
串行口中断入口
AJMPSINT
MAIN:
…;
初始化编程
发送第一个字符
H:
SJMPH;
其它工作
SINT:
CLRTI;
中断服务程序
INCR0
MOVA,@R0;
发送下一个字符
RETI
2.接收程序
REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。
查询方式:
JBCRI,NEXT;
查询等待
MOVA,SBUF;
读取接收数据
MOV@R0,A;
保存数据
INCR0;
准备下一次接收
While
(1)
if(RI==1){**=SBUF;
1下载程序到FPGA内。
2.在Keil下编绎串口通信程序并下载到FPGA内51的ROM中。
3.进行调试程序。
先使接收到的数据在数码管中显示。
再把接收到的数据发送回PC机。
4.PC机端设置程序运行
串口调试助手:
、
在串口调试助手的发送去输入数字,手动发送至51单片机,可以在单片机的数码管上看到输入的数字;
在51单片机配备的键盘上按下按键,即可在串口调试助手的数据接收区上看到发送而来的数据。
实验结果截图如下所示。
由图可见,单片机和PC机之间完成了数据的串行通信。
通过本次试验,我了解了串行通信的基本知识,通过对比,学习了同步、异步串行通讯方式。
异步通讯方式是以字符为传送单位用起始位和停止位标识每个字符的,开始和结束字符间隔不固定,只需字符传送时同步。
其通信的常用格式是一个字符帧,如下图:
而同步通讯是以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。