首页电子与通信技术信息处理技术数字信号处理器DSP原理与应用 05 第五章 数字输入输出IO.pptx

05 第五章 数字输入输出IO.pptx

页数:85页文件大小:852.0 KB来源: 数字信号处理器DSP原理与应用ppt课件

本课件说明TMS320LF240x数字输入输出端口的基本结构,区分专用引脚与复用引脚,解析I/O复用控制寄存器(MCRx)与数据方向控制寄存器(PxDATDIR)各位的定义,并结合实例给出通用I/O口的初始化与读写操作流程。

第5章数字I/O封面,标示本章主题与主要内容框架
只I/O引脚,大部分是复,41只I/O引脚,大部分是复用的
控制寄存器分为两类:1I/O复用控制寄存器(MCRx),用来选择I/O脚是片内外设功能还是通用I/O功能
查看本课件的文字版(共 85 页,供检索与复制)

第1页:第5章数字I/O封面

DSP原理与应用

第2页:只I/O引脚,大部分是复

  • 41只I/O引脚,大部分是复用的。
  • DSP复位时,大部分I/O引脚会被上拉为数字输入的模式。
  • 数字I/O脚有专用和复用之分。其功能可通过9个16位控制寄存器来控制

第3页:控制寄存器分为两类

控制寄存器分为两类
1I/O复用控制寄存器(MCRx),用来选择I/O脚是片内外设功能还是通用I/O功能;2数据方向控制寄存器(Px DATDIR):用来控制双向I/O脚的数据传送方向。注意:上述数字I/O脚是通过控制寄存器(映射在数据存储器空间)来控制的,与器件的I/O空间无任何关系

第4页:5.1 数字I/O寄存器简介I/O复

用引脚的结构见图。由图可看出复用I/O引脚如何实现来引脚功能选择和数据传送方向选择的

第5页:字I/O控制寄存器功能寄存器地址I/O

复用控制寄存器AMCRA7090hI/O复用控制寄存器BMCRB7092hI/O复用控制寄存器CMCRC7094hI/O端口A数据和方向寄存器PADATDIR7098hI/O端口B数据和方向寄存器PBDATDIR709 AhI/O端口C数据和方向寄存器PCDATDIR709 ChI/O端口D数据和方向寄存器PDDATDIR709 EhI/O端口E数据和方向寄存器PEDATDIR7095hI/O端口F数据和方向寄存器PFDATDIR7096h

第6页:保留位是不可操作

保留位是不可操作的,读出为0,写入对它无影响。注意:当复用I/O脚无论是被配置为外设功能还是为通用I/O时,引脚的状态都可通过读I/O数据寄存器来获取

第7页:75.2 I/O端口复用控制寄3个I/O

I/O端口复用控制寄3个I/O端口复用控制寄存器:MCRA、MCRB、MCRC。1I/O端口复用控制寄存器A,映射地址:7090h2I/O端口复用控制寄存器B,映射地址:7092h3I/O端口复用控制寄存器C,映射地址:7094h

第8页:

第9页:

第10页:

第11页:

第12页:

第13页:

第14页:52407/2407A有x

  • 1452407/2407A有x DATDIR),控制引脚的两个功能位。
  • I/O方向位如果引脚被选择通用I/O,方向位决定了该引脚是作输入(0)还是输出(1)。
  • I/O数据位如果引脚被选择了通用I/O,当方向选为输入,则可从该位上读取数据,当方向选为输出,则可向该位写入数据

第15页:当I/O端口被选择作通用I/O引控制数据

当I/O端口被选择作通用I/O引控制数据和I/O引脚的数据方向。如果I/O端口被选择作外设功能置对相应的引脚无影响。下面详细1)I/O端ADATDIR),映射地址:7098h,格式如下。

位15-8:An DIRPA7-PA0的数据方向0-相应引脚配置为输入1-相应引脚配置为输出

第16页:位7-0:IOPAn如果

AnDIR=0,引脚配置为输入平如果AnDIR=1,引脚配置为输出平当引脚选择为通用I/O功能时,那么I/O端ADATDIR)的数据位与对应的I/O

第17页:如果I/O端口用作通用I/O

如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,规定其为输入端口还是输出端口。(2)I/O端BDATDIR),映射地址:709AhI/O端式如下。

位15-8:Bn DIRPB7-PB0的数据方向0-相应引脚配置为输入1-相应引脚配置为输出

第18页:位7-0:IOPBn如果

BnDIR=0,引脚配置为输入方式平如果BnDIR=1,引脚配置为输平时有平时有效

第19页:(3)I/O端CDATDIR)

(3)I/O端CDATDIR),映射地址:709ChI/O端式如下。位15-8:Cn DIRPC7-PC0的数据方向0-相应引脚配置为输入1-相应引脚配置为输出位7-0:IOPC7-IOPC0如果CnDIR=0,引脚配置为输入平

第20页:如果BnDIR=1

如果BnDIR=1,引脚配置为输平(4)I/O端DDATDIR),映射地址:709EhI/O端式如下。位15-9:保留位位8:D0DIR0-相应引脚配置为输入1-相应引脚配置为输出

第21页:位7-1:保留位0

位7-1
保留位0:IOPD0如果D0DIR=0,引脚配置为输入平如果D0DIR=1,引脚配置为输平时有平时有效

第22页:(5)I/O端EDATDIR)

(5)I/O端EDATDIR),地址:7095hI/O端式如下位15-8:EnDIR0-相应引脚配置为输入1-相应引脚配置为输出位7-0:IOPEn如果EnDIR=0,引脚配置为输入平

第23页:如果EnDIR=1

如果EnDIR=1,引脚配置为输平时有平时有效

第24页:I/O端FDATDIR)

I/O端FDATDIR),映射地址:7096hI/O端式如下。位15:保留位位14-8:EnDIR0-相应引脚配置为输入1-相应引脚配置为输出

第25页:位7-0:IOPFn如果

FnDIR=0,引脚配置为输入平如果FnDIR=1,引脚配置为输出0-设置相应引脚,使输出为低电平有效1-设置相应引脚,使输出为高电平有效当引脚选择为通用I/O功能时,那么I/O端口E数据和方向控制

第26页:下面为一个基本的数字I/O配置实例的汇编

265.4数字I/O端口配置实例在使用数字I/O之前,需用软件对数字I/O进行配置,选择I/O引脚的功能,且设置I/O引脚的数据方向,然后才可以读取数据或输出数据。

下面为一个基本的数字I/O配置实例的汇编源程序。读者可参照此程序,来配置其它的任何数目的数字I/O

第27页:MCRA.set7090h;可将这些映射

语句放于240x.h文件中PADATDIR.set7098h;可将这些映射语句放于240x.h文件中PBDATDIR.set709 Ah;可将这些映射语句放于240x.h文件中LDP#0E1h LACC#0h SACLMCRA;指向相应的数据页面;设置MCRA所有位均为0;将引脚IOPA0-7和IOPB0-7配置为I/O引脚SACLPADATDIR;引脚IOPA0-7配置为输入,低电平有效LACC#0F00h SACLPBDATDIR;引脚IOPB7-IOPB4配置为输入;引脚IOPB3-IOPB0配置为输出LACCPBDATDIRAND#00F0h;读取引脚IOPB7-IOPB4的输入状态;A为输入状态

第28页:上面为一个数字I/O的实际配置程序

上面为一个数字I/O的实际配置程序,对于每个寄存器的定义可以参考前面的介绍。5.数字I/O应用实例1.使用数字I/O查询输入信号(汇编)通常可以配置数字I/O为输入或输出,以便于与外设进行信息交换。

本例为使用数字I/O端口来查询外界信号输入情况,硬件接口电路如图所示

第29页:

第30页:为抗干扰,外界输入信号需要加光耦隔离

为抗干扰,外界输入信号需要加光耦隔离,以便获得符合LF2407/2407A要求的信号。本例使用PWM3。I/O初始化需设置引脚为I/O功能,且需要选择信号方向。下面为读取输入信号的例程

第31页:*文件名:INPUT.

asm*.includ“240xA.h” ;变量和寄存器定义.includ“vector.h” ;中断向量表定义2块的变量定ss INDATA,1;I/O输入值判断变量.bss GPR0,1;通用目标寄存代

第32页:第5章数字I/O要点

text NOPSTART:;屏蔽除INT2-4以外的其它中断#000Eh,IMRSPLK;读中断标志IFRLACC;清除中断标志IFRSACL;配置块B0到数据存储空间CNFCLRC;数据页指向7000h~707Fh#00E0h LDPSPLKLDPSPLK#06Fh,WDCR;如VCCP=5V,则禁止看门狗#SCSR1>>7#0000,SCSR1

第33页:#00E1h;数据页指向7080h~70

FFh#0F00h,MCRA;配置I/O,选择IOPB0~IOPB3#0000h,PBDATDIR;配置为输入模式#0LDPSPLKSPLKLDPSPLK#0,GPR0;为程序存储器空间设置;0~7个等待状态OUTGPR0,WSGRKICK_DOGINTM;复位看门狗;使能DSP中断CLRCST_LOOP1LDP#00E1h

第34页:LACCLDPSACLPBDATDIR#

INDATAINDATABITINDATA,BIT0;判断IOPB0是否有输入信号,如;有则跳到ST_LOOP2BCNDST_LOOP2,TCBST_LOOP1ST_LOOP2LDPLACCLDP#00E1h PBDATDIR#INDATA

第35页:SACLINDATABITINDATA,

BIT1;判断IOPB1是否有输入信号,如有;则跳到ST_LOOP3BCNDST_LOOP3,TCBST_LOOP2ST_LOOP3LDPLACCLDPSACL#00E1h PBDATDIR#INDATAINDATA

第36页:BITINDATA,BIT3;判断

IOPB3是否有输入信号,如有;则跳到MAINMAIN,TCBCNDBST_LOOP4MAIN:NOPBMAIN.end

第37页:输出引脚与LED之间接一触发器

375.5.2使用数字I/O输出信号(汇编)使用I/O端口输出4个信号,这4个信号分别连接到4个LED,硬件接口电路如图所示。输出引脚与LED之间接一触发器SN74HCT273,来实现对LED的驱动。

在此使用PWM,而PWM273的输出信号。下面的实例程序实现对4个LED的循环驱动,即LED循环发光,即DS0DS1DS2DS3DS0

第38页:

第39页:件名

件名
OUTPUT.asm*.include“240xA.h” ;变量和寄存器定义.include“vector.h” ;中断向量表定2块的变量定ss OUTDATA,1;I/O输出代

第40页:第5章数字I/O要点

text NOPSTART:SPLK#000Eh,IMR;屏蔽除INT;其它中断;读中断标志IFRLACC;清除中断标志IFRSACL;配置块B0到数据存储空间CNFCLRC;数据页指向7000h~707Fh#00E0h LDPSPLKLDPSPLK#06Fh,WDCR;如果VCCP=5V,则禁止看门狗#SCSR1>>7#0000,SCSR1

第41页:CLRCINTM;

使能DSP中断41LDPSPLKSPLKSPLKSPLKLDPSPLKOUT#00E1h;数据页指向7080h~70FFh#0F00h,MCRA;配置I/O,选择IOPB0~IOPB3#0F00h,PBDATDIR;配置为输出模式#0002h,MCRC;配置I/O,选择IOPE1#0200h,PEDATDIR;配置为输出模式#0#0h,GPR0;为程序存储器空间设置等待发生;器,0~7个等待状态GPR0,WSGRKICK_DOG;复位看门狗

第42页:#0#1,OUTDATA;给输出变量赋值

#00E1h PEDATDIR#0202h;输出到IOPE1,选通SN74HCT273PEDATDIRMAIN:LDPSPLKLDPLACCORSACLST_LOOPLDPLACLOR#0h OUTDATA#0F00h

第43页:#00E1hPBDATADIR;输出信号

#00E1h PBDATADIR;输出信号到LEDDELAY;延时OUTDATA;左移1位LDPSACLCALLLACLSFLSACLBITOUTDATA;OUTDATA,BIT4;判是否完成了一个循环,如;是则跳到MAIN,重复开始MAIN,TCBCNDBST_LOOP.end

第44页:DELAY

:;延时子程序#01h LARAR0,D_LOOP:;延时参数可按需要进行修改#FFh RPTNOPD_LOOPBANZRET

第45页:I/O端口作为输出455.5.3使用数字

I/O输出信号(C语言)

第46页:源程序代c__

源程序代c_int0,_nothi_c_int0_nothingb_nothing.title.ref.sectreset:int1:int2:int3:int4:int5:int6:bb

第47页:(2)主程序//该程序用于实验演示模板

上的8个LED的循环初始化子F"抑制符号位禁止所有中断

第48页:MR=0x00/即

MR=0x00/即WD保护位复位后禁止看

第49页:*MCRA=*MC/IOPB端口配置

为一般的//I/O功/端口均为8位,MCRA为16//位因此控制了IOPA,和IOPB的00;//IOPB端口设置为输出mp;0X0FBFF;//把IOPF2端口配置为一般I/O;

//熄灭全部的LE4;//IOPF2设置为输出方式,且//IOPF2;//IOPF2=0//以上的操作产生一个脉冲,//使LED全部熄灭}

第50页://定义一个局部变量//定义其它一些临时

//定义一个局部变量//定义其它一些临时变量//系统初始化tled;inti,

第51页:for

(led=0x0080,i=0;i<8;led=led>>1,i++;//首先屏蔽IOPB的ed;//把需要显示的值赋给IOPB4;//IOPF2设置为输出方式,且//IOPF2=151//IOPF2=0,这两句语;

一个脉冲,使LED上显示IOPB端口的值for(k=0;k<0x0ffff;k++)k=k;//为了保证显示时间,给一定时间的延时}}}

第52页:

第53页:5.5.4 使用数字I/O输入和输出

使用数字I/O输入和输出(C语言)

第54页:I/O端口作为输入和输出使用源程序代码前

I/O端口作为输入和输出使用源程序代码前。在这以后的所有例程中,如果没有特别说相同的。2主程序//该程序用于键盘的识别,按键情况通过LED表示.

第55页:初始化子//抑制符号位扩展

SXM");asm("se即WD保护位复软件禁止看门狗

第56页:*IMR=0x00CRA=*MCIOPB

端口配置为一般的I/O00;//IOPB端口设置为输出mp;0x03F0;//IOPF2端口和IOPF3~6配置为//一般的I/O功能//IOPF2端口为输出端口,//IOPF3-IOPF6为输入;

//熄灭全部的LE4;//IOPF2设置为输出方式,且//IOPF2;//IOPF2=0//以上的操作产生一个//脉冲,使LED全部熄灭}

第57页://定义局部变量//读入键盘状态并屏蔽掉

相应的位57//屏蔽中tkeyscan(){intk,j8;if(k==0x0078)k=0;elsek=1;if(k==1)//有键按下,则k=1//若无键按下,则直接返回

第58页:{for

(j=30000;j>0;j--)j=j;//若有键按下,则延时消抖8;//读入键盘状态并屏蔽掉相应的位if(k==0x0078)k=0;58//有还有键按下,则k=1elsek=1;}return(k);//返回K值}

第59页://键服务子程序59

intkeyserve(){intk;//定义局部变量//读入键盘状态并屏蔽掉相应的8;switch(k){case0x007)|0X0001;break;//若按下K1键,则显示“1”case0x006)|0X0002;

break;//若按下K2键,则显示“2”case0x005)|0X0003;break;//若按下K3键,则显示“3”case0x003)|0X0004;break;

//若按下K4键,则显示"4"defaul

第60页://IOPF2设置为输//出方式

4;//IOPF2设置为输//出方式,且IOPF2;//IOPF2=0//以上给一个脉冲,使B端口的值显示出来60}main(){disable(屏蔽所有中断//系统初始化

第61页:while(1){61//定义局部变量

inti;i=0;i=keyscan();if(i==1)keyserve();//键盘扫描,若有键按//下,则返回值为"1",否则返回值为"0"//如果有键按下,则进行键服务程序}}//直接返回中断服

第62页:显示数据移位寄存器;延时计数寄存器;I/

O临时数据缓冲区;LED显示的数据".data0",1".data0",1".data0",1".data0",1.usect.usect.usect.usect IOSFT_REGIO_COUNTIO_DATALEDXS;LED显示标志寄存器".data0",1.usect LEDFLAG;K1标志寄存器".data0",1.usectK1FLAG;读得键盘值存放寄存器".data0",15.usect.set KEYDATADP_USER62.include"F2407REGS.H";引用头部文件.def_c_int05.5.5使用数字I/O输入和输出(汇编语言)键盘与发光二极管配合使用程序

第63页:(1)建立中断向量表63;定义主向ct1

;PM0 Reset VectorB_c_int0RSVECT4;PM2 Intlevel1BPHANTOMINT15;PM4 Intlevel2BGISR2INT26;PM6 Intlevel3BPHANTOMINT37;PM8 Intlevel4BPHANTOMINT48;PMAIntlevel5BPHANTOMINT59;PMCIntlevel6BPHANTOMINT610;PME(Analysis Int)BPHANTOMRESERVED—;PM1PHANTOMSW_INT8…—;PMPHANTOMSW_INT31

第64页:中断子向量入口定义

pvecs64PVECTORSBBBB.sect".pvecs";定义子向量段BPHANTOM;Reservedpvectoraddroffset-0000h BPHANTOM;Reservedpvectoraddroffset-0001h…PHANTOM;Reservedpvectoraddroffset-0026hT1GP_ISR;Reservedpvectoraddroffset-0027hT1PINT中断PHANTOM;Reservedpvectoraddroffset-0028h…PHANTOM;Reservedpvectoraddroffset-0041h

第65页:(2)主程序.text_c_

int0CALL65SYSINITCALL;调系统初始化程序;调键盘和LED初始化程序;指向0280h~0300h区;寄存器和标志初始化#DP_USER #01H,IOSFT_REG #00H,IO_COUNT#001H,IO_DATA#001H,LEDXSKEYLEDINITLDPSPLKSPLKSPLKSPLKSPLKSPLKCLRCINTM#00H,LEDFLAG;LEDFLAG.0=1表示K1,K2,K3按下;LEDFLAG.0=0表示K4按下#01H,K1FLAG;开总中断

第66页:调键盘程序,即扫描键盘

CALLKEYLOOP
#DP_USERLDPLEDFLAG,15BIT66BCNDLEDBD1,TCLACLIO_COUNTSUB#03E8HBCNDWAIT,LEQ;判10s延时到否LEDBD1:SPLKLDP#00H,IO_COUNT#DP_PF2LACLPFDATDIROR#0404H;IOPF2=1

第67页:SACL67;开74HC273片选信号

PFDATDIRLDP#DP_USER;IOPB口为输出方式;送要显示的数据到IOPB口LACLLEDXSORLDPSACLLACL#0FF00H#DP_PF2PBDATDIRPFDATDIR;IOPF2=0#0FFFBHAND;关74HC273片选信号PFDATDIRSACL#DP_USERLDPLEDFLAG,15BITLEDBD2,TCBCNDLEDXSLACLSFL

第68页:IOSFT_REG68;判是否循环完一次

SACLLEDXSLACLSFLSACLBITBCNDB;赋初值IOSFT_REGIOSFT_REG,BIT8LOOP1,TCWAIT#DP_USER#01H,IOSFT_REGLACLIO_DATALEDXSLOOP1:LDPSPLKLEDBD2:SACLWAIT:NOPBWAIT

第69页:(3)系统初始化程序

SYSINIT
69SETCINTMCLRCSXMCLRCOVMCLRCCNF;B0区被配置为数据空间;指向7000h~7080h区;时钟4倍频,CLKIN=6M,;CLKOUT=24M#0E0H#81FEH,SCSR1LDPSPLK#0E8H,WDCR;不使能WDTSPLK#0LDP#02H,IMR;使能中断优先级INT2SPLK#0FFFFh,IFR;清中断标志SPLK

第70页:指向7400h~7480h区#

DP_EVALDP;使能T1PINT中断#80H,EVAIMRASPLK;清EVA中断标志#0FFFFh,EVAIFRASPLK#0,GPTCONASPLK;使定时器每10ms产生;一次中断#0EA6H,T1PRSPLK#0,T1CNTSPLK;设置通用定时器1#0164CH,T1CONSPLKRET74)键盘和发光二极管初始化程序#DP_PF2KEYLEDINIT:LDPLACLMCRC

第71页:IOPF2,IOPF[3~6]配置为一般

的I/O口71;IOPB[0~7]配置为一般的I/O口;IOPF2为输出方式;IOPF[3~6]为输入方式;IOPB[0~7]为输出方式AND#083FFHSACLMCRCLACLMCRAAND#000FFHSACLMCRALACLPFDATDIROR#0400HAND#08787HSACLPFDATDIRLACLPBDATDIROR#0FF00HSACLPBDATDIRRET

第72页:(5)键盘程序KEY

(5)键盘程序KEY
72;调读键程序READKEYCALLKEYDATALACL;ACC=0?KEYRET,EQBCND;延时消抖动KEYDELAYCALL;再一次读键值READKEYCALLKEYDATALACLKEYRET,EQBCND;判断按键情况#DP_USERLDPKEYDATA,15BITKEY2,NTCBCND;功能键按下K1CALLKEYRETB

第73页:"+"键按下73;移位键按下KEY2

"+"键按下73;移位键按下KEY2:BITBCNDCALLBKEY3:BITBCNDCALLBKEY4:BITBCNDCALL;确认键按下KEYRET:LACLANDKEYDATA#0FFF0H;清读取的键值寄存器SACLKEYDATARET第5章数字输入输出I/OKEYDATA,14KEY3,NTCK2KEYRETKEYDATA,13KEY4,NTCK3KEYRETKEYDATA,12KEYRET,NTCK4

第74页:(6)读键子程序

READKEY
74;取出键值PFDATDIR.3~PFDATDIR.6#DP_PF2PFDATDIRLDPLACL#2RPT;右移3位SFR;屏蔽高4位(用到4个键)#0FFF0HORCMPL#DP_USERLDP;存放键值KEYDATASACLRET

第75页:(7)用软件延时30

mS消抖动KEYDELAY
75#6000#1#80KEYD1,NEQLACCKEYD1:SUBRPTNOPBCNDRET

第76页:功能键子程序76;(8)4个键子程序K1

功能键子程序76;(8)4个键子程序K1:READK1:CALLKEYDELAYREADKEYCALL;判断按键K1是否松开#DP_USERLDPKEYDATA,15BITREADK1,TCBCND;可扩展成16个或更多分支#DP_USERLDP;关闭LED左移标志,即LED对;同一个数不刷新#01H,LEDFLAGSPLK;K1FLAG存放K1按键的次数相;对应的位值K1FLAG,15BIT;即K1FLAG=01,表示按了1次GN_KEY1,TCBCND;K1FLAG=02,表示按了2次K1FLAG,14BIT;K1FLAG=04,表示按了3次GN_KEY2,TCBCND

第77页:BITK1FLAG

BITK1FLAG,13BCNDGN_KEY3,TCBITK1FLAG,12BCNDGN_KEY4,TCBITK1FLAG,11BCNDGN_KEY5,TCBITK1FLAG,10BCNDGN_KEY6,TCBITK1FLAG,9BCNDGN_KEY7,TCBITK1FLAG,8BCNDGN_KEY8,TCBK1_RET

第78页:#01H,IO_DATASPLKGN_

KEY1
K1_LOOP1B#11H,IO_DATASPLKGN_KEY2:K1_LOOP1B#03H,IO_DATASPLKGN_KEY3:K1_LOOP1B#033H,IO_DATASPLKGN_KEY4:K1_LOOP1B#05H,IO_DATASPLKGN_KEY5:K1_LOOP1B#55H,IO_DATASPLKGN_KEY6:K1_LOOP1B

第79页:数字输入输出I/O第5章#07H

数字输入输出I/O第5章#07H,IO_DATASPLKGN_KEY7:K1_LOOP1B#77H,IO_DATASPLKGN_KEY8:K1_LOOP1BK1FLAGLACLK1_LOOP1:SFLK1FLAGSACLK1FLAG,7BITK1_LOOP2,TCBCNDK1_RETB#01H,K1FLAGSPLKK1_LOOP2:NOPK1_RET:RET

第80页:"+"键子程序K2

"+"键子程序K2:KEYDELAYCALLREADK2:READKEYCALL;判断按键K2是否松开#DP_USERLDPKEYDATA,14BITREADK2,TCBCND;关闭LED左移标志,#01,LEDFLAGSPLK;即LED对同一个数不刷新IO_DATALACL#1ADDIO_DATASACLRET

第81页:移位键子程序KEYDELAYCALLK3

移位键子程序KEYDELAYCALLK3:READK3:READKEYCALL;判断按键K3是否松开#DP_USERLDPKEYDATA,13BITREADK3,TCBCND#DP_USERLDP#01H,LEDFLAGSPLKIO_DATALACLSFRIO_DATASACL;C=1则IO_DATA+80hK3_LOOP1,NCBCND#80HLACLIO_DATAADDIO_DATASACLK3_LOOP1:81RET

第82页:确认键子程序82K4

确认键子程序82K4
READK4:CALLKEYDELAYCALLREADKEYLDP#DP_USER;判断按键K4是否松开BITKEYDATA,12BCNDREADK4,TC;恢复LED左移标志LDP#DP_USERSPLK#00H,LEDFLAGSPLK#01H,IO_DATARET

第83页:优先级INT2中断人口,保护现场83;

(9)中断程序GISR2
LDPLACC#0E0HPIVR,1#PVECTORS;读取外设中断向量寄存器(PIVR),;并左移一位;加上外设中断入口地址;跳到相应的中断服务子程序;通用定时器1中断入口#DP_USERIO_COUNT#1IO_COUNT;恢复现场INTM;开总中断,因为一进中断就自动关闭总中断ADDBACCT1GP_ISR:LDPLACLADDSACLCLRCRET

第84页:复位看门狗84;(10)假中断程序

PHANTOMKICK_DOGRETEND

第85页:

顶部目录