欢迎来到天天文库
浏览记录
ID:38065957
大小:15.78 KB
页数:6页
时间:2019-05-25
《蜂鸣器定时中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、S3C2440的PWM实验,用蜂鸣器和LED做测试。。。。。。学习,参考。。。。。。 程序代码:#include"2440addr.h"staticcharflag=0;staticchar t=0;intbit=1<<10;voiddelay(intp);void ClearPending(intbit){ rSRCPND
2、=bit; //TIME0 rINTPND
3、=bit; //TIME0}staticvoid __irq time0_ISR(void){ ClearPending(bit); t++; flag++; if(t==1) { t--;
4、 if(flag==10) //5s { t++; rGPBDAT&=~(1<<5); //打开第一个灯,蜂鸣器响 rGPBDAT
5、=(1<<0); rTCNTB0=0x9896; //定时器0赋初值,定时0.4s rTCMPB0=0x9896<<1; //定时器比较缓冲器的值 flag=0; } } elseif(t==2) //4s { t--; if(flag==10) { t++; rGPBDAT&=~(1<<6);//打开第二个灯 rTCNTB0=0x7270; //定时器0赋初值,定时0.3
6、s rTCMPB0=0x7270<<1; //定时器比较缓冲器的值 flag=0; } } elseif(t==3) //3s { t--; if(flag==10) { t++; rGPBDAT&=~(1<<8);//打开第三个灯 rTCNTB0=0x4c4b; //定时器0赋初值,定时0.2s rTCMPB0=0x4c4b<<1; //定时器比较缓冲器的值 flag=0; } } elseif(t==4) //2s { t--; if(flag=
7、=10) { t=0; rGPBDAT&=~((1<<5)
8、(1<<6)
9、(1<<8)
10、(1<<10));//打开所有的灯 delay(1000); rGPBDAT
11、=((1<<5)
12、(1<<6)
13、(1<<8)
14、(1<<10));//熄灭所有的灯 rTCNTB0=0xbebc; //定时器0赋初值,定时0.5s rTCMPB0=0xbebc<<1; //定时器比较缓冲器的值 flag=0; } }}voidled_init(void){ rGPBCON=0x555556; //GPB0T配置为TOUT0,其他为
15、输出 rGPBUP=0x000000; //开上拉 rGPBDAT&=0xfffe; //关闭蜂鸣器 rGPBDAT
16、=((1<<5)
17、(1<<6)
18、(1<<8)
19、(1<<10));//熄灭所有的灯}voidinterrupt_init(void){ pISR_TIMER0=(unsigned)time0_ISR; rSRCPND
20、=bit; //TIME0 rINTPND
21、=bit; //TIME0 rINTMSK&=~(bit); //TIME0开中断 }voidtime_init(void){ rTCFG0=0x0000ff; //定时器0的255分频 rTCFG1=
22、0xff0ffff0;//定时器1和DMA通道清0,即定时器0为1/2分频,DMA关闭 rTCNTB0=0xbebc; //定时器0赋初值,定时0.5s rTCMPB0=0xbebc<<1; //定时器比较缓冲器的值 rTCON&=0xffff00; //定时器0无手动更新,打开变相,自动加载,定时器0启动 rTCON
23、=0xffff0f; rTCON&=~(0x2); //清除自动加载位,定时器才开始工作}intISMain(void){ led_init(); interrupt_init(); time_init(); while(1); return0;}voiddela
24、y(intp){ inti,j; for(i=0;i
0;j--);}
此文档下载收益归作者所有