为什么我进不了中断?

[复制链接]
3322|1
 楼主| hushenming 发表于 2007-2-14 16:29 | 显示全部楼层 |阅读模式
rc, AI, ev, BLE, fda
<br />#include&nbsp;&quot;f2407regs.h&quot;<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltctype.h&gt<br />#include&nbsp;&ltmath.h&gt<br />#include&nbsp;&ltstring.h&gt<br /><br />void&nbsp;inline&nbsp;disable(void)&nbsp;&nbsp;&nbsp;&nbsp;/*可屏蔽中断禁止*/<br />{<br />&nbsp;&nbsp;asm(&quot;&nbsp;setc&nbsp;INTM&nbsp;&quot;);<br />}<br /><br />void&nbsp;inline&nbsp;enable(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*未屏蔽中断使能*/<br />{<br />&nbsp;&nbsp;asm(&quot;&nbsp;clrc&nbsp;INTM&nbsp;&quot;);<br />}&nbsp;&nbsp;<br /><br />void&nbsp;initial(void)<br />{<br />&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;&nbsp;clrc&nbsp;CNF&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*b0被设置为数据存储空间*/<br />&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;&nbsp;clrc&nbsp;OVM&nbsp;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*累加器中结果正常溢出*/<br />&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;&nbsp;setc&nbsp;SXM&nbsp;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*符号扩展有效*/<br />&nbsp;&nbsp;&nbsp;*SCSR1&nbsp;=&nbsp;*SCSR1|0x0001;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;EVA模块使能*/<br />&nbsp;&nbsp;&nbsp;*WDCR=0x00e8;<br />&nbsp;&nbsp;&nbsp;*IMR&nbsp;=&nbsp;*IMR|0X0002;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*中断级INT2被使能,其它屏蔽*/<br />&nbsp;&nbsp;&nbsp;*IFR&nbsp;=&nbsp;0XFFFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*清除中断标志*/<br />}&nbsp;<br /><br />void&nbsp;timerlint(void)<br />{&nbsp;<br />&nbsp;&nbsp;*EVAIFRA&nbsp;=&nbsp;*EVAIFRA|0X0080;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*上溢中断标志复位*/<br />&nbsp;&nbsp;*EVAIMRA&nbsp;=&nbsp;*EVAIMRA|0x0080;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*上溢中断使能*/&nbsp;<br />&nbsp;&nbsp;*T1CON&nbsp;=&nbsp;0X9005;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*t1连续增计数,定时器禁止,内部时钟,不倍频,等于周期寄存器时重装载*/<br />&nbsp;&nbsp;*T1CNT=0X00;<br />&nbsp;&nbsp;*T1CMPR&nbsp;=&nbsp;0X00FF;<br />&nbsp;&nbsp;*T1PR&nbsp;=&nbsp;&nbsp;0XFFFF;<br />}<br /><br />void&nbsp;bright(void)<br />{<br />&nbsp;*MCRC&nbsp;=&nbsp;*MCRC&nbsp;&&nbsp;0xbfff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;*PFDATDIR&nbsp;=&nbsp;*PFDATDIR&nbsp;|&nbsp;0x4040;<br />}<br /><br />void&nbsp;black(void)<br />{<br />&nbsp;&nbsp;*MCRC&nbsp;=&nbsp;*MCRC&nbsp;&&nbsp;0xbfff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*暗的小灯*/<br />&nbsp;&nbsp;*PFDATDIR&nbsp;=&nbsp;*PFDATDIR&nbsp;|&nbsp;0x4000;<br />&nbsp;&nbsp;*PFDATDIR&nbsp;=&nbsp;*PFDATDIR&nbsp;&&nbsp;0xffbf;&nbsp;<br />}<br /><br />void&nbsp;interrupt&nbsp;T1PINT()&nbsp;&nbsp;&nbsp;&nbsp;/*上溢中断服务程序*/<br />{<br />&nbsp;int&nbsp;flag,i;<br />&nbsp;*T1CNT&nbsp;=&nbsp;0X00;<br />&nbsp;flag&nbsp;=&nbsp;*EVAIFRA&nbsp;&&nbsp;0X0400;&nbsp;&nbsp;&nbsp;/*检测上溢中断标志是否为一*/<br />&nbsp;black();<br />&nbsp;if&nbsp;(flag&nbsp;!=&nbsp;0x0400)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*不为一*/<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;enable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*开总中断*/<br />&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;*EVAIFRA&nbsp;=&nbsp;0X0400;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*复位上溢中断标志*/<br />&nbsp;i++;<br />&nbsp;bright();<br />&nbsp;if(i==7)<br />&nbsp;&nbsp;&nbsp;{i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;bright();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;return;<br />}<br /><br />void&nbsp;interrupt&nbsp;nothing()<br />{&nbsp;<br />&nbsp;&nbsp;enable();&nbsp;<br />&nbsp;&nbsp;return;<br />}<br /><br />void&nbsp;main(void)<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;disable();<br />&nbsp;&nbsp;&nbsp;&nbsp;initial();<br />&nbsp;&nbsp;&nbsp;&nbsp;timerlint();<br />&nbsp;&nbsp;&nbsp;&nbsp;enable();<br />&nbsp;&nbsp;&nbsp;&nbsp;*T1CON&nbsp;=&nbsp;*T1CON&nbsp;|&nbsp;0X0040;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
nalywg 发表于 2007-3-1 11:48 | 显示全部楼层

回复

兄弟,也不知你的问题解决了没有,我是刚开始用c,以前一直用汇编的。<br />不知你的注释十笔误还是什么原因,我想你用的是定时器1周期中断吧,而并不是上溢中断。(*EVAIFRA&nbsp;=&nbsp;*EVAIFRA|0X0080;&nbsp;&nbsp;&nbsp;/*上溢中断标志复位*/<br />&nbsp;&nbsp;*EVAIMRA&nbsp;=&nbsp;*EVAIMRA|0x0080;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*上溢中断使能*/&nbsp;)<br />可你在中断程序里又作了一个判断(flag&nbsp;=&nbsp;*EVAIFRA&nbsp;&&nbsp;0X0400;&nbsp;&nbsp;&nbsp;/*检测上溢中断标志是否为一*/)。我想问题出现在这里吧!把这个判断不要试试看。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部