⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serio.c

📁 DS1302时钟芯片的驱动程序。希望对各位仁兄有用
💻 C
字号:
//串口子程序
/*******************************************************************/
#include <reg52.h>
#include "serio.h"
#include "ds1302.h"
uchar count=0;
struct time clock1;
struct time *tm1;
/*******************************************************************/
//initial uart	串口初始化
void UART0_Init()
{
SCON = 0x50;  //串行方1(波特率可变10位异步通信方式),串行接收允许
//SCON: serail mode 1, 8-bit UART, REN=1,Buard=(2^SMOD)(Timer1 溢出率 )/32
TMOD |= 0x20; //TMOD:timer1 mode 2,8 位reload	 //定时器1,模式2,8位自动装入计数初值方式,高8位为初值,只由低8位计数
PCON |= 0x80; //SMOD=1;  //波特率增加一倍
TH1 = 0xFd;   //fosc=11.0592MHz,smod=0, Baud:4.8k--TH:F4,9.6K--TH:FD;
TL1 = 0xFd;   //fosc=11.0592MHz,smod=1, Baud:19.2K--TH:FD;		由公式可求得其为波特率为19200
IE |= 0x90;   //ea=1,es=1,Enable Serial Interrupt	 开启串行口中断
TR1 = 1;      // timer 1 run  启动T1
}
/*******************************************************************/

//send one byte to pc发送一字节到PC
void UART0_SendByte(uchar da)
{
EA = 0;			  //关闭中断
SBUF = da;		  //数据缓冲寄存器的数据为DA
while(TI==0);	  //如果发送中断无,则进入死循环
TI=0;			  //如果发送中断有,则装发送中断置为0(无)
EA = 1;			  //开启总中断
}

/******************************************************************/

//send one string to pc发送一串字符到PC
void UART0_SendStr(uchar *str)
{
uchar i;
i=0;
while((*(str+i))!='\0')	//如果字符串内容不为0,则往下执行
 {
  UART0_SendByte(*(str+i));
  i=i+1;
 }
}
//******************************************************************//

void receive(void) interrupt 4
{
uchar temp;
EA=0;
if(RI)
{
temp=SBUF;
switch(count)
{
case 0:if(temp==0x30)count=1;else count=0;break;

case 1:if(temp==0x30)count=2;else count=0;break;

case 2:if(temp==0x30)count=3;else count=0;break;

case 3:clock1.year=(temp&0x0f)<<4;count=4;break;

case 4:clock1.year=(temp&0x0f)+clock1.year;count=5;break;

case 5:clock1.month=(temp&0x0f)<<4;count=6;break;

case 6:clock1.month=(temp&0x0f)+clock1.month;count=7;break;

case 7:clock1.date=(temp&0x0f)<<4;count=8;break;

case 8:clock1.date=(temp&0x0f)+clock1.date;count=9;break;

case 9:clock1.hour=(temp&0x0f)<<4;count=10;break;

case 10:clock1.hour=(temp&0x0f)+clock1.hour;count=11;break;

case 11:clock1.minute=(temp&0x0f)<<4;count=12;break;

case 12:clock1.minute=(temp&0x0f)+clock1.minute;count=13;break;

case 13:clock1.sec=(temp&0x0f)<<4;count=14;break;

case 14:clock1.sec=(temp&0x0f)+clock1.sec;count=15;break;

case 15:clock1.week=(temp&0x0f);tm1=&clock1;SetTime(tm1);count=0;break;
}
RI=0;
}
else
TI=0;
EA=1;
}
/*******************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -