找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口通信发送PC机学号与实时时间的proteus仿真与源码

[复制链接]
跳转到指定楼层
楼主
压缩包内含源程序与仿真图


单片机源程序如下:
  1. #include <reg51.h>
  2. #include "intrins.h"
  3. #define SEG P1
  4. void Delay1ms(unsigned int N);
  5. unsigned char code DIG_CODE[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极
  6. void SendChar(unsigned char c);
  7. void SendString(unsigned char *s);
  8. unsigned char Num;
  9. unsigned char Sec,Secs,Secg;        //Secg代表个位,Secs代表十位,下面Min、Hour同上
  10. unsigned char Min=14,Mins,Ming;
  11. unsigned char Hour=8,Hours,Hourg;
  12. unsigned char RcvStr[2];
  13. unsigned int NumRcv=0;
  14. bit FlagRcv=0;
  15. unsigned char Str[]="学号:160805101";
  16. void  main(  )                                        /*主程序*/
  17. {               
  18.         //初始化
  19.         TMOD=0x21;
  20.         TH1=0xf3;//2400bps
  21.         TL1=0xf3;
  22.         TR1=1;
  23.         SCON=0x50;//方式1允许接收
  24.         IE=0x92;//EA=1 ES=1        
  25.         IP=0x10;//PS=1
  26.         TH0=(65536-50000)/256;//定时50ms
  27.         TL0=(65536-50000)%256;//定时50ms
  28.         TR0=1;
  29.         ET0=1;        
  30.         while (1)
  31.         {        
  32.             if(FlagRcv==1)
  33.             {
  34.                          FlagRcv=0;
  35.                                 if(RcvStr[0]=='S' && (RcvStr[1]=='J'))
  36.                        {
  37.                                     SendChar(Hours+0x30);
  38.                                     SendChar(Hourg+0x30);
  39.                                         SendChar(':');
  40.                                         SendChar(Mins+0x30);
  41.                                     SendChar(Ming+0x30);
  42.                                         SendChar(':');
  43.                                         SendChar(Secs+0x30);
  44.                                     SendChar(Secg+0x30);               
  45.                                         SendString(Str);
  46.                                         SendChar(0x0D);//发送回车
  47.                                         SendChar(0x0A);//发送换行
  48.                                         Delay1ms(1000);
  49.                            }
  50.                         else
  51.                         SendString("ERR");
  52.                 }        
  53.                
  54.         }
  55. }

  56. void ISRUSART() interrupt 4
  57. {  
  58.         if(RI==1)
  59.         {
  60.             RcvStr[NumRcv]=SBUF;
  61.                 NumRcv++;
  62.                 RI=0;
  63.                 if(NumRcv==2)
  64.                 {        
  65.                         NumRcv=0;
  66.                         FlagRcv=1;
  67.                 }
  68.         }
  69. }        

  70. void ISRTimer0() interrupt 1
  71. {
  72.         TH0=(65536-50000)/256;//定时50ms
  73.         TL0=(65536-50000)%256;//定时50ms
  74.              Num++;
  75.                 if(Num==20)
  76.                 {
  77.                         Sec++;
  78.                         Num=0;        
  79.                   Secs=Sec/10;
  80.                   Secg=Sec%10;
  81.                 }
  82.                   
  83.                   if(Sec==60)
  84.                 {
  85.                   Sec=0;
  86.                   Secs=Sec/10;
  87.                   Secg=Sec%10;
  88.                   Min++;
  89.                   Mins=Min/10;
  90.                   Ming=Min%10;
  91.                   }

  92.                   if(Min==17)
  93.                 {  
  94.                   Min=0;
  95.                   Mins=Min/10;
  96.                   Ming=Min%10;
  97.                   Hour++;
  98.                   Hours=Hour/10;
  99.                   Hourg=Hour%10;
  100.                 }
  101.                  if(Hour==24)  
  102.                   Hour=0;
  103.                  
  104. }

  105. void SendChar(unsigned char c)
  106. {
  107.         SBUF=c;
  108.         while(TI==0);
  109.         TI=0;
  110. }
  111. void SendString(unsigned char *s)
  112. {
  113.         while(*s!='\0')
  114.         {
  115.                 SendChar(*s);
  116.                 s++;
  117.         
  118.         }
  119. }



  120. void Delay1ms(unsigned int N)                //@12.000MHz
  121. {
  122.         unsigned char i, j;
  123.         while(N--)
  124.         {
  125.                 i = 2;
  126.                 j = 239;
  127.                 do
  128.                 {
  129.                         while (--j);
  130.                 } while (--i);
  131.         }
  132. }
复制代码

所有资料51hei提供下载:
实验9 串行通信实验.zip (123.85 KB, 下载次数: 51)


评分

参与人数 2黑币 +52 收起 理由
不负时光~田 + 2 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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