TQ2440 定时器0中断实现流水灯程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "2440addr.h"
#include "2440lib.h"
#include "def.h"
U32 i,j,k,vary=0;
volatile U32 flag=0;
#define start_timer0 1
void __irq timer0()
{
rTCON&=~start_timer0;//停止定时器0
rSRCPND|=BIT_TIMER0;//清除中断挂起位
rINTPND|=BIT_TIMER0;//清除中断挂起位
vary++;
if(vary==1)
{
vary=0;
flag=!flag;
}
rTCON|=start_timer0;//启动定时器0

}
int Main()
{
rCLKDIVN=rCLKDIVN&(~7)|5;//设置时钟分频比
rGPBCON=rGPBCON&(~(0XFF<<10))|(0X55<<10);//b口设置为输出 并且去上拉电阻
rGPBUP|=(0XF<<5);
pISR_TIMER0=(unsigned int)timer0;//中断的入口地址设定好
rTCFG0=rTCFG0&(~0XFF)|99;//定时器0设置为120分频
rTCFG1=rTCFG1&(~0XF)|1;//定时器分频倍数选择4
rTCNTB0=62500;//计数值
rTCON=rTCON&(~0XF)|0XB;//
rTCON=rTCON&(~3)|1;//启动定时器0
rINTMSK=~BIT_TIMER0;//开屏蔽位
while(1)
{

rGPBDAT=rGPBDAT&~(0XF<<5)|(0XE<<5);
while(!flag);
rGPBDAT=rGPBDAT&~(0XF<<5)|(0XD<<5);
while(flag);
rGPBDAT=rGPBDAT&~(0XF<<5)|(0XB<<5);
while(!flag);
rGPBDAT=rGPBDAT&~(0XF<<5)|(0X7<<5);
while(flag);

}

return 0;
}

相关文档
最新文档