网站大量收购独家精品文档,联系QQ:2885784924

实验9——利用Flag输入控制LED闪烁.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验9——利用Flag输入控制LED闪烁

实验9 —— 利用Flag输入控制LED 闪烁 1.实验目的 加深对Flag的了解,进一步掌握Flag控制方法。 2.实验原理 本实验采用处理器A,利用ADSP—TS201 EZ-KIT LITE板上Flag0和Flag1分别连接到按键FLAG0_A和FLAG1_A上,Flag2和Flag3分别连接到LED4和LED6上。 我们通过编程将Flag0和Flag1设置为输入,将Flag2和Flag3设置为输出,当点击FLAG0_A/FLAG1_A时,Flag0和Flag1的输入值将变为1,将改变SQSTAT寄存器相应位的值,通过程序检测SQSTAT中Flag0和Flag1输入值的变化,然后相应地改变Flag2和Flag3的值,实现对LED的控制。 3.相关寄存器说明 1 Flag控制寄存器(FLAGREG)、Flag设置寄存器(FLAGREGST)、Flag清除寄存器(FLAGREGCL) FLAGREG 控制寄存器: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FLAGx_EN (0~3) – 设置Flag作为输入还是输出:1=output / 0=input; bit 0-FLAG0, bit 1-FLAG1, bit 2-FLAG2, bit 3-FLAG3。 FLAGx_OUT(4~7) – Flag作为输出时设置输出值0/1(当将FLAG设置成输入时,只能通过SQSTAT来查看它的状态); bit 4-FLAG0, bit 5-FLAG1,bit 6- FLAG2, bit 7-FLAG3。 8~15位,17~31位保留 FLAGREGST使用 如果想对FLAGREG中某一(多)位置1,而不改变其它位的值,使用FLAGREGST寄存器对FLAGREG进行修改,例如若将FLAGREG第4位置1,则使用如下指令: FLAGREGST=0x10;;//0x10转为二进制为10000,只有第四位为1 FLAGREGCL使用 如果想对FLAGREG中某一(多)位置0,而不改变其它位的值,使用FLAGREGCL寄存器对FLAGREG进行修改,例如若将FLAGREG第4位置0,则使用如下指令: FLAGREGCL= ~(0x10);;//~(0x10)转化为二进制只有第四位为0 2 程序控制器状态寄存器(SQSTAT) SQSTAT是一个32位的寄存器,保存程序控制器的一些状态信息,这里我们只需要了解SQSTAT的16~19位分别代表了Flag0~3的输入值,复位后初始值为0。 4.实验例程: 本程序用汇编语言编写,包含主函数_start、子函数_testflag*、_turnon/off_flag*和_delayloop。 _start主要实现对Flag寄存器初始化设置,使能Flag0/1输入,使能Flag2/3输出; _testflag*检测Flag0/1的输入值,如果输入值为0,即没有按键动作,则跳至_turnoff_flag*将相应LED关闭;如果检测到输入值为1,即有按键动作,那么跳至_turnon_flag*,点亮相应的LED; _delayloop实现有限次无操作循环,用于系统延迟,便于观察LED状态。 /************************************************************************************** 利用Flag0和Flag1输入间接控制LED4和LED6闪烁 **************************************************************************************/ #include defts201.h .section program; _start: /*以下设置Flag0/1作为输入,Flag2/3作为输出*/ xr0=0; FLAGREG=xr0;; FLAGREGST=FLAGREG_FLAG2_EN|FLAGREG_FLAG3_EN;; _testflag0: xr0=sqstat;; bitest r0 by 16;; /*bitest运算*/ if xseq,jump _turnoff_flag2(np);; _turnon_flag2: FLAGREGST=FLAGREG_FLAG2_OUT;; jump _delayloop(np);; _turnoff_flag2: FLAGREGCL=~(FLAGREG_FLAG2_OUT);; _testflag1: xr0=sqstat;; xr0=sqstat;; bitest r0

您可能关注的文档

文档评论(0)

ldj215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档