找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1086|回复: 0
打印 上一主题 下一主题
收起左侧

各位前辈帮我看看这个单片机时钟程序为啥运行不成功

[复制链接]
跳转到指定楼层
楼主
//用单片机设置一个日历时钟,包括年月日时分秒,通过protues软件,主机发'F' 'S' 20 20 05 28 21 01 01 xx,
从机返回
'F' 'S' mm mm mm mm mm mm mm ,   mm是单片机的当前时间

#include <REGX51.H>

typedef unsigned char u8;
unsigned int t0cnt;
u8 rcvbuf[9],x[7];
u8 rcvposi=0,senposi=0;
bit rcvflag=0;
int i,j,n;
void uartinit(void)//????????
{         
//???1 ??????9600bps  ???????   
SCON=0X50;//0101 0000
PCON&=0X7F;//0111 1111

//T1 ???2 ?????
TMOD&=0X0F;
TMOD|=0X20;//    0010   //GATE C/T M1 M0  
TH1=0XFD;
TL1=0XFD;
ET1=0;//??????ж?????????
TR1=1;//????????????

ES=1;
}

void uartisr(void) interrupt 4//?????ж?
{
u8 temp;
if(TI==1)
  TI=0;
  /*if(temp=='F')
   senposi=0;
  if(temp=='R')
  {
   SBUF ='F';
   SBUF ='S';
   for(i=0;i<=6;i++)
   {
   SBUF =x[ i];
   }
    }//???????????*/
if(RI==1){
  RI=0;
  temp=SBUF;
  if(temp=='F')
   rcvposi=0;
  switch(rcvposi)
  {
   case 0:rcvbuf[rcvposi]=temp;break;
   case 1:rcvbuf[rcvposi]=temp;break;
   case 2:rcvbuf[rcvposi]=temp;break;
   case 3:rcvbuf[rcvposi]=temp;break;
   case 4:rcvbuf[rcvposi]=temp;break;
   case 5:rcvbuf[rcvposi]=temp;break;
   case 6:rcvbuf[rcvposi]=temp;break;
   case 7:rcvbuf[rcvposi]=temp;break;
   default:rcvbuf[rcvposi]=temp;rcvflag=1;break;
  }
  rcvposi++;
    }//???????????
}
void timer0init(void)//??????????
{
t0cnt=0;
//TMOD T1 GATE C/T M1 M0 T1 0001
TMOD &=0xF0;
TMOD |=0x01;
//N=16
TH0=(65536-(10000/2))/256;
TL0=(65536-(10000/2))%256;
//5ms???
PT0=1;//T0?ж?????
ET0=1;//T0?ж?????
EA=1;//???ж?????
TR0=1;//T0????????
}
void timer0isr(void) interrupt 1//??????ж?
{
TR0=0;
TH0=(65536-(10000/2))/256;
TL0=(65536-(10000/2))%256;
TR0=1;
t0cnt++;
if(t0cnt>=200)
{
  //200 5ms 1000ms=1s
  x[7]++;   
  t0cnt=0;
  
}
}

void main(void)
{
uartinit();
//EA=1;
timer0init();

while(1)
{
  if(rcvflag==1)
   {
      rcvposi=0;
     rcvflag=0;
  }
  if(rcvbuf[0]=='S')
  {
   for(j=1;j<=7;j++)
   {
    x[ i]=rcvbuf[ i];
   }
  }
  else if(rcvbuf[0]=='R')
  {
   SBUF='F';
   SBUF='R';
   for(n=1;n<=7;n++)
   {
    SBUF=x[n];
   }
   SBUF=(84+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7])&255;
  }
  if(x[7]>=60)
  {
   x[7]=0;
   x[6]++;
  }
  if(x[6]>=60)
   {
    x[6]=0;
    x[5]++;
   }
  if(x[5]>=24)
   {
    x[5]=0;
    x[4]++;
   }
  if(x[3]==1|3|5|7|8|10|12)
  {
   if(x[4]>=31)
   {
    x[4]=0;
    x[3]++;
   }
  }
  else if(x[3]==4|6|9|11)
  {
   if(x[4]>=30)
   {
    x[4]=0;
    x[3]++;
   }
  }
  else
  {
   if(x[4]>=28)
   {
    x[4]=0;
    x[3]++;
   }
  }
  if(x[3]>=12)
  {
   x[3]=0;
   x[2]++;
  }
  if(x[2]>=100)
  {
   x[2]=0;
   x[1]++;
  }
}
}

20e126f4642fba6c978db749e08f874.png (88.8 KB, 下载次数: 65)

20e126f4642fba6c978db749e08f874.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表