<br />以下这个程序只是对实验教程(一)RTC实验1稍作改动,功能如下描述,但为什么只能计数,不能报警?请问周工该程序错在哪呢???<br /><br />急。。。。。。。。。。。。。。。。。谢谢!<br /><br />/*功能:运行RTC进行计时,把秒值输出到LED1~LED8显示<br /> 同时定时12:00:00报警功能*/<br /><br />#include "config.h"<br /><br />#define SPI_CS 0x00000100<br />#define SPI_DATA 0x00000040<br />#define SPI_CLK 0x00000010<br />#define SPI_IOCON 0x00000150<br /><br />#define BEEPCON 0x00000080 //p0.7引脚控制蜂鸣器,低电平蜂鸣<br /><br /><br />void DelayNs(uint32 dly)<br />{<br /> uint32 i;<br /> for(;dly>0;dly--)<br /> for(i=0;i<5000;i++);<br />}<br /><br />void HC595_SendDat(uint8 dat)<br />{<br /> uint8 i;<br /> <br /> IO0CLR=SPI_CS;<br /> for(i=0;i<8;i++)<br /> {<br /> IO0CLR=SPI_CLK;<br /> <br /> if((dat&0x80)!=0)<br /> IO0SET=SPI_DATA;<br /> else<br /> IO0CLR=SPI_DATA;<br /> dat<<=1;<br /> IO0SET=SPI_CLK;<br /> }<br /> IO0SET=SPI_CS; //SPI_CS=1,输出显示数据<br /> <br />}<br /><br /><br />void StartAlarm(void)<br />{ <br /> IO0DIR=BEEPCON;<br /> <br /> if((IO0SET&BEEPCON)==0)<br /> IO0SET=BEEPCON;<br /> else<br /> {<br /> IO0CLR=BEEPCON; //开始蜂鸣<br /> DelayNs(10);<br /> IO0SET=BEEPCON; //停止蜂鸣<br /> }<br /><br />}<br /><br /><br />void __irq IRQ_RTC(void)<br />{<br /> if(ILR==1)<br /> {<br /> ILR=0x01;<br /> HC595_SendDat(~SEC);<br /> <br /> if(ILR==3)<br /> {<br /> <br /> StartAlarm();<br /> ILR=0x03;<br /> }<br /> }<br /> ILR=0x03;<br /> VICVectAddr=0x00;<br />}<br /><br />void RTCIni(void)<br />{<br /> PREINT=Fpclk/32768-1;<br /> PREFRAC=Fpclk-(PREINT+1)*32768;<br /> <br /> YEAR=2004;<br /> MONTH=2;<br /> DOM=19;<br /> HOUR=11;<br /> MIN=59;<br /> SEC=50;<br /><br /> ILR=0x03; //清除RTC中断标志<br /> ALHOUR=12; //设置小时比较值<br /> ALMIN=0; //设置分比较值<br /> ALSEC=0; //设置秒比较值<br /> AMR=0xf8; //设置报警屏蔽寄存器,只允许时分秒比较<br /><br /> CIIR=0x01;<br /> CCR=0x01;<br /> <br /> VICIntSelect=0x00000000;<br /> VICVectCntl0=0x2D;<br /> VICVectAddr0=(uint32)IRQ_RTC;<br /> VICIntEnable=0x00002000; //使能RTC中断<br />}<br /><br /><br />int main(void)<br />{<br /> <br /> PINSEL0=0x00000005; //设置连接到UART0其他为通用I/O口<br /> PINSEL1=0x00000000;<br /> IO0DIR=SPI_IOCON; //设置LED控制口为输出其他I/O口为输入<br /> <br /> <br /> RTCIni(); //初始化RTC<br /> <br /> while(1);<br /> <br /> return(0);<br />}<br /> |
|