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