帮忙请各位看看这段程序
主程序前半部分部分:
int main(void)
{
int bee;//蜂鸣器鸣响时间计数
int bee_on;//闹铃标志
DDRA |= (1<<PA3);//初始化蜂鸣器蜂鸣器
PORTA &= ~(1<<PA3);
PORTD |= (1 << PD2);
PORTD |= (1 << PD3);
PORTD |= (1 << PD6);
PORTD |= (1 << PD7);//四个按键均使能上拉电阻,低电平触发
DDRD &= ~(1 << PD2);
DDRD &= ~(1 << PD3);
DDRD &= ~(1 << PD6);
DDRD &= ~(1 << PD7);//四个按键置为输入方式
MCUCR=0b00000010;//INT0设置为下降沿触发
GICR |= (1 << INT0);//使能INT0
LCD_Init();
init_USART();
init_SPI();
SREG=SREG|0x80;//使能全局中断
DS1302_EXIST=check_RTC();//检测DS1302的存在
if(DS1302_EXIST)
{
put_s("Send a or A to init time...");
put_s("Send b or B to set the clock time...");
put_s("send c or C read the cur_time...");
}
else
{
put_s("RTC not found");
}
}
因为我是单步调试的,运行到这里以后,一直出现RTC not found;可是我明明在仿真设置中接了DS1302;
DS1302部分子程序及其调用的SPI:
unsigned char check_RTC(void)
{
unsigned char i;
Single_SPI(CMD_CONTROL|CMD_WRITE,CFG_UNPROTECT);//写允许
Single_SPI(CMD_RAM_BASE|CMD_WRITE,0xA5); //写RAM0
Single_SPI(CMD_CONTROL|CMD_WRITE,CFG_PROTECT); //写保护
i=Single_SPI(CMD_RAM_BASE|CMD_READ,0); //读取RAM0
if(i==0xA5) return 1;
else return 0;
}
Single_SPI : 使用SPI接口读写数据到DS1302
输入参数: command: 命令选择;
wdata: 写入的数据;
返回值 rdata: 读回的数据;
(SPI的收发是同时进行的)
-----------------------------------------------------------------------*/
unsigned char Single_SPI(unsigned char command,unsigned char wdata)
{
unsigned char rdata;
EnDS1302; // 使能LCD
Delay10uS();
spi_rw(command); // 传送命令到SPI寄存器
Delay10uS();
rdata = spi_rw(wdata); // 传送数据到SPI寄存器
DiDS1302; // 关断LCD SPI通讯
Delay10uS();
return rdata;
}
char spi_rw(char wdata)
{
#ifndef _V_SPI_
SPDR = wdata;// 传送数据到SPI寄存器
while((SPSR&(1<<SPIF))==0);// 等待数据传送完? LOOP_UNTIL_BIT_IS_SET(SPSR,SPIF)
return(SPDR);// 读取数据
#else
char rdata = 0;
char i = 0;
for(i = 0;i < 8;i ++)
{
SPI_PORT &= ~(1 << DS1302_SCK);//时钟拉低
if(wdata & 0x01)
{
SPI_PORT |= (1 << DS1302_MOSI);
}
else
{
SPI_PORT &= ~(1 << DS1302_MOSI);
}
wdata >>= 1;//右移一位
rdata >>= 1;//右移一位
if(SPI_PIN & (1 << DS1302_MISO))
{
rdata |= 0x80;
}
SPI_PORT |= (1 << DS1302_SCK);//时钟拉高,产生上升沿
}
SPI_PORT &= ~(1 << DS1302_SCK);//时钟拉低
return(rdata);// 读取数据
#endif
}
此帖出自
小平头技术问答
一周热门 更多>