《DSP控制器原理与应用张小鸣.pptx》由会员分享,可在线阅读,更多相关《DSP控制器原理与应用张小鸣.pptx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、退出第1页/共40页退出第2页/共40页DC/DCDC/DC芯片的主要参数芯片的主要参数 型型 号号功功 能能输入电输入电压压(V)(V)输出电压输出电压(V)(V)输入电流输入电流(mA)(mA)输出电流输出电流(mA)(mA)最大最大值值典型典型值值MAX877开关型升开关型升/降压降压1.8650.310.22240MAX777/778/779开关型升压开关型升压165/35/3或或3.3/3.3/可调可调0.310.22300MAX639/640/653开关型降压开关型降压411.55/3.3/35/3.3/3可可调调0.020.01225MAX738A/744A开关型降压开关型降压6
2、16531.7750MAX878开关型升开关型升/降压降压1.863.3/30.310.22240MAX748开关型降压开关型降压3.3163.331.7750MAX651/649/652开关型降压开关型降压416.53.3/30.10.082000TPS7333Q开关型降压开关型降压53.3500退出第3页/共40页 对于需同时产生对于需同时产生3.3V3.3V和和1.8V1.8V的电源,可采用图的电源,可采用图5-35-3所示的所示的TITI公司的公司的TPS767D318TPS767D318电电路。该芯片属于线性降压型路。该芯片属于线性降压型DC/DCDC/DC变换电路,由变换电路,由5
3、V5V可同时产生两种不同的电压可同时产生两种不同的电压(3.3V(3.3V、1.8V1.8V或或2.5V)2.5V),其最大输出电流,其最大输出电流1000mA1000mA,可同时驱动一片,可同时驱动一片DSPDSP和少量外围电路。和少量外围电路。退出第4页/共40页 另外,在设计另外,在设计PCBPCB板时,对于模拟电源板时,对于模拟电源(VDD)(VDD)和数字电源和数字电源(VCC)(VCC)、模拟地、模拟地(AGND)(AGND)和数字地和数字地(DGND)(DGND)应分开走线,建议使用专门的电源和地线布线,且电源和地线要尽应分开走线,建议使用专门的电源和地线布线,且电源和地线要尽可
4、能地宽,并且在主干线上要放置大小不等的滤波电容可能地宽,并且在主干线上要放置大小不等的滤波电容(50-100F)(50-100F),以滤除多种,以滤除多种不同频率的噪声。在电源和地线的支线上和器件附近,也要安排一些小电容不同频率的噪声。在电源和地线的支线上和器件附近,也要安排一些小电容(0.01-(0.01-0.1F)0.1F)。退出第5页/共40页7.2、晶振、锁相环及复位电路7.2.1 7.2.1 晶振电路晶振电路 DSPDSP所需的晶振一般有两种:有源晶振和无源晶振。其中有源晶振有四个引脚,所需的晶振一般有两种:有源晶振和无源晶振。其中有源晶振有四个引脚,无源晶振有两个引脚。无源晶振有两
5、个引脚。有源晶振按供电方式的不同又可分为有源晶振按供电方式的不同又可分为5V5V和和3.3V3.3V两种。图示的接法为两种。图示的接法为3.3V3.3V供电方式,使用供电方式,使用3.3V3.3V供电晶振的主要优点是电路连接比较简单,可以直接连接到供电晶振的主要优点是电路连接比较简单,可以直接连接到DSPDSP的的XTAL1XTAL1的引脚上的引脚上(DSP(DSP外围电压是外围电压是3.3V)3.3V)。退出第6页/共40页 采用采用5V5V供电方式的有源晶振时,需在它的输出端进行电平转换。有源晶振驱供电方式的有源晶振时,需在它的输出端进行电平转换。有源晶振驱动能力较强,输出频率范围也较宽动
6、能力较强,输出频率范围也较宽(1Hz-400MHz)(1Hz-400MHz),因此在设计,因此在设计DSPDSP系统时经常采用。系统时经常采用。使用无源晶振的优点是价格便宜,但它的驱动能力比较差,一般不能提供多个器使用无源晶振的优点是价格便宜,但它的驱动能力比较差,一般不能提供多个器件共享,而且它可提供的频率范围也比较小件共享,而且它可提供的频率范围也比较小(一般在一般在20kHz-60MHz)20kHz-60MHz)。图。图5-45-4所示的无所示的无源晶振所接的电容典型值为源晶振所接的电容典型值为20-30pF20-30pF。退出第7页/共40页7.2.2 7.2.2 锁相环电路锁相环电路
7、 TMS320LF2407ATMS320LF2407A内部具有锁相环内部具有锁相环(PLL)(PLL)电路,可将一个较低的外部时钟在芯片电路,可将一个较低的外部时钟在芯片内部实现倍频,这对于整个电路板的电磁兼容性是很有好处的,因为外部只需使用内部实现倍频,这对于整个电路板的电磁兼容性是很有好处的,因为外部只需使用较低频率的晶振,避免了外部电路的时钟干扰,同时也避免了高频时钟干扰电路板较低频率的晶振,避免了外部电路的时钟干扰,同时也避免了高频时钟干扰电路板上的其他电路。上的其他电路。TMS320LF2407A TMS320LF2407A的的PLLPLL模块使用外部滤波电路回路来抑制信号抖动和电磁
8、干扰,模块使用外部滤波电路回路来抑制信号抖动和电磁干扰,使信号抖动和干扰影响最小。使信号抖动和干扰影响最小。在设计在设计PCBPCB板时,所有连接板时,所有连接PLLPLL的导线必须尽可能的短。的导线必须尽可能的短。退出第8页/共40页7.2.37.2.3复位电路复位电路 TMS320LF2407ATMS320LF2407A内部带有上电复位电路,可以直接在内部带有上电复位电路,可以直接在RSRS复位引脚外接一个上拉电复位引脚外接一个上拉电阻即可,这对于简化外围电路、减少阻即可,这对于简化外围电路、减少PCBPCB板的尺寸是很有用处的。但是为了调试方便板的尺寸是很有用处的。但是为了调试方便经常采
9、用图示的手动复位电路,在调试时可方便地进行手动复位。经常采用图示的手动复位电路,在调试时可方便地进行手动复位。退出第9页/共40页7.3 电平转换接口电路 随着便携式数字电子产品的迅速发展,要求使用体积小、功耗低的器件来构成随着便携式数字电子产品的迅速发展,要求使用体积小、功耗低的器件来构成电路,因此,现在许多集成电路的工作电压已经从电路,因此,现在许多集成电路的工作电压已经从5V5V降低到降低到3.3V3.3V,但在许多场,但在许多场合仍在用合仍在用5V5V供电的逻辑器件,因此许多设计是供电的逻辑器件,因此许多设计是5V5V和和+3.3V+3.3V逻辑器件共存,而且不逻辑器件共存,而且不同的
10、电源电压在同一同的电源电压在同一PCBPCB中混用。随着更低电压标准的引入,混合电压的系统将会在中混用。随着更低电压标准的引入,混合电压的系统将会在很长时间内存在。很长时间内存在。TMS320LF2407ATMS320LF2407A等新一代等新一代DSPDSP芯片的芯片的I/OI/O工作电压是工作电压是3.3V3.3V,因此,其,因此,其I/OI/O电平也是电平也是3.3V3.3V。在设计。在设计DSPDSP系统时,除了系统时,除了DSPDSP芯片外,必须设计芯片外,必须设计DSPDSP芯片与其他外围芯片的接口,芯片与其他外围芯片的接口,如果外围芯片的工作电压也是如果外围芯片的工作电压也是3.
11、3V3.3V,那么就可以直接连接。但是,由于现有的很多外,那么就可以直接连接。但是,由于现有的很多外围芯片的工作电压是围芯片的工作电压是5V5V,因此就存在一个如何将,因此就存在一个如何将3.3VDSP3.3VDSP芯片与这些芯片与这些+5V+5V供电芯片的可供电芯片的可靠连接问题。靠连接问题。退出第10页/共40页 对于对于3.3V3.3V低电压低电压DSPDSP器件来讲,其引脚信号高低电平的门限值与普通器件来讲,其引脚信号高低电平的门限值与普通TTLTTL门限相门限相同,故同,故DSPDSP的输出信号可以直接驱动的输出信号可以直接驱动5V5V外围器件的输入,不需附加电平转换电路;外围器件的
12、输入,不需附加电平转换电路;另外,由于另外,由于DSPDSP引脚允许输入信号电压的范围是引脚允许输入信号电压的范围是03.6V03.6V,不可以承受,不可以承受5V5V的输入信号的输入信号电压,因此,在电压,因此,在DSPDSP与外围器件之间应进行电平转换。与外围器件之间应进行电平转换。退出第11页/共40页 74LVC24574LVC245的输入端可承受的输入端可承受5.5V5.5V信号,其输出信号的电平为信号,其输出信号的电平为3.3V3.3V,与其功能类似,与其功能类似的芯片还有的芯片还有74LVC424574LVC4245、74LVC1624574LVC16245等。等。输输 入入功功
13、 能能DIRDIRL LL L数据从数据从B B口到口到A A口传送口传送L LH H数据从数据从A A口到口到B B口传送口传送H HX X隔离状态隔离状态 除了上述电平转换方法外,还可采用双电压工作的除了上述电平转换方法外,还可采用双电压工作的CPLDCPLD可编程器件实现电平可编程器件实现电平之间的转换。之间的转换。对于对于CMOSCMOS电平的外围器件,必须采用专门的转换芯片。电平的外围器件,必须采用专门的转换芯片。退出第12页/共40页 以上介绍的转换器件不但起到了电平转换作用,同时也起到了驱动的作用。对以上介绍的转换器件不但起到了电平转换作用,同时也起到了驱动的作用。对于传输速率较
14、低的数字信号,也可以考虑通过光电隔离的方法来实现。于传输速率较低的数字信号,也可以考虑通过光电隔离的方法来实现。退出第13页/共40页7.4 JTAG接口电路设计 同其他的单片机应用系统一样,一个完整的同其他的单片机应用系统一样,一个完整的DSPDSP应用系统必须具有仿真器的标准应用系统必须具有仿真器的标准接口,接口,PCPC通过这个接口可以进行程序的调试和下载。仿真器和通过这个接口可以进行程序的调试和下载。仿真器和JTAGJTAG的连线可以购买,的连线可以购买,用户只需清楚用户只需清楚JTAGJTAG接口的各个引脚的定义便可在应用板上设计自己的接口的各个引脚的定义便可在应用板上设计自己的JT
15、AGJTAG接口。接口。需注意的是,需注意的是,JTAGJTAG接口引脚的定接口引脚的定义顺序不同于一般的集成芯片引脚的逆义顺序不同于一般的集成芯片引脚的逆时针顺序,而是从上到下、左右交替排时针顺序,而是从上到下、左右交替排列。列。退出第14页/共40页 JTAG JTAG接口与应用板中接口与应用板中DSPDSP芯片连接的原理图芯片连接的原理图 如下:如下:1)1)要求安装仿真器要求安装仿真器的计算机与的计算机与DSPDSP应用系统应用系统可靠接地;可靠接地;2)2)禁止带电插拔禁止带电插拔JTAGJTAG接头;接头;3)3)正确的操作顺序是:先退出计算机系统的仿真窗口,然后再将正确的操作顺序
16、是:先退出计算机系统的仿真窗口,然后再将DSPDSP应用板断应用板断电,否则可能出现仿真器不能正常运行的情况。电,否则可能出现仿真器不能正常运行的情况。注意以下几点注意以下几点 问题:问题:退出第15页/共40页7.5 DAC接口电路7.5.17.5.1串行串行D/AD/A接口接口 由于由于DSPDSP内部包含有串行外设接口内部包含有串行外设接口SPISPI模块,且模块,且SPISPI的外部连线较少、速度较的外部连线较少、速度较快,因此在应用系统中的快,因此在应用系统中的SPISPI没有用作其他目的的情况下,可以配合具有没有用作其他目的的情况下,可以配合具有SPISPI接接口的外部器件进行口的
17、外部器件进行D/AD/A转换。转换。目前,具有目前,具有SPISPI接口的外部器件较多,如接口的外部器件较多,如LEDLED驱动、驱动、A/DA/D转换、转换、D/AD/A转换等转换等芯片,其中,芯片,其中,MAX5121MAX5121就是适合于就是适合于SPISPI通信的通信的D/AD/A转换芯片转换芯片退出第16页/共40页7.5.27.5.2并行并行D/AD/A接口接口 DSP DSP对并行对并行DACDAC芯片的访问形式是只写不读。以下介绍芯片的访问形式是只写不读。以下介绍DSPDSP与与AD7837AD7837的接口方法。的接口方法。AD7837AD7837为为1212位双通道位双通
18、道(A(A和和B)B)的的DACDAC,其数据线只有,其数据线只有8 8位,低位,低8 8位和高位和高4 4位数据线复用,位数据线复用,对于每个对于每个DACDAC,完成一次转换操作的过程是:先将待转换的低,完成一次转换操作的过程是:先将待转换的低8 8位数据送到位数据送到AD7837AD7837,然,然后,再写高后,再写高4 4位,最后,通过位,最后,通过I/OI/O引脚输出一个转换锁存信号到引脚输出一个转换锁存信号到AD7837AD7837的引脚,从而启的引脚,从而启动动D/AD/A转换。地址信号转换。地址信号A0A0和和A1A1用来选择用来选择AD7837AD7837中的中的A A或或B
19、 B转换器。转换器。退出第17页/共40页7.6 SRAM接口电路 SRAMSRAM是是DSPDSP最常用的外围存储设备,它具有接口简单、读写速度快等优点。常用最常用的外围存储设备,它具有接口简单、读写速度快等优点。常用的的SRAMSRAM有有IDT7128IDT7128、CY7C1024CY7C1024、CY7C1021CY7C1021等。等。退出第18页/共40页 CY7C1021 CY7C1021是是1616位高性能位高性能CMOSCMOS静态静态RAMRAM,对其基本操作有两种情况:,对其基本操作有两种情况:1)1)当输入信号当输入信号 和和 同时为低电平时,选通该芯片的写功能。当低字
20、节使同时为低电平时,选通该芯片的写功能。当低字节使能位能位 变低时,选通低变低时,选通低8 8位数据端口,即来自位数据端口,即来自I/OI/O引脚引脚I/O8-I/O1I/O8-I/O1的数据被写入到的数据被写入到地址引脚地址引脚A15-A0A15-A0所指定的位置;当所指定的位置;当 变低时,选通高变低时,选通高8 8位数据端口,即来自位数据端口,即来自I/OI/O引脚引脚I/O16-I/O9I/O16-I/O9的数据被写入到地址引脚的数据被写入到地址引脚A15-0A15-0所指定的位置。所指定的位置。2)2)当输入信号当输入信号 和和 为低电平、同时迫使为低电平、同时迫使 变高电平时,选通
21、该芯片的变高电平时,选通该芯片的读功能。当低字节使能位读功能。当低字节使能位 变低时,存储器中指定位置中的数据将出现在变低时,存储器中指定位置中的数据将出现在I/OI/O引引脚脚I/O8-I/O1I/O8-I/O1上;如果高字节使能位上;如果高字节使能位 变低时,指定的高变低时,指定的高8 8位数据出现在位数据出现在I/OI/O引脚引脚I/O16-I/O9I/O16-I/O9上。上。退出第19页/共40页CY7C1021CY7C1021功能表功能表 选择,输出禁止选择,输出禁止高阻高阻高阻高阻H HH HL L选择,输出禁止选择,输出禁止高阻高阻高阻高阻H HH HL L写高写高8 8位位数据
22、输入数据输入高阻高阻L LH H写低写低8 8位位高阻高阻数据输入数据输入H HL L写所有位写所有位数据输入数据输入数据输入数据输入L LL LL LL L读高读高8 8位位数据输出数据输出高阻高阻L LH H读低读低8 8位位高阻高阻数据输出数据输出H HL L读所有位读所有位数据输出数据输出数据输出数据输出L LL LH HL LL L掉电掉电高阻高阻高阻高阻H H模式模式I/O16-I/O9I/O16-I/O9I/O8-I/O1I/O8-I/O1退出第20页/共40页 图示给出了图示给出了CY7C1021CY7C1021与与DSPDSP的一种接口电路。从图中可以看出,每次读、写操作的的
23、一种接口电路。从图中可以看出,每次读、写操作的是整个是整个1616位数据,不分高低字节。通过译码电路将位数据,不分高低字节。通过译码电路将64KB64KB的的SRAMSRAM空间分为两个地址空间空间分为两个地址空间(由地址的最高位由地址的最高位A15A15的值决定的值决定),即数据区和程序区,具体区间的划分由用户的译码方,即数据区和程序区,具体区间的划分由用户的译码方法决定,利用法决定,利用DSPDSP可方便地对可方便地对CY7C1021CY7C1021进行读写操作。进行读写操作。退出第21页/共40页TMS320LF240 x应用实例3线8线译码器第22页/共40页7.7 3线8线译码器 本
24、节以本节以3 3线线8 8线译码器为例,介绍基于线译码器为例,介绍基于DSPDSP的点对点控制实现方法。的点对点控制实现方法。输入信号输入信号输输 出出 信信 号号IOPE3IOPE3IOPE2IOPE2IOPE1IOPE1IOPB7IOPB7IOPB6IOPB6IOPB5IOPB5IOPB4IOPB4IOPB3IOPB3IOPB2IOPB2IOPB1IOPB1IOPB0IOPB00 00 00 00 00 00 00 00 00 00 01 10 00 01 10 00 00 00 00 00 01 10 00 01 10 00 00 00 00 00 01 10 00 00 01 11 1
25、0 00 00 00 01 10 00 00 01 10 00 00 00 00 01 10 00 00 00 01 10 01 10 00 01 10 00 00 00 00 01 11 10 00 01 10 00 00 00 00 00 01 11 11 11 10 00 00 00 00 00 00 0退出第23页/共40页7.7.17.7.1设计思路设计思路 1 1TMS320LF2407ATMS320LF2407A的的I/OI/O引脚处理引脚处理 本设计采用本设计采用TMS320LF2407ATMS320LF2407A来实现。由于本设计要用到的输入、输出引脚较多,来实现。由于本设计
26、要用到的输入、输出引脚较多,而而TMS320LF2407ATMS320LF2407A芯片中独立使用的芯片中独立使用的I/OI/O引脚较少,大多数的引脚较少,大多数的I/OI/O引脚都是和特殊功能引脚都是和特殊功能的引脚复用。因此在初始化程序中要先把选定的引脚设置成通用的的引脚复用。因此在初始化程序中要先把选定的引脚设置成通用的I/OI/O功能。功能。另外,为防止外界信号的干扰,译码器的输入引脚应接上拉电阻。为保证有一另外,为防止外界信号的干扰,译码器的输入引脚应接上拉电阻。为保证有一个稳定的输出和防止外界的干扰,应采用锁存器把输出的电平进行锁定。个稳定的输出和防止外界的干扰,应采用锁存器把输出
27、的电平进行锁定。退出第24页/共40页2 2硬件电路硬件电路 3 3输入信号用输入信号用3 3个按键开关来实现,且均接个按键开关来实现,且均接4.7k4.7k的上拉电阻。当按键未按下时,的上拉电阻。当按键未按下时,IOPEIOPE输入高电平,当按键按下时,输入高电平,当按键按下时,IOPEIOPE输入变为低电平,通过输入变为低电平,通过3 3个按键的不同状态组合,个按键的不同状态组合,即可实现译码器的即可实现译码器的8 8种不同状态输入。译码器的输出用种不同状态输入。译码器的输出用8 8个发光二极管来指示,对于某个发光二极管来指示,对于某种按键的组合输入,只有一个相应的发光二极种按键的组合输入
28、,只有一个相应的发光二极管点亮,表示输出一个控制信号,图中点亮,表示输出一个控制信号,图中的的1k1k电阻为发光二极管的限流电阻。电阻为发光二极管的限流电阻。退出第25页/共40页 SN74HC574N SN74HC574N为为8D8D锁存器锁存器,用于输出信号的锁存和驱动用于输出信号的锁存和驱动2407A2407A的复位信号的复位信号 经经74HC0474HC04反相后和反相后和SN74HC574NSN74HC574N使能端使能端 相接,当相接,当2407A2407A复位时,复位时,为低电平,为低电平,为高电为高电平,平,SN74HC574NSN74HC574N无输出;当无输出;当TMS32
29、0LF2407ATMS320LF2407A正常工作时,正常工作时,为高电平,为高电平,为低电平,为低电平,SN74HC574NSN74HC574N正常输出。用正常输出。用TMS320LF2407ATMS320LF2407A的的IOPC6IOPC6引脚作为引脚作为SN74HC574NSN74HC574N的的CLKCLK信号,信号,IOPC6IOPC6通常应输出低电平,当通常应输出低电平,当IOPE6IOPE6变为高电平时,变为高电平时,SN74HC574NSN74HC574N输出正常译码信号。输出正常译码信号。退出第26页/共40页3 3编程时应注意的问题编程时应注意的问题 一般而言,一般而言,
30、DSPDSP程序包括主程序、系统初始化程序和存储器配置文件。如果程序包括主程序、系统初始化程序和存储器配置文件。如果系统没有正确初始化或存储器配置不正确,那么,即使主程序正确,系统也不能系统没有正确初始化或存储器配置不正确,那么,即使主程序正确,系统也不能正确运行。正确运行。DSPDSP包含很多存储器映射的包含很多存储器映射的CPUCPU寄存器和外设寄存器,在编程时经常要寄存器和外设寄存器,在编程时经常要对它们进行配置,因此需先编写一个头文件,把这些寄存器的名称和数据存储空对它们进行配置,因此需先编写一个头文件,把这些寄存器的名称和数据存储空间对应起来,然后再使用。间对应起来,然后再使用。退出
31、第27页/共40页7.7.27.7.2参考程序参考程序1 1头文件头文件F2407REGS.HF2407REGS.H参见附录参见附录C C。2 2汇编语言文件汇编语言文件(.ASM)(.ASM).include .include “F2407REGS.HF2407REGS.H”;引用头文件引用头文件 .def _c_int0.def _c_int0 .data ;.data ;定义程序的数据段定义程序的数据段 input_temp .word 00h ;input_temp .word 00h ;输入暂存寄存器输入暂存寄存器 output_flag .word 00h ;output_flag
32、 .word 00h ;按键值暂存寄存器按键值暂存寄存器1 1 flag_temp .word 00h ;flag_temp .word 00h ;按键值暂存寄存器按键值暂存寄存器2 2 io_decode_flag .word 00h ;io_decode_flag .word 00h ;输出译码暂存寄存器输出译码暂存寄存器退出第28页/共40页;(1);(1)主程序主程序 .text ;.text ;定义程序段定义程序段_c_int0:_c_int0:NOP NOP CALL system_init ;CALL system_init ;调系统初始化程序调系统初始化程序 CALL iopo
33、rt_init ;CALL ioport_init ;调调I/OI/O口初始化程序口初始化程序 NOPNOP Decode_3_8_loop:Decode_3_8_loop:CALL read_button ;CALL read_button ;调按键读入程序调按键读入程序 LDP#4 ;DPLDP#4 ;DP指针指向数据存储指针指向数据存储B0B0区区 SPLK#0001h,io_decode_flag ;SPLK#0001h,io_decode_flag ;给输出译码赋初值给输出译码赋初值,;表示表示DS0DS0亮亮 LT output_flag ;output_flagLT output
34、_flag ;output_flag中的值加载到中的值加载到TREGTREG中中 LACT io_decode_flag ;io_decode_flagLACT io_decode_flag ;io_decode_flag中的值左移中的值左移 SACL io_decode_flag ;SACL io_decode_flag ;左移的位数由左移的位数由TREGTREG中的低中的低4 4位决定位决定 LDP#DP_PF2 ;DPLDP#DP_PF2 ;DP指针指向指针指向7080h-70FFh7080h-70FFh退出第29页/共40页 LACL PCDATDIR ;PCDATDIRLACL PC
35、DATDIR ;PCDATDIR中值加载到中值加载到ACCACC OR#04040h ;IOPC6 OR#04040h ;IOPC6设置为输出方式设置为输出方式,输出值为高电平输出值为高电平 SACL PCDATDIR ;IOPC6SACL PCDATDIR ;IOPC6输出高电平输出高电平,使使74HC54774HC547的的CLKCLK为高为高 LDP#4 ;DPLDP#4 ;DP指针指向数据存储指针指向数据存储B0B0区区(200h-27Fh)(200h-27Fh)LACL io_decode_flag ;io_decode_flag LACL io_decode_flag ;io_de
36、code_flag的值加到的值加到ACCACC LDP#DP_PF2 ;DP LDP#DP_PF2 ;DP指针指向指针指向7080h-70FFh7080h-70FFh SACL PBDATDIR ;SACL PBDATDIR ;通过通过IOPB0-7IOPB0-7送出译码控制信号送出译码控制信号 LACL PCDATDIR ;PCDATDIRLACL PCDATDIR ;PCDATDIR中值加载到中值加载到ACCACC AND#0FFBFh ;AND#0FFBFh ;保持保持IOPC6IOPC6为输出方式为输出方式,输出低电平输出低电平,;关闭关闭74HC57474HC574 SACL PCD
37、ATDIR SACL PCDATDIR CALL cy_delay ;CALL cy_delay ;调延时程序调延时程序 LDP#4 ;DPLDP#4 ;DP指针指向数据存储指针指向数据存储B0B0区区(200h-27Fh)(200h-27Fh)SPLK#0h,io_decode_flag ;SPLK#0h,io_decode_flag ;对程序中的各种变量均清零对程序中的各种变量均清零 SPLK#0h,output_flag ;SPLK#0h,output_flag ;用来保证本次结果不会影响用来保证本次结果不会影响 ;到下次操作到下次操作退出第30页/共40页 SPLK#0h,flag_t
38、emp SPLK#0h,flag_temp SPLK#0h,input_flag SPLK#0h,input_flag NOP NOP B decode_3_8_loop ;B decode_3_8_loop ;返回到程序主体返回到程序主体;(2);(2)系统初始化程序系统初始化程序system_init:system_init:SETC INTM ;SETC INTM ;禁止中断禁止中断 CLRC OVM ;ACCCLRC OVM ;ACC中的结果正常溢出中的结果正常溢出 CLRC SXM ;CLRC SXM ;抑制符号扩展抑制符号扩展 CLRC CNF ;B0CLRC CNF ;B0区被配
39、置为数据空间区被配置为数据空间 LDP#DP_PF1 ;DPLDP#DP_PF1 ;DP指针指向指针指向7000h-707Fh7000h-707Fh SPLK#081FEh,SCSR1;CLKOUT SPLK#081FEh,SCSR1;CLKOUT输出输出CPUCPU时钟,时钟,PLL=4PLL=4 SPLK#0E8h,WDCR ;WDCR6 SPLK#0E8h,WDCR ;WDCR6置置1,1,表示禁止看门狗表示禁止看门狗,;WDCR3-5=101 ;WDCR3-5=101 LDP#0 ;DP LDP#0 ;DP指向数据存储器的页指向数据存储器的页0(0000h-007Fh)0(0000h-
40、007Fh)SPLK#0000h,IMR ;SPLK#0000h,IMR ;屏蔽所有的屏蔽所有的CPUCPU中断中断退出第31页/共40页 SPLK#0FFFFh,IFR ;SPLK#0FFFFh,IFR ;清除所有的清除所有的CPUCPU中断中断 RETRET;(3)I/O;(3)I/O端口初始化程序端口初始化程序ioport_init:ioport_init:LDP#DP_PF2 ;DP LDP#DP_PF2 ;DP指向指向7080h-70FFh7080h-70FFh LACL MCRA ;IOPB0-7 LACL MCRA ;IOPB0-7配置为通用配置为通用I/OI/O口口 AND#0
41、0FFhAND#00FFh SACL MCRA SACL MCRA LACL MCRB ;IOPC6 LACL MCRB ;IOPC6配置为通用配置为通用I/OI/O口口 AND#0FFBFhAND#0FFBFh SACL MCRBSACL MCRB LACL MCRC ;IOPE1-3 LACL MCRC ;IOPE1-3配置为通用配置为通用I/OI/O口口 AND#0FFF1hAND#0FFF1h SACL MCRC SACL MCRC LACL PBDATDIR ;IOPB0-7 LACL PBDATDIR ;IOPB0-7配置为输出方式配置为输出方式退出第32页/共40页 OR#0FF
42、00h OR#0FF00h SACL PBDATDIR SACL PBDATDIR LACL PCDATDIR ;IOPC6LACL PCDATDIR ;IOPC6配置为输出方式配置为输出方式 OR#04000hOR#04000h SACL PCDATDIR SACL PCDATDIR LACL PEDATDIR ;IOPE1-3 LACL PEDATDIR ;IOPE1-3配置为输入方式配置为输入方式 AND#0F1FFh AND#0F1FFh SACL PEDATDIR SACL PEDATDIR RET RET;(4);(4)读按键程序读按键程序read_button:read_butt
43、on:CALL cy_read ;CALL cy_read ;第一次读输入按键值第一次读输入按键值 LDP#4 ;DPLDP#4 ;DP指向数据存储器指向数据存储器B0B0区区 LACL output_flag ;LACL output_flag ;第一次读的按键值存入第一次读的按键值存入flag_tempflag_temp SACL flag_temp ;SACL flag_temp ;用来和第二次读的按键值相比较用来和第二次读的按键值相比较 CALL cy_delay ;CALL cy_delay ;延迟延迟50ms50ms,用于消除按键抖动,用于消除按键抖动退出第33页/共40页 CAL
44、L cy_read ;CALL cy_read ;第二次读输入按键的状态第二次读输入按键的状态 LDP#4LDP#4 LACL output_flag LACL output_flag SUB flag_temp ;SUB flag_temp ;第二次读按键值和第一次相比较第二次读按键值和第一次相比较 BCND right_read,EQ ;BCND right_read,EQ ;两者相等转到两者相等转到right_readright_read SPLK#0,output_flag ;SPLK#0,output_flag ;若两次不等,需重新读取,若两次不等,需重新读取,;同时把同时把outp
45、ut_flagoutput_flag清清0 0right_read:right_read:NOP NOP RET RETcy_read:cy_read:LDP#DP_PF2 ;DP LDP#DP_PF2 ;DP指向指向7080h-70FFh7080h-70FFh LACL PEDATDIR ;PEDATDIR LACL PEDATDIR ;PEDATDIR加载到加载到ACC,ACC,读读IOPE1-3IOPE1-3 SFR ;ACC SFR ;ACC右移右移1 1位位,即移到即移到 ;PEDATDIF3-1 ;PEDATDIF3-1到到PEDATDIR2-0PEDATDIR2-0退出第34页/
46、共40页 AND#0007h ;AND#0007h ;提取提取PEDATDIR20PEDATDIR20 LDP#4 LDP#4 SACL input_temp ;PEDATDIR20 SACL input_temp ;PEDATDIR20存到存到input_tempinput_temp LACL#7 ;LACL#7 ;无按键按下时无按键按下时,IOPE13,IOPE13为高电平为高电平 SUB input_temp ;SUB input_temp ;减减PEDATDIR20,PEDATDIR20,以得相应的译码值以得相应的译码值 SACL output_flag ;SACL output_fl
47、ag ;译码值存到译码值存到output_flagoutput_flag RET RETCy_delay:Cy_delay:LACL#2400 ;LACL#2400 ;本例采用本例采用6MHz6MHz时钟,时钟,PLL=4,PLL=4,故系统时故系统时 ;钟为钟为24MHz24MHz Cy_delay1:;Cy_delay1:;此处采用循环等待的方法实现延时此处采用循环等待的方法实现延时 SUB#1 ;2400500/(24103)=50msSUB#1 ;2400500/(24103)=50ms RPT#499 ;RPT#499 ;循环循环500500次次 NOPNOP BCND cy_del
48、ay1,NEQ ;ACC BCND cy_delay1,NEQ ;ACC不为不为0 0时返回时返回cy_delay1cy_delay1 RET RET .END .END退出第35页/共40页 MEMORY ;MEMORY ;声明可以被使用的存储器范围声明可以被使用的存储器范围 PAGE0:;PAGE0:;程序空间程序空间 VECS:origin=0000h,length=0040h ;VECS:origin=0000h,length=0040h ;中断向量存储空间中断向量存储空间 PVECS:origin=0044h,length=0100h ;PVECS:origin=0044h,leng
49、th=0100h ;外设中断子向量外设中断子向量 PM:origin=0150h,length=7EB0h ;PM:origin=0150h,length=7EB0h ;片内片内FlashFlash存储空间存储空间PAGE1:;PAGE1:;数据空间数据空间 BLOCK_B2:origin=0060h,length=0020h;BLOCK_B2:origin=0060h,length=0020h;块块B2B2 BLOCK_B0:origin=0200h,length=0100h;BLOCK_B0:origin=0200h,length=0100h;块块B0,B0,若若CNF=0,CNF=0,;
50、则配为则配为DARAMDARAM BLOCK_B1:origin=0300h,length=0100h;BLOCK_B1:origin=0300h,length=0100h;块块B1,B1,若正确配若正确配 ;置置SCSR2,SCSR2,则为数据空间中则为数据空间中2K2K的的SARAMSARAM SARAM:origin=0800h,length=0800h SARAM:origin=0800h,length=0800h EX_DM:origin=8000h,length=8000h ;EX_DM:origin=8000h,length=8000h ;片外数据片外数据RAMRAM 3 3系统