【教学课件】第8章数字量IO模块.ppt

上传人:牧羊曲112 文档编号:4879279 上传时间:2023-05-21 格式:PPT 页数:54 大小:324.50KB
返回 下载 相关 举报
【教学课件】第8章数字量IO模块.ppt_第1页
第1页 / 共54页
【教学课件】第8章数字量IO模块.ppt_第2页
第2页 / 共54页
【教学课件】第8章数字量IO模块.ppt_第3页
第3页 / 共54页
【教学课件】第8章数字量IO模块.ppt_第4页
第4页 / 共54页
【教学课件】第8章数字量IO模块.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《【教学课件】第8章数字量IO模块.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第8章数字量IO模块.ppt(54页珍藏版)》请在三一办公上搜索。

1、第8章 数字量I/O模块,8.1 数字量I/O端口概述,F2407系列有41个通用、双向的数字量I/O(GPIO)引脚,其中大多数都是基本功能和一般I/O复用引脚。,9个16位控制寄存器:设置专用I/O和复用I/O引脚的功能。,I/O端口复用控制寄存器(MCRx)数据和方向控制寄存器(PxDATDIR),控制寄存器,I/O端口复用控制寄存器(MCRx):选择I/O端口作为基本功能方式还是一般I/O引脚功能。,数据和方向控制寄存器(PxDATDIR):当I/O端口用作一般I/O引脚功能时,用数据和方向控制寄存器可控制数据和双向I/O引脚的数据方向。,8.2 数字量I/O端口寄存器,1.数字量I/

2、O控制寄存器地址,寄存器映射到存储器数据空间,地址为7090h709Fh。,复用引脚配置图,8.2.1 I/O端口复用输出控制寄存器,1I/O端口复用控制寄存器A(MCRA)地址7090h,I/O端口复用控制寄存器A(MCRA)配置,2I/O口复用控制寄存器B(MCRB)地址7092h,I/O端口复用控制寄存器B(MCRB)配置,注意:,斜体表示的位必须配置成1,这几个引脚是系统的专用引脚,用作与硬件仿真器接口(JTAG)相连,实现DSP的在线仿真功能。对以上的任一位写0将会引起不可预测的结果。寄存器单元中保留的位是无效的,读时为0,写对它无影响。,3I/O口复用控制寄存器C(MCRC)地址7

3、094h,I/O端口复用控制寄存器C(MCRC)配置,8.2.2 I/O端口数据和方向寄存器,F2407系列共有6个数据和方向控制寄存器(PxDATDIR)。数据和方向控制寄存器:可控制数据和到双向通用I/O引脚的数据方向。寄存器直接与I/O引脚相连。当I/O用作基本功能时,寄存器的设置对相应的引脚无影响。,1端口A数据和方向控制寄存器(PADATDIR)地址7098h,位158AnDIR0 配置相应的引脚为输入方式1 配置相应的引脚为输出方式位70IOPAn当AnDIR=0,即引脚为输入方式时0 读相应引脚的值为低电平1 读相应引脚的值为高电平当AnDIR=1,即引脚为输出方式时0 设置相应

4、的引脚,使其输出为低电平;1 设置相应的引脚 使其输出为高电平。,如果I/O端口用作一般I/O,则在对端口初始化时就必须对数据和方向控制寄存器进行设置,规定其为输入还是为输出。,2端口B数据和方向控制寄存器(PBDATDIR)地址709Ah,3端口C数据和方向控制寄存器(PCDATDIR)地址709Ch,4端口D数据和方向控制寄存器(PDDATDIR)地址709Eh,5端口E数据和方向控制寄存器(PEDATDIR)地址7095h,6端口F数据和方向控制寄存器(PFDATDIR)地址7096h,8.3 I/O端口应用,例:循环点亮8个发光二极管,工作原理74HC273用于驱动8个发光二极管。CL

5、R接F2407的复位引脚,使在复位时74HC273输出为低电平,不点亮发光二极管。F2407的IOPCA3、IOPCA4及IOPCA5分别接74LVC138的A、B及C输入,通过它的选通CLK作为74HC273的控制信号;当输出为高时,74HC273的输出有效即输出信号反映输入的内容;当输出为低时,输出无效即输入变化时输出不变。用IOPB端口来控制发光二极管的亮灭:某位为高则相应的LED发光;某位为低则相应的LED熄灭。,软件设计,先向IOPB端口发送需要显示的数据,再通过发送一个脉冲,循环点亮8个发光二极管。用软件延时的方法来调节发光二极管的延时间隔。,汇编语言,IOSFT_REG.usec

6、t.data0,1;要显示的数据寄存器.include“F2407REGS.H”;引用头部文件.def _c_int0.text,1.主程序,_c_int0:;相当于主程序的入口CALLSYSINIT;调系统初始化程序LDP#DP_PF2;指向7080h7100h区LACLMCRAAND#000FFH;IOPB端口配置为一般I/O功能SACLMCRALACLMCRAAND#0FF00H;IOPA 配置为一般I/O功能SACLMCRA LACLPBDATDIROR#0FF00H;IOPB端口设置为输出方式SACLPBDATDIR LACLPADATDIROR#0FF00H SACLPADATDI

7、R;IOPA 设置为输出方式LDP#5H;指向0280h0300h区SPLK#80H,IOSFT_REG;给显示的数据赋初值,LOOP:LDP#DP_PF2LACLPADATDIRAND#0FFC7H;138 select ch0,ledclk=1 SACLPADATDIR;开74HC273片选信号LDP#5HLACLIOSFT_REGLDP#DP_PF2 OR#0FF00HSACLPBDATDIR;送要显示的数据到IOPB端口LACLPADATDIROR#0038H;138 select ch7,ledclk=0SACLPADATDIR;关74HC273片选信号CALLDELAY;调延时程序

8、LDP#5HLACLIOSFT_REGBITIOSFT_REG,BIT0;是否循环完一次(已点亮第8个发光二极管)ROR;左移一位SACLIOSFT_REGBCNDLOOP1,TCBWAITLOOP1:LDP#5HSPLK#80H,IOSFT_REG;如循环完一次则显示数据赋初值WAIT:NOPBLOOP,系统初始化程序,SYSINIT:SETC INTM CLRC SXM CLRC OVMCLRC CNF;B0 被配置为数据存储空间 LDP#0E0HSPLK#81FEH,SCSR1;CLKIN=6 M,CLKOUT=24 M SPLK#0E8H,WDCR;不使能WDTLDP#0SPLK#00

9、00H,IMR;不使能SPLK#0FFFFH,IFR;清全部中断标志RET,软件延时程序,DELAY:MAR*,AR4LARAR4,#0FFFEHLARAR0,#00HDELAY1:SBRK#1NOPCMPR00BCNDDELAY1,NTC RET,C语言,说明:(1)程序中所有与DSP硬件有关的寄存器都用指针方式寻址。(2)SXM、OVM、CNF和INTM等的位操作嵌入汇编语句。(3)寄存器PBDATDIR:高8位是IOPB端口数据流动方向的设置,设置完成后一般不再改变;低8位是数据内容,改变其内容,则可实现LED的循环显示。(4)移位的实现:其程序中设置了一个寄存器led,其高8位为0,低

10、8位存储需要显示的数据。用C语言指令led=led1 实现数据右移一位。(5)每次须改变LED的显示内容时,用指令PBDATDIR=PBDATDIR&0 x0FF00屏蔽掉其数据位,再用指令PBDATDIR=PBDATDIR|led把需要显示的数据赋给IOPB端口即可。,#include register.h main()/初始化子程序 int led;int i,k;asm(setcSXM);/抑制符号位扩展 asm(clrcOVM);/累加器中结果正常溢出 asm(clrcCNF);/B0被配置为数据存储空间 asm(setcINTM);/禁止所有中断*SCSR1=0 x81FE;/CLK

11、IN=10M,CLKOUT=4*CLKIN=40M*WDCR=0 x0E8;/不使能看门狗,因为SCSR2中的WDOVERRIDE/可以用软件禁止看门狗*IMR=0 x0000;/禁止所有中断*IFR=0 x0FFFF;/清除全部中断标志,写1清0*MCRA=*MCRA/IOPA3,IOPA4,IOPA5 设置为输出方式,/且LEDCLK=1,while(1)for(led=0 x0080,i=0;i1,i+)*PBDATDIR=*PBDATDIR,void interrupt nothing()return;,直接返回中断服务程序,8.3.2 键盘与发光二极管配合使用程序,硬件说明:有8个键

12、和8个发光二极管,键盘的值先用IOPB端口直接读取,即相应的I/O用作输入方式;把IOPB端口作为输出方式去点亮8个发光二极管。键盘K1K8分别对应于I/O端口IOPB0IOPB7。按下8个键盘中的某个按键则相应的第几个发光二极管点亮。,软件说明用查询的方式来读取键值;当S1键按下时,点亮发光二极管LED0;S1键对应的输入I/O引脚为IOPB0,在IOPB0作为一般I/O输入的情况下,如S1键按下则端口B数据和方向控制寄存器(PBDATDIR)的第0位为0;经过延时消抖动后如PFDATDIR.0仍为0则表示S1键按下;程序中如S1键按下,就点亮发光二极管LED0。,1汇编程序,KEYXS.u

13、sect.data0,1;LED显示的数据KEYDATA.usect.data0,1;前次LED显示的数据DP_USER.set5.include F2407REGS.H;引用头部文件.def _c_int0,(2)主程序,.text_c_int0 CALLSYSINIT;调系统初始化程序LDP#DP_USER;指向0280h0300h区SPLK#0000H,KEYXS;给要显示的数据赋初值 B LED;使LED全部熄灭LOOP:CALLKEY;调键盘程序,即扫描键盘LED:LDP#DP_PF2;选数据页LACL PADATDIR;将PADATDIR装载到ACC的低16位OR#00038H;L

14、EDCLK=0SACLPADATDIR;开74HC273片选信号LDP#DP_USERLACLKEYXSOR#0FF00H;IOPB端口为输出方式,LDP#DP_PF2SACLPBDATDIR;送要显示的数据到IOPB端口LACL PADATDIROR#0ff10H;LEDCLK=1AND#0ff10HSACL PADATDIR;关74HC273片选信号CALL KEYDELAYWAIT:RPT#7;延时 NOPBLOOP;跳转,循环查键,(3)系统初始化程序,SYSINIT:SETC INTM CLRC SXM SETC OVM CLRC CNF;B0 被配置为数据存储空间 LDP#0E0H

15、 SPLK#81FEH,SCSR1;CLKIN=6 MHz,CLKOUT=24 MHz SPLK#0E8H,WDCR;不使能看门狗 WDT LDP#0SPLK#0000H,IMR;不使能中断SPLK#0FFFFH,IFR;清全部中断标志RET,(4)键盘初始化程序,KEYINIT:LDP#DP_PF2LACLMCRAAND#000c7H;IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能SACLMCRALACLPBDATDIRAND#0000H;IOPB端口设置为输入方式SACLPBDATDIRLACLPADATDIROR#0FF10H;IOPA3,IOPA4,IOPA5设

16、置为输出方式,且KEYC=1AND#0FF10HSACLPADATDIRRET,(5)键盘程序,KEY:CALLREADKEY;调读键程序LACLKEYXSBCNDKEY,EQ;没有键按下跳转到KEY,循环查键CALLKEYDELAY;延时消抖动CALLREADKEY;再一次读键值LACLKEYXSBCNDKEY,EQ;没有键按下跳转到KEY,循环查键 B LED;有键按下,跳转到LED,进行显示,(6)读键子程序,READKEY:CALLKEYINIT;调键盘初始化程序 LDP#DP_PF2 LACLPBDATDIR;取出键值PBDATDIR.0PBDATDIR.3 OR#0FF00H;屏蔽

17、高8位 CMPL;取反 LDP#DP_USER SACLKEYXS;存放键值 RET;返回,(7)用软件延时30mS消抖动,KEYDELAY:LACC#6000KEYD1:SUB#1 RPT#80 NOP BCND KEYD1,NEQ RET,(10)假中断程序,PHANTOM KICK_DOG;复位看门狗RETEND,2C语言程序,#include register.h int j,k;main()/初始化子程序 asm(setcSXM);/抑制符号位扩展asm(clrcOVM);/累加器中结果正常溢出asm(clrcCNF);/B0被配置为数据存储空间asm(“setcINTM”);/禁止

18、所有中断SCSR1=0 x81FE;/CLKIN=10MHz,CLKOUT=4xCLKIN=40MHzWDCR=0 x0E8;/不使能看门狗,可以用软件禁止看门狗,IMR=0 x0000;/禁止所有中断IFR=0 x0FFFF;/清除全部中断标志,写1清0MCRA=MCRA/IOPA3,IOPA4,IOPA5 设置为输出方式,选通KEYC,while(1)PBDATDIR=PBDATDIR,if(k=1)k=PBDATDIR/按下S8点亮LED7,default:PBDATDIR=PBDATDIR;PADATDIR=PADATDIR|0 x0FF38;PADATDIR=PADATDIR,/直接

19、返回中断服务程序void interrupt nothing()return;,8.3.3 光电隔离的8路开关量输入与8路开关量输出电路,用DSP的I/O端口IOPB07与74LVC245构成8路开关量输入通道;DSP 的I/O端口IOPB07与74HC273锁存器构成8路开关量输出通道;DSP的I/O端口IOPA35作为74LVC138的输入信号;该信号经138译码后输出一个信号来使能74LVC245从而控制I/O端口IOPB07输入8路开关量信号;或者经138译码后输出一个信号来控制74HC273锁存器从而使I/O端口IOPB07输出8路开关量信号锁存到74HC273的寄存器中。,说明调试

20、时,可以适当地选择连接光电耦合二极管串联的电阻值,使光电耦合器件可靠导通,实现不同电压等级下的电平匹配与电气隔离,从而模拟实际控制过程中的光电隔离型开关量输入。光电耦合器件的VIN接5V电平;IN07为8路开关量输入;OUT07为8路开关量输出;开关量输入为低电平时,输出也为低电平信号。,F2407与光电隔离的8路开关量输入输出接口电路,C语言源程序,#include register.h int j,k;main()asm(setcSXM);/抑制符号位扩展asm(clrcOVM);/累加器中结果正常溢出asm(clrcCNF);/B0被配置为数据存储空间asm(setcINTM);/禁止所有中断SCSR1=0 x81FE;/CLKIN=10MHz,CLKOUT=4xCLKIN=40MHzWDCR=0 x0E8;/不使能看门狗,可以用软件禁止看门狗IMR=0 x0000;/禁止所有中断IFR=0 x0FFFF;/清除全部中断标志,写1清0MCRA=MCRA/IOPA3,IOPA4,IOPA5 设置为输出方式,且 IOINEN=1,选通8路开关量输入,while(1)PBDATDIR=PBDATDIR/IOPA3,IOPA4,IOPA5 设置为输出方式,且IOINEN=1,选通8路开关量输入,/中断服务程序直接返回void interrupt nothing()return;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号