1、4. 编写相应的程序,联合发光二极管及数码管显示。四 实验设计1. 基本实验电路图:2.外部发光二极管接口电路图如下所示:3.FPGA内发光二极管引脚连接P3O7-PIN 9P3O6-PIN 8P3O0-PIN142五 实验仿真与测试1. FPGA中51核的编绎及下载 (1)编绎工程。 (2)连接下载JTAG口,进行下载,点击工具条上的图标,进行下载。 (3)点Hardware Setup选择下载器,只勾上program/configure,其 它不选,选start进行下载。2. keil下51单片机编程 (1) 环境建立。打开medwin.exe,点模拟仿真项进入编程环境. (2) medw
2、in调用keil软件的编绎器和链接器(设置-设置编绎目录),如下图所示: (3) 新建.c文件进行程序编写(不用建立工程)。3. keil编程语言 (1)定义管脚 sbit sbit LED_0=P30; sbit LED_1=P36; sbit LED_2=P37; (2)定义常用unsigned char ,定义8位的字节类型数据,范围为0到255. (3)延时子程序作用 (4)主程序中while(1)控制4. 程序调试 (1)编绎C程序,生成目标代码hex文件。 (2)打开Quartus II 中工具下的系统内存数据编缉器。 (3)点击窗口右侧的setup进行JTAG口查找,查找后能找到
3、一个RAM,一个ROM。 (4)ROM内的数据既为程序的目标代码,右击ROM选import data from file 选择生成的.hex目标文件,按复位键运行程序。4. 运行结果截图六 实验结果分析可以通过修改代码中的延时参数改变51单片机中发光二极管闪烁的频率。函数如下:void delay(int del) int i,j; for(i=1;idel;i+) for(j=1;j100;j+) ; 改变del的值,由200逐步增大到1000,可以发现,发光二极管闪烁的频率变慢了。七 实验小结通过本验,我了解到单片机即是把组成微型计算机的各个功能部件,如中央处理器CPU、随机存储器RAM、
4、只读存储器ROM、输入/输出接口电路、定时器/计数器以及串行通信接口等集成在一块芯片中,构成一个完整的微型计算机。51单片机主要包括8051微处理器(高速,低功耗),RAM(程序运行时堆栈区),ROM(程序代码存储区),UART(串行口),EEPROM(掉电不丢失),A/D,ISP,看门狗和四个8位并行端口。第一次接触单片机这个概念,感觉很新奇。事实证明,单片机结构完整功能强大,在控制领域发挥重要作用。实验二 键盘扫描、中断实验键盘扫描,中断实验 G楼五层机房 Windows XP操作系统 QuartusII软件 本实验主要进行对4*4键盘原理分析,实现对键盘扫描码的判断。实验要求分别利用查询
5、及中断方式进行扫描键盘,学会使用定时器中断。具体实现步骤如下: 1. 使用查询方式进行键盘扫描码判断(数码管输出)。 *2. 设置定时器0中断,进行中断键盘扫描。 *3. 定时器中断对实验1中发光二极管闪灭控制。1. 键盘行列扫描原理: 4*4键盘共有16个键,分4行,4列,设置为4行为输入,4列为输出。如下所示:输入值 输出值 8 9 A BCOL1 1 ROW1 0 1 1 1COL2 1 ROW2 1 0 1 1COL3 0 ROW3 1 1 0 1COL4 1 ROW4 1 1 1 0输入值 输出值 0 1 2 3COL1 0 ROW1 0 1 1 1COL3 1 ROW3 1 1 0
6、 12. FPGA中键盘扫描设置:1. 对FPGA程序进行编绎,下载到FPGA内。2. 51核内程序编写/设置列扫描值,值为1,2,4,8void Set_Col(unsigned char Col) switch(Col) case 1: Col_1=0; Col_2=1; Col_3=1; Col_4=1; break; case 2: default:break;/键盘行引脚sbit Row_4=P03;sbit Row_3=P02;sbit Row_2=P01;sbit Row_1=P00;/键盘列引脚sbit Col_4=P35;sbit Col_3=P34;sbit Col_2=P
7、33;sbit Col_1=P32; /读入行扫描值unsigned char Get_Row() P0=P0 | 0X0F; / _nop(); return P0&0x0f;/键盘扫描值输出,返回扫描值unsigned char Scan_key() unsigned char i=0 Scankey=0x00; /扫描值 for(i=0;4; Set_Col(0x01i); /设置扫描列 delay(1); Scankey=Get_Row(); /取得扫描值 switch(Scankey)&0x0f) .3. 程序编绎下载 在keil中编绎好源代码,编绎好后下载到FPGA内。(扫描的码值
8、可以在数码管中进行显示)4. 显示数值为0F。实验截图如下:在51单片机附加的键盘上进行按键操作,并观察记录路数码管中显示的数字。可以发现,键盘上16个按键,编号分别是0、1、2、.、D、E、F。但是在实验中可以发现,数码管有时会显示出错误的数字。这是因为键盘在操作过程中会出现震荡,导致显示结果不正确。通过本次试验,我了解到矩阵键盘又称行列式键盘,它是用4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样的键盘中按键的个数是4*4个。这种行列式键盘结构能够有效的提高单片机系统中的I/O口的利用率。实验三 C语言实现PC串口驱动C语言实现PC串口驱动 本实验是在PC机
9、中用标准C语言的端口操作方式编写串口驱动程序。实验要求具体如下: 1. 实现PC机串口通信设计,用TC 2.0调试。 2. 用虚拟串口工具构建串口对来测试。 3. 完成串口相关文件传送功能。1. 在TC 2.0下编程,实现PC机串口通信。主函数代码见下:int main() unsigned char temp; /* 临时变量用于缓存接收数据 */ char buffer10; /* 临时缓冲区用于接收控制台输入数据 */ char * pParme; /* 控制台输入字符串指针 */ char sendBuffer1024; /* 发送数据缓冲区 */ bool bExit_Flag=0;
10、 SeriesCOMM thisComm; /* 串口结构保存当前操作串口数据 */ thisCNumber = COM1; thisCBps=2400; thisCDataBit = BIT8; thisCParity = NONE; thisCStopBit = BIT1; if(OpenCOMM(thisCNumber,thisCBps,thisCDataBit,thisCParity,thisCStopBit) printf(nThe Series COMM Is Start. ); elsenThe Series COMM Opened False. return 0; nThe S
11、eries COMM Ready To Receive Data. while(!bExit_Flag) /* 接收数据 */ temp = ReadData(); if (temp != 0xFF) /* 如果接收的不是0xff 则打印接收结果 */%c,temp); if(kbhit() temp=getch(); switch(temp) case 0x1B: bExit_Flag=1; break; case 0:123456789 SendByte(temp); default: CloseCOMM();2. 用虚拟串口驱动器建立两个串口COM1和COM2。如下图所示:3. 运行TC
12、2.0编译代码后产生的exe文件。同时运行串口调试助手,即可实现在两个串口之间实现数据通信。通过上图所示的两个窗口即可实现数据的串行传送。由上图可见,两个串口之间可以正常进行数据通讯。主机与外设(或计计算机与计算机之间)的数据交换除了可采用并行传输外,还可以采用串行传输。串行传输方式在每一个时间单位传输一位信息(即每位都占据固定长度的时间间隔),信息的所有位按顺序一位一位传送。串行传输有时也称为串行通信,由于使用的传输线少,所以成本低,适合于远距离传输。通过本次实验,我初步了解了Intel8250是专用于串行通信的可编程串行接口芯片,具有很强的串行通信能力和灵活的可编程性能,在微机中应用极为广
13、泛。实验四 FPGA中串口设计1 解总线的概念及特性。2 掌握总线传输控制特性。 1. 连接PC及单片机串口线。 2. 设置两端波特率进行通信。 3. 数据的发送及接收显示(要在数码管中显示接收到的数据),同时分析通过串口进行文件传送。1. 串行口初始化串行口初始化编程格式:SIO:MOV SCON,#控制状态字;写方式字且TI=RI=0 (MOV PCON,#80H) ;波特率加倍 ( MOV TMOD,#20H ) ;T1作波特率发生器 ( MOV TH1,#X ) ;选定波特率 ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ;开串行口中断 ( SETB ES
14、)2. 发送程序:(1)查询方式:TRAM: MOV A,R0 ;取数据 MOV SBUF,A ;发送一个字符WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAITNEXT: INC R0 ;准备下一次发送 SJMP TRAM(2)中断方式: ORG 0023H ;串行口中断入口 AJMP SINTMAIN: ;初始化编程发送第一个字符 H:SJMP H ;其它工作SINT: CLR TI ;中断服务程序 INC R0 MOV A,R0 ;发送下一个字符 RETI2. 接收程序REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。查询方式: JBC RI,NEXT ;查
15、询等待 MOV A,SBUF ;读取接收数据 MOV R0,A ;保存数据 INC R0 ;准备下一次接收While(1) if(RI=1) *=SBUF;1 下载程序到FPGA内。2. 在Keil下编绎串口通信程序并下载到FPGA内51的ROM中。3. 进行调试程序。 先使接收到的数据在数码管中显示。再把接收到的数据发送回PC机。4. PC机端设置程序运行 串口调试助手:、在串口调试助手的发送去输入数字,手动发送至51单片机,可以在单片机的数码管上看到输入的数字;在51单片机配备的键盘上按下按键,即可在串口调试助手的数据接收区上看到发送而来的数据。实验结果截图如下所示。由图可见,单片机和PC机之间完成了数据的串行通信。通过本次试验,我了解了串行通信的基本知识,通过对比,学习了同步、异步串行通讯方式。异步通讯方式是以字符为传送单位用起始位和停止位标识每个字符的,开始和结束字符间隔不固定,只需字符传送时同步。其通信的常用格式是一个字符帧,如下图:而同步通讯是以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1