单片机应用技术-实验指导书.docx_第1页
单片机应用技术-实验指导书.docx_第2页
单片机应用技术-实验指导书.docx_第3页
单片机应用技术-实验指导书.docx_第4页
单片机应用技术-实验指导书.docx_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三十 LTC1446串行DA转换实验一、实验目的1、掌握LTC1446 12位串行D/A转换芯片的工作方法。2、掌握LTC1446 12位串行D/A转换芯片编程方法和调试方法。二、实验内容使用LTC1446实现单片机数模转换,输出方波。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验说明LTC1446是一种采用12位逐次逼近式工作的A/D转换器。内部包含系统时钟、采样和保持、12位A/D转换器、数据寄存器以及控制逻辑电路。LTC1446每25uS重复一次“输入转换输出”。器件有两个控制输入:DIN CLK和片选(CS)。内部系统时钟和DIN CLK可独立使用。应用电路的设计只需利用时钟启动转换或读出转换结果。当CS为高电平时, Dout处于高阻态且DIN时钟被禁止。当CS变为低电平时,前次转换结果的最高有效位(MSB)开始出现在Dout端。(其它详细资料看芯片说明)。1、LTC1446 的内部管脚图2、LTC1446 时序图三、实验步骤1、串行D/A的J7两只短路帽打在上方,J8打在VCC处,最小系统的P1.0接串行D/A的CLK,P1.1接DIN,P1.2接CS-1446。2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“LTC1446_Square.ASM”源程序,进行编译,直到编译无误。4、编译无误后,全速运行程序,用示波器观察OUT端的波形为方波。5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)四、程序及电路图(程序光盘中附带)五、思考题1、串行DA转换和并行DA转换的有什么不同点?2、思考如何用串行DA转换输出正弦波。实验三十一 直流电动机控制实验一、实验目的1、学习用PWM输出模拟量驱动直流电机2、熟悉直流电动机的工作特性。 二、实验说明PWM是单片机上常用的模拟量输出方法,用占空比不同的脉冲驱动直流电机转动,从而得到不同的转速。程序中通过调整输出脉冲的占空比来调节直流电机的转速。使用光电测速元件测速,当它与圆盘上的空位相靠近时,光电元件输出低电平,当它与没对空时时,光电元件输出高电平。圆盘转动一周时则产生12个脉冲,直流电机转动时,光电元件输出连续的脉冲信号,单片机记录其脉冲信号,就可以测出直流电机的转速。另外增加显示电路,可把电机的转速显示出来。本实验使用6V直流电机。运行速度设置为40转/秒,经过若干秒后,直流电机转速慢慢下降到运行速度,以设定的速度运行。三、实验内容及步骤1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处2,用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连。 2、最小系统的1.0口接电机单元的Control口,最小系统的INT0接电机单元的PulseOut。3、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。4、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“DC Motor.ASM”源程序,进行编译,直到编译无误。5、全速运行程序。直流电机顺时针旋转,第三个数码显示P最后两位显示电机转速,观察直流电机转速,若干秒后,直流电机转速慢慢下降到以程序设定的速度运行(程序设定为40转/S左右)。6、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)五、实验电路图实验三十二 步进电动机控制实验一、实验目的1、掌握采用单片机控制步进电机的硬件接口技术。 2、掌握步进电机驱动程序的设计和调试方法。 3、熟悉步进电动机的工作特性。 二、实验说明1、步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。若每旋转一圈以20个励磁信号来计算,则每个励磁信号前进18度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。 2、步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。图为步进电动机的控制等效电路,适应控制A、B、/A、/B的励磁信号,即可控制步进电动机的转动。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,即可步进电动机连续转动。a1相励磁法:在每一瞬间只有一个线圈导通。消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走18度。若欲以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: ABCDA STEP AB CD11 0 0 0 201 0 0 300 1 0 40 0 0 1 b2相励磁法:在每一瞬间会有二个线圈同时导通。因其转矩大,振动小,故为目前使用最多的励磁方式,每送一励磁信号可走18度。若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: ABBCCDDAAB STEP AB CD11 1 0 0 201 1 0 300 1 1 41 0 0 1 c1-2相励磁法:为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走9度,故亦广泛被采用。若以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: AABBBCCCDDDAA STEP ABCD11000211003001040110500106001170001810013、电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至其极限时,步进电动机即不再运转。所以在每走一步后,程序必须延时一段时间。三、实验内容及步骤1、由单片机的P1.0P1.3来控制步进电机,P2.0、P2.1、P2.2控制电机的正转、反转、停止,最小系统的P1接步进电机的P1口,P2口接查询式键盘的JD3。2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“Setp Motor.asm”源程序,进行编译,直到编译无误。4、编译无误后,运行程序,按下KEY0键电机正转,按下KEY1键电机反转,按下KEY2键电机停止。5、也可以把源程序编译成可执行文件,用ISP烧录器烧到再烧录到89S52/89S51芯片中。(ISP烧录器的使用查看附录二)四、源程序(光盘中附带)五、思考问题 如何改变电机的工作方式或者方向、速度,设计控制软件?六、实验电路图实验三十三 电子万年历时钟实验一、实验目的1、进一步掌握定时器的使用和编程方法2、进一步掌握中断处理程序的编程方法3、进一步掌握液晶显示的编程方法二、实验说明本实验是利用CPU的定时器和实验箱上提供的液晶显示电路,设计一个电子时钟。格式如下: X年 X月 X日 星期 XX时、X分、X秒本实验使用的是单片机内部计数器的定时器功能,有关设置主要针对定时器/计数器工作方式寄存器TMOD。具体为:工作方式选择位,设置为方式2;计数/定时方式选择位,设置为定时器工作方式。定时器每50MS中断一次,在中断服务程序中,对中断次数进行计数,50MS计数20次就是1秒。然后再对秒计数得到分和小时、日、星期、月、年等,并送入液晶显示缓冲区。(具体请分析实验程序)三、实验内容及步骤1、把液晶模块插到目标板中,单片机最小应用系统 P0口、P1口电阻上拉;单片机最小应用系统的 P0,P1口接液晶单元的P0,P1,J20两个短路帽打到VCC处。 2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“万年历时钟程序.asm”,进行编译,直到编译无误。4、全速运行程序,液晶显示一幅年历时钟并按系统初始化的时间开始走动。5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)四、思考题1、单片机是如何驱动液晶显示的,并如何控制定时器来做万年年历?实验三十四 IC卡读写实验一、实验目的 1、 熟悉IC卡以及SE4442 的功能特性2、掌握单片机和IC卡的硬件接口技术 3、掌握SE4442 IC卡读写方法 二、实验说明 (一)、逻辑加密卡(IC)SEL4442及其应用 本实验中用的IC卡为带有保护功能和可编程密码(PSC)的256个字节EEPROM的存储卡SLE4442。 西门子公司生产SLE4442的特征为: 1、256X8位的EEPROM用户内存;2、32X1位写保护内存;3、2线制通信协议,可以按字节寻址;4、串行接口、触点配置、复位响应符合ISO标准7816-3;5、擦除和写入的编程时间各为2.5MS;(1)、卡功能分区 图为SLE4442主存储器和密码内存示意图。主存储器的容量为256个字节,每个字节为8位。主存储器可分为保护区和应用区,地址单元为00H1FH的32个字节是保护区,带位保护功能,一旦实行保护后,被保护的单元不可擦除和改写。保护区中没有设置为保护状态的字节,其使用与应用区完全相同。 SLE4442保护区已固化的信息如下: 00H03H复位应答信息 04H07H芯片生产厂家代码和卡型编码。 15H1AH应用标识。 在应用系统中,根据需要,保护区既可用作存放固定信息,如发行单位编号、卡编号、批次号、发行时间、持卡人姓名、证件号码等,也可像应用区一样,存放可变信息。 应用区地址范围为20HFFH,该区的读/写操作是以字节方式进行。由于SLE4442的应用区容量较大,空间安排显得十分灵活,在具体应用中,可根据不同的应用要求,将应用区空间分为几个区,实现一卡多用的功能。 SLE4442还提供了一个4字节的密码内存,其中0单元的EC是误码计数器,只用了该单元的后三位,在IC卡个人化后,(EC)=111.其余3个字节是密码存放单元(PSC)。 在上电以后,除了密码以外,整个内存都是可读的。如果擦除或改写卡中内容,必须校验密码,只有3个字节的密码内容完全相同才可进行。这时才可读出密码内容,如果需要的话,还可以改写新的密码。如果输入的数据与密码比较为不正确,错一次,(EC)为011,再一次不正确,(EC)为001,三次不正确的话,(EC)则为000,这时卡片自锁,不能再改写卡中内容。如三次比较里面有一次正确,则(EC)恢复为111。 芯片正面 IC引脚示意图 各引脚的功能和意义如下: 引 脚 卡触点 符 号 功 能 1C1VCC工作电压5V2C2RST复位3C3CLK时钟4C4NC5C5GND地6C6NC7C7I/O双向资料线8C8NC用户存储区 0FFH 20H 保护区 1FH 00H SC3 SC2 SC1 EC 主存储器 密码内存(2)、IC卡接口电路 图为IC卡座与CPU连接的电路原理图。在电路上,IC卡与接口设备的连接采用I2C总线形式,支持ISO/7816-3同步传输协议,除去密码区操作外,其它类似与对一般串行EEPROM的操作。对SLE4442的操作仅需3根线,即串行时钟线CLK、复位线RST和双向资料线I/O。3根线各自都需要通过一个上拉电阻连到电源线上。 A、复位和复位应答 复位和复位应答的时序如图所示,软件程序框图如图34-1所示。 图34-1 复位与复位响应时序图 上电以后,随着CLK上的1个时钟脉冲,当RST由高电平到低电平时,即进行了一次复位操作。这个操作将得到卡的应答。随着以后32个时钟脉冲的输入,I/O线上将得到相应的32位资料,这就是从卡发送到CPU的复位应答标头。标头长度固定为32位,组成的4个字节为H1,H2,H3,H4。其中H1表示同步传输协议的类型,H2表示协议类型的参数,它们必须符合的ISO/7816-3标准;H3和H4不在ISO/7816-3范围之内。SLE4442的标头为A2 13 10 91。 图中,以上为复位操作,以下为复位应答。 复位应答标头能卡与接口设备是否兼容,如不兼容,则要求IC卡下电,释放触电。 复位过程的时钟频率可在7kHz50kHz之间选取。 在对卡操作前,一般要进行复位和复位应答操作,有时要连续进行两次这样的操作,才能得到正确的复位应答信息。 B、操作命令 复位应答以后,芯片等待输入操作命令。每个命令必须由三部分组成:一个开始状态,接着是写入三个字节(命令字、地址、资料),再接着是一个停止状态。 CLK在高电平时,I/O线由高到低为开始状态;CLK在高电平时,I/O线由高到低为停止状态。命令方式时序如图34-2所示。所有在I/O线上的资料变化有CLK线上的下降沿开始。 图34-2命令方式时序图 下表列出了SLE4442的7个操作命令。表中上面4个命令同样适合与不带密码内存其余与SLE4442完全兼容的SLE4432卡,下面3个命令是针对密码记忆体操作的。 SLE4442的7个操作命令 3、密码记忆体操作 (3)、密码存储器操作对密码内存的操作有三个命令:读密码、写密码和校验密码。其中最主要的是校验密码,密码校验正确,读/写密码的情况就类似与读/写主存储器的操作。校验密码必须严格按图的程序框图进行,任何改变都会导致失败,达不到改写卡中资料的目的,还可能引起EC位从“1”变为“0” 在程序返回前,如校验不成功,芯片内部将相当于使EC的三位右移一次,高位用0填充。 (4)、记忆体操作 对主存储器的操作有4个命令,包括了读/写保护区的命令。如果保护区里有被保护位,被保护的信息就不能改写。伴随着32个时钟脉冲的输入,使用读保护区的命令可以知道32个字节中那些有被保护的位,也就能够读出保护区的内容。 保护区中没带保护位单元的操作如同对应用区的操作一样。程序一开始,要对卡进行复位和复位应答操作,然后校验密码。接着在3个寄存器里分别放入写主存储器命令字,要写入的卡中地址单元和要写入的数据。然后按对卡操作的命令方式,发出一个启动信号,即在CLK高电平时,I/O下跳变,伴随着后面的24个时钟脉冲,CPU把3个寄存器的内容顺次写入卡中,并发出停止信号,在CLK高电平时,I/O线上跳变。接着I/O线清零,CPU输出256个时钟脉冲,这是擦写资料所需要的时钟脉冲数。这样,就可把1个字节的数据写进卡中相应的地址单元中。 读主存储器的操作除了命令不一样以外,无需校验密码,命令里的3个字节写入后,CPU也无需对卡输出256个时钟脉冲。其它就类似与写操作了。 注意: 我们提供的IC卡的初始密码是3个FFH,如果实验时候连续输入3次错误,此卡将自动销毁,实验的时候请注意。 三、实验内容及步骤1、单片机最小系统的P1口接IC卡的P1口,J13打在上方,把SLE4442 IC卡插入IC卡座中。2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“IC Card.ASM”源程序,进行编译,直到编译无误。4、编译无误后,按照程序的提示在NOP处设置断点,在软件的“VIEW”菜单中打开“MEMORY WINDOW”数据窗口(DATA),在窗口中输入D:30H难后回车,运行程序每次到断点处观测地址3BH4BH的值变化,最后地址3BH4BH数据的变成110H。说明IC卡可写可读。四、源程序五、实验电路图实验三十五 非接触式IC卡读写实验(选配)一、实验目的1、了解非接触式IC卡的工作原理和使用方法。2、非接触式IC卡和接触式IC卡的不同点二、实验说明模块采用四层电路板设计,双面表贴工艺,EMC性能优良;采用PHILIPS高集成度读卡芯片MFRC500;具有控制线和可控蜂鸣器信号输出;能读写MFRC500内EEPROM可提供C51函数库供二次开发,采用了UART异步串行接口。模块电路板上自身带有复位和看门狗电路,上电后可以自动进入工作状态。本实验描述了MIFARE 串行读卡模块ZLG500B 与主机微处理器之间的串行通信,软件的通信协议和命令ZLG500B 是一个简单的串行读写模块它可以读写MIFARE 无线智能卡,在这个器件中包括了天线并提供了一个UART 接口其CMOS 电平可受控于主机微处理器。数据块格式描述:数据交换包的序号由MCU 发送数据块时产生,在经过一次正确的数据交换后,主机在发送下一个命令时将数据包的序号加1 ,ZLG500B 返回最近接收的包序号。通常主机应用程序最好检查命令/响应包交换时的数据包的序号。本模块中此序号总是为0,不管在执行命令时出现了任何错误响应包中的数据长度为0 Len = 0BCC, 校验码计算数据块中所有的INFO 字节然后将结果传送到数据块的最后一个字节。错误及超时检测:模块将检测STX ETX 以及BCC 的正确性,若不正确,则将所接收的数据丢失,不会作任何处理,也不返回任何数据。若相邻两个字节的接收时间超过10 毫秒,则模块将认为是接收超时,且停止接收,返回继续等待下一个命令。模块将以数据块中的Len 字节来控制接收的结束。三、实验内容及步骤1、把非接触是IC模块插到液晶点阵显示区,J19两只短路帽打在VCC处,J12打在232处,用23平行线连接232/485接口的COM1串口,另一端连接PC机,打开上位机软件ZLG500B-DEMO软件,点击第一个图标,(或打开“文件”点击“连接”),对话框中会提示已连接提示。2、在扇区中选择一个扇区在写入数据中选择扇区如“01扇区”,在“写入值”中任意输入八位数值,点击“写入数值”看信息提示“写入数值成功”,然后在“读操作数据块”中,选择写入数值的同一扇区,点击“读取数值”看信息提示是否和写入的一样。3、同样以同样的模式可以对“数据”进行写入和读取。自己可以试一试!注:上位机软件的操作可以参考附录三四、思考题1接触式IC卡和非接触式IC卡有如何不同?2请思考接触式IC卡和非接触式IC卡有的具体工作原理?实验三十六 微型打印机实验(选配)一、实验目的1、了解单片机控制打印机的原理和方法2、掌握打印机驱动程序的编写与调试3、了解单片机控制外部设备的常用电路二、实验说明打印机的主要引脚功能如下:DB0DB7 :数据线,单向,由计算机输入打印机。STB: 数据选通信号,底电平有效。用于锁存主机送出的8位打印数据(ASCII)。信号脉冲宽度应大于0.5us。BUSY: 打印机“忙”状态信号,高电平有效。表示打印机正忙于处理数据,此时主计算机不得向打印机送入新的数据,否则数据丢失。信息幅度宽,适用于查询方式。ACK: 打印机应答信号(打印机输出信号),底电平有效。表明打印机已取走数据线上的 数据。脉宽窄可作为中断请求信号。ERR: 出错信号(打印机输出信号),低电平有效,当送入打印机的命令格式有错时,该端线上出现了一个负脉冲,供主机处理。同时打印机打印出一行出错信息,以提示操作者注意。打印机的控制一般流程为:1) 读打印机状态,判断打印机是否忙(BUSY)。2) 若不忙,则向打印机数据口输出数据(TXD)。3) 向打印机输出数据选通信号(STROBE)。本实验是使用AT89C51控制打印机,采用查询方式,要打印的数据由AT89C51的P1口输出,打印机的忙状态是通过AT89C51的P3.4口读入,STB作为选通信号,由P3.5输出。三、实验内容及步骤使用微型打印机与单片机接口模块,打印机装上打印纸。1、CPU的P0,P1口分别接打印机的P0,P1口,并且把打印机的并口线连好。2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“打印机.ASM”源程序,进行编译,直到编译无误。4、运行程序,按打印机的A按钮,打印机开始打印预设的字符,再按A键,则停止打印。 四、流程图及源程序1、流程图否是设 置 字 串 起 址开 始打印机忙输 出 当 前 字 符输 出 选 通 脉 冲指 向 下 一 字 符字 串 结 束结 束是否 2、源程序 ORG 0000H AJMP START ORG 0100HSTART: CLR A ;清空累加器 MOV DPTR,#DATA1 ;表头地址 MOVC A,A+DPTR ;在表中取数据 INC DPTR MOV R2,A ;字符个数存入R2中LOOP: CLR A MOVC A,A+DPTR ;取打印字符 INC DPTR ;指向下一个字符 ACALL PARRL ;调打印程序 DJNZ R2,LOOP ;判断打印完否?未完继续 AJMP START ;重复打印 DATA1: DB 39 ;字符个数 DB 0AH ;走纸一行 ;1 DB 1BH,36H,H,E,L,L,O,! ;8 DB 0DH ;打印 ;1 DB 0AH ;走纸一行 ;1 DB 1BH,38H,1 ;汉字打印命令 ;3 DB 浙,江,天,煌,科,技 ;12 DB 实,业,有,限,公,司 ;12 DB 0DH ;打印 ;1 PARRL: MOV SP ,#60HPUSH DPL ;保存现场 PUSH DPH SETB P3.5PL1: SETB P3.4 JB P3.4,PL1 ;判断是否“忙” MOV P1,A ;向打印机输出数据; CLR P3.5 ;通知打印机读数据 SETB P3.5 POP DPH ;恢复现场 POP DPL RET END五、思考题1如果打印机的数据输入方式改为串行输入,电路应该怎样连接,如何修改程序?六、电路图实验三十七 USB通信实验一、实验目的 1、了解USB总线工作原理。 2、掌握USB接口器件PDIUSBD12工作原理和使用方法。 二、实验说明1、USB 简介USB(即Universal Serial Bus)是一种通用串行总线。随着技术水平的提高,计算机的广泛应用,人们对串行通信提出了更高的要求。开发一种兼容低速和高速的技术,从而为广大用户提供一种可共享的。可扩容的。使用方便的串行总线成为众多厂商的共同目标。为了实现整个计算机系统中总线的一致性,USB已发布了一种成为通用计算机串行技术规范,简称为USB。随着各种类型的USB产品陆续推出,USB通信的优点越来越广泛的被人们所熟知。除了省去在安装中复杂的设定外,它还大大的简化了PC机壳后面杂乱的电缆于连接端口。同时它具有下列的便利性:1)即插即用的特性,并具有自动检测的功能,无需考虑到系统资源是否有冲突。2)可以扩充至127个外部设备,足以解决各类设备同时连接的困扰。3)支持热插拔,也就是外围设备的插入与拔出无须关闭电源。4)安装简单,使用方便。2、PDIUSBD12简介PDIUSBD12是一款性价比很高的USB 器件,可用作微控制器系统中实现与微控制器进行通信的高速通用并行接口,它还支持本地的DMA 传输。PDIUSBD12 完全符合USB1.1版的规范,它还符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。而且PDIUSBD12适用于许多外设,例如:打印机、扫描仪、外部的存储设备和数码相机等等,它使得当前使用SCSI 的系统可以立即降低成本。管脚配置:管脚描述:管脚符号类型描述1DATAIO2双向资料位0 2DATAIO2双向资料位1 3DATAIO2双向资料位2 4DATAIO2双向资料位3 5GNDP地6DATAIO2双向资料位4 7DATAIO2双向资料位5 8DATAIO2双向资料位6 9DATAIO2双向资料位7 10ALEI地址锁存使能在多路地址/数据总线中下降沿关闭地址信息锁存将其固定为低电平用于单地址/数据总线配置11CS_NI片选低有效12SUSPENDI,OD4器件处于挂起状态13CLKOUTO2可编程时钟输出14INT_NOD4中断低有效15RD_NI读选通低有效16WR_NI写选通低有效17DMREQOD4DMA 请求18DMACK_NIDMA 应答低有效19EOT_NIDMA 传输结束低有效EOT_N 仅当DMACK_N 和RD_N 或WR_N 一起激活时才有效20RESET_NI复位低有效且不同步片内上电复位电路该管脚可固定接VCC 21GL_NOD8GoodLink LED 指示器低有效22XTAL1I晶振连接端1 6MHz 23XTAL2O晶振连接端2 6MHz 如果采用外部时钟信号取代晶振可连接XTAL1 XTAL2 应当悬空24VCCP电源电压4.0V5.5V 要使器件工作在3.3V 对VCC 和VOUT3.3 脚都提供3.3V 25DAUSB D-资料线26D+AUSB D+ 资料线27VOUT3.3P3.3V 调整输出要使器件工作在3.3V 对VCC 和VOUT3.3 脚都提供3.3V 28A0I地址位A0=1 选择命令指令A0=0 选择资料该位在多路地址/数据总线配置时可忽略应将其接高电平注:O2 2mA 驱动输出OD44mA 驱动开漏输出OD88mA 驱动开漏输出IO24mA 输出3、与80C51 并行接口举例在该例中,ALE 接为低电平,表示一个独立的地址和数据总线配置。PDIUSBD12 的A0 脚与80C51 的任意一个I/O 口相连。该端口控制PDIUSBD12 的命令和数据状态。80C51 的多位地址和数据总线可直接与PDIUSBD12 的数据总线相连。80C51 的频率输入可由PDIUSBD12 的CLKOUT 提供。三、实验内容与步骤1、把程序 USB.HEX烧入AT89C52芯片中,USB线连接PC机与USB接口模块,打开D12Test.exe 应用程序2、按下或松开USB接口模块的KEY1、KEY2两键,D12Test.exe中断输入显示“已按下按键”或“已松开按键”,点击D12Test.exe 通用输出D1、D2按钮,USB接口模块相应LED D1、D2点亮。四、源程序1、固件函数库子程序说明USB51S库一共有3个文件,包括USB51S.LIB,ISR.C,ISR.H(为了增加USB通信的灵活性,并没有把所有的子程序都封装倒USB51S.LIB,而是在ISR.C建立部分通信程序,这样方便用户修改)。USB51S.LIB文件封装了51单片机用多路地址/数据总线配置对D12进行操作和CHAP9服务的指令。ISR.C文件里包含了D12中断调用的子程序,用户可以自行添加中断服务程序。ISR.H为D12服务的头文件。使用USB51S库对D12编程,免除USB通信要求对USB协议深入了解的要求,使编程变得更加轻松。库文件提供了14个函数给用户程序调用。下面是这些子程序的定义和功能说明:(1) void fn_usb_isr()简介:USB中断服务子程序。来源:USB51S.LIB说明:本子程序是响应USB器件中断服务程序,子程序在D12的INT_N引脚对应的中断中调用,中断必须设置为最高级。子程序调用后先读出D12的中断寄存器,然后按中断的来源调用相应的子程序。(2) void usbserve(void)简介:USB服务处理子程序。来源:USB51S.LIB说明:该子程序的作用是处理USB的setup包。在主循环中调用,该子程序调用的周期会对USB器件的配置时间造成影响。(3) void reconnect_USB(void)简介:USB总线重新连接指令。来源:ISR.C说明:程序先把USB总线断开,然后再连接。固件没有调用,用户必须调用才可以连接上主机。(4) void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)简介:D12模式设置指令。来源:USB51S.LIB说明:用户在控制USB连接和断开时调用,来设定D12工作模式。(5) void D12_SetDMA(unsigned char bMode)简介:D12设置DMA指令。来源:USB51S.LIB说明:在设置模式的时候调用。当不使用DMA功能时,送0x00。用户可以设为DMA模式。由于本库函数未包括DMA功能,当用户调用DMA功能时必须自行完成DMA功能的所有设置。(6) unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)简介:写缓冲区指令。来源:USB51S.LIB说明:endp为写入的端点号(endp=1,3,5)。len为写到缓冲区的字节数。buf为发送数据的开始指针。D12_WriteEndpoint子程序会把buf指针开始的len个字节写到D12相应的缓冲区中。当D12收到相应的IN令牌时会自动上传数据。(7) unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)简介:读缓冲区指令。来源:USB51S.LIB说明:endp为写入的端点号(endp=0,2,4)。len为读入缓冲区的字节数。buf为读入数据的开始指针。D12_WriteEndpoint子程序会D12相应的缓冲区中的内容保存到buf中。(8) unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)简介:读最后处理状态寄存器并把中断寄存器的相应位复位。来源:USB51S.LIB(9) void bus_reset(void)简介:总线复位处理中断服务子程序。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果是复位中断,则调用本子程序。(10) void dma_eot(void)简介:DMA操作结束中断服务子程序。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果是DMA操作结束中断,则调用本子程序。(11) void ep1_txdone(void)简介:端点1输出中断。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果端点1输出中断,则调用本子程序。(12) void ep1_rxdone(void)简介:端点1输入中断。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果是端点1输入中断,则调用本子程序。(13) void ep2_txdone(void)简介:端点2输出中断。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果是端点2输出中断,则调用本子程序。(14) void ep2_rxdone(void)简介:端点2输入中断。来源:ISR.C说明:当接收到USB中断时,进入fn_usb_isr()中断程序,读取中断寄存器,如果是端点2输入中断,则调用本子程序。以上14个子程序中,fn_usb_isr需要用户添加到D12的外部中断服务程序中,usbserve需要用户添加到用户的主循环程序中去,reconnect_USB则需要用户程序在进行USB通信前调用,其他的子程序已经默认设置好了,用户也可以到ISR.C的文件变更程序的内容。2、示例程序下面是usb通信的示例程序,只要把USB51S.LIB和ISR.C添加进项目就可以了。示例程序可以配合电脑测试程序控制LED的状态和采集按键的状态。主程序源代码(MAINLOOP.C):/* /*/ File Name:MAINLOOP.C/ Use Library:USB51S.LIB/ Note:USB51S.LIB不带DMA控制功能/* */#include #include #include #include mainloop.h#include isr.h/*/*/ Public static data/*/extern EPPFLAGS bEPPflags;extern unsigned char idata GenEpBuf;extern unsigned char idata EpBuf;/D12中断服务usb_isr() interrupt 0DISABLE;fn_usb_isr();/调用D12中断服务子程序/(子程序由库文件提供)ENABLE;void main(void)P0 = 0xFF;/初始化I/O口P1 = 0xFF;P2 = 0xFF;P3 = 0xFF;MCU_D12CS = 0x0;D12SUSPD = 0;IT0 = 0;/初始化中断EX0 = 1;PX0 = 0;EA = 1;MCU_D12CS = 0x1;/以下4句对D12进行复位初始化处理MCU_D12CS = 0x0;D12_SetDMA(0x0);bEPPflags.value = 0;reconnect_USB();/连接USB总线(子程序由库文件提供)/* Main program loop */while( TRUE )if(bEPPflags.bits.configuration)check_key_LED();/连接正常,调用按键和LED控制处理usbserve();/USB服务数据处理/(子程序由库文件提供)void check_key_LED(void)static unsigned char c, last_key = 0xf;c = MCU_SWM0 & MCU_SWM1;c &= 0x0f;if (c != last_key) D12_WriteEndpoint(3, 1, &c);/按键状态改变,发送信息给主机/(子程序由库文件提供)last_key = c;if(bEPPflags.bits.ep1_rxdone) DISABLE;/接收到主机发来的LED控制信息bEPPflags.bits.ep1_rxdone = 0;ENABLE;MCU_LED0 = !(GenEpBuf3 & 0x1);/控制LED状态MCU_LED1 = !(GenEpBuf3 & 0x2);USB中断服务源代码(ISR.C):/* /* / File Name:ISR.C/ Use library: USB51S.LIB/ Note:USB51S.LIB不带DMA控制功能/*/#include #include #include #include isr.h#include mainloop.h/*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论