久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1234|回復: 0
打印 上一主題 下一主題
收起左側

基于單片機的雙機通信電路設計(十六進制)附仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:1127039 發(fā)表于 2024-6-26 09:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是學單片機以來做的第二個實驗內容 ,文件含proteus仿真工程以及keil源文件,功能(如下)都已經(jīng)實現(xiàn)。新人第一次發(fā)分享的帖子,請大家多多指教。
單片機功能;在二個單片機之間編程實現(xiàn)串行口通訊,發(fā)送方以流水燈字節(jié)碼作為發(fā)送數(shù)據(jù)定時發(fā)送,并在接收方的 P0 口上顯示接收到的字節(jié),在數(shù)碼屏上以十六進制顯示,中間有按鈕可以啟動和暫停。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


發(fā)送方源碼
  1. #include<reg51.h>

  2. #define uchar unsigned char
  3. uchar code Tab[16]={0xC0,/*0*/
  4.                     0xF9,/*1*/
  5.                     0xA4,/*2*/
  6.                     0xB0,/*3*/
  7.                     0x99,/*4*/
  8.                     0x92,/*5*/
  9.                     0x82,/*6*/
  10.                     0xF8,/*7*/
  11.                     0x80,/*8*/
  12.                     0x90,/*9*/
  13.                                         0x88,/*A*/
  14.                                     0x83,/*B*/
  15.                                     0xC6,/*C*/
  16.                                     0xA1,/*D*/
  17.                                     0x86,/*E*/
  18.                                     0x8E /*F*/};
  19. uchar Counter=0;Second_1=0,Second_0=0;
  20. sbit Key = P3^2;
  21.                                        
  22. void Display(void);
  23. void Delay(void);
  24. void UARTInit(void);
  25. void UARTSend(uchar data1);
  26. void timer0Init(void);        
  27.                                        
  28. void main()
  29. {        
  30.         P1=0xff;//給流水燈初始化值
  31.         UARTInit();//串口初始化
  32.     timer0Init();//定時器初始化
  33.         while(1)
  34.         {
  35.                 if(Key == 0)
  36.                 {
  37.                         EA = 1;        //打開總中斷
  38.                 }
  39.                 if(Key == 1)
  40.                 {
  41.                         EA = 0;        //關閉總中斷
  42.                 }
  43.                 Display();//數(shù)碼管顯示函數(shù)
  44.         }
  45. }

  46. void Display(void)
  47. {
  48.         switch (P1)//根據(jù)P1的值給數(shù)碼管賦值
  49.         {
  50.                 case 0xFE:{Second_1 = 15, Second_0 = 14; break;}
  51.                 case 0xFD:{Second_1 = 15, Second_0 = 13; break;}
  52.                 case 0xFB:{Second_1 = 15, Second_0 = 11; break;}
  53.                 case 0xF7:{Second_1 = 15, Second_0 = 7 ; break;}
  54.                 case 0xEF:{Second_1 = 14, Second_0 = 15; break;}
  55.                 case 0xDF:{Second_1 = 13, Second_0 = 15; break;}
  56.                 case 0xBF:{Second_1 = 11, Second_0 = 15; break;}
  57.                 case 0x7F:{Second_1 = 7 , Second_0 = 15; break;}
  58.                 default: break;
  59.         }
  60.         P0=Tab[Second_1];
  61.         P2=0x01;
  62.         Delay();
  63.         P2=0x00;

  64.         P0=Tab[Second_0];
  65.         P2=0x02;
  66.         Delay();
  67.         P2=0x00;
  68. }

  69. void timer0Init()
  70. {
  71.         EA = 1;        //打開總中斷
  72.         ET0 = 1;//打開定時器0中斷
  73.         TR0 = 1;         //啟動定時器0
  74.         REN = 1;//允許串口接收
  75.         TMOD |= 0X01; //定時器工作模式1,16位定時模式
  76.         TH0=0x3c;
  77.         TL0=0xb0;
  78. }
  79. //串口初始化
  80. void UARTInit()
  81. {
  82.         EA = 1;        //打開總中斷
  83.         ES = 1; //打開串口中斷
  84.         SM0 = 0;        SM1 = 1;//串口工作方式1,8位UART波特率可變
  85.         REN = 1;//串口允許接收
  86.         TR1 = 1;//啟動定時器1
  87.         TMOD |= 0x20;//定時器1,工作模式2 8位自動重裝
  88.         TH1 = 0xfd;
  89.         TL1 = 0xfd;//設置比特率9600
  90. }

  91. void Timer0() interrupt 1
  92. {
  93.         ET0=0;
  94.         TH0=0x3c;
  95.         TL0=0xb0;
  96.         Counter++;
  97.         if(Counter==20)
  98.         {
  99.                 Counter=0;
  100.                 P1<<=1;//左移一位
  101.                 P1|=0x01;//最后一位補1
  102.                 if(P1==0xff)//檢測是否移到最左端
  103.                 {
  104.                         P1=0xfe;
  105.                 }
  106.                 UARTSend(P1);//串口發(fā)送流水燈的值
  107.         }
  108.         ET0=1;
  109. }

  110. // 串口發(fā)送函數(shù)
  111. void UARTSend(uchar data1)
  112. {
  113.         SBUF = data1;
  114.     while(!TI);
  115.     TI = 0;
  116. }

  117. void Delay(void)
  118. {
  119.         uchar data i;
  120.         for(i=500;i>0;i--);
  121. }
復制代碼
接收方源碼
  1. #include <reg51.h>

  2. #define uchar unsigned char
  3. uchar code Tab[16]={0xC0,/*0*/
  4.                     0xF9,/*1*/
  5.                     0xA4,/*2*/
  6.                     0xB0,/*3*/
  7.                     0x99,/*4*/
  8.                     0x92,/*5*/
  9.                     0x82,/*6*/
  10.                     0xF8,/*7*/
  11.                     0x80,/*8*/
  12.                     0x90,/*9*/
  13.                                         0x88,/*A*/
  14.                                     0x83,/*B*/
  15.                                     0xC6,/*C*/
  16.                                     0xA1,/*D*/
  17.                                     0x86,/*E*/
  18.                                     0x8E /*F*/};
  19. uchar Counter=0;Second_1=0,Second_0=0;
  20. uchar receivedData = 0;//串口接收數(shù)據(jù)
  21.                                        
  22. void Display(void);
  23. void Delay(void);
  24. void UARTInit(void);
  25.                                        
  26. void main()
  27. {
  28.         P1=0xff;//給初始化值
  29.     UARTInit();  // 初始化串口
  30.     while (1)
  31.         {        
  32.                 Display();//數(shù)碼管顯示函數(shù)
  33.     }
  34. }

  35. void Display(void)
  36. {
  37.         switch (P1)
  38.         {
  39.                 case 0xFE:{Second_1 = 15, Second_0 = 14; break;}
  40.                 case 0xFD:{Second_1 = 15, Second_0 = 13; break;}
  41.                 case 0xFB:{Second_1 = 15, Second_0 = 11; break;}
  42.                 case 0xF7:{Second_1 = 15, Second_0 = 7 ; break;}
  43.                 case 0xEF:{Second_1 = 14, Second_0 = 15; break;}
  44.                 case 0xDF:{Second_1 = 13, Second_0 = 15; break;}
  45.                 case 0xBF:{Second_1 = 11, Second_0 = 15; break;}
  46.                 case 0x7F:{Second_1 = 7 , Second_0 = 15; break;}
  47.                 default: break;
  48.         }
  49.         P0=Tab[Second_1];
  50.         P2=0x01;
  51.         Delay();
  52.         P2=0x00;

  53.         P0=Tab[Second_0];
  54.         P2=0x02;
  55.         Delay();
  56.         P2=0x00;
  57. }


  58. //串口初始化
  59. void UARTInit()
  60. {
  61.         EA = 1;        //打開總中斷
  62.         ES = 1; //打開串口中斷
  63.         SM0 = 0;        SM1 = 1;//串口工作方式1,8位UART波特率可變
  64.         REN = 1;//串口允許接收
  65.         TR1 = 1;//啟動定時器1
  66.         TMOD |= 0x20;//定時器1,工作模式2 8位自動重裝
  67.         TH1 = 0xfd;
  68.         TL1 = 0xfd;//設置比特率9600
  69. }

  70. // 串口接收函數(shù)
  71. void UART() interrupt 4
  72. {
  73.     if(RI)
  74.     {
  75.         RI = 0;        
  76.                 receivedData = SBUF;
  77.                 P1 = receivedData;
  78.     }
  79.     else
  80.         TI = 0;
  81. }

  82. void Delay(void)
  83. {
  84.         uchar data i;
  85.         for(i=500;i>0;i--);
  86. }
復制代碼

Proteus8.10 仿真程序: 基于單片機的雙機通信電路設計.7z (66.14 KB, 下載次數(shù): 2)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频一区二区中文字幕日韩 | 日韩有码一区 | 久久中文字幕一区 | www.亚洲一区二区 | 91精品国产一区二区三区 | 精品美女视频在免费观看 | 人人干视频在线 | 成人影院一区二区三区 | 国产欧美精品一区 | 国产专区在线 | 国产精品久久久久久久久大全 | 日本激情视频在线播放 | 在线综合视频 | 国产成人在线一区二区 | 水蜜桃亚洲一二三四在线 | 午夜爱爱毛片xxxx视频免费看 | 亚洲视频区 | a爱视频| 91精品无人区卡一卡二卡三 | 日韩欧美一二三区 | 成人免费小视频 | 国产日产欧产精品精品推荐蛮挑 | 免费久久99精品国产婷婷六月 | 国产一区二区三区在线看 | yiren22 亚洲综合 | 精品免费av | 日韩欧美亚洲 | 精品一区二区久久久久久久网站 | 国产欧美精品在线 | 天天干天天玩天天操 | av香蕉| 偷拍自拍网站 | 成人在线| 天天爱爱网 | 国产成人精品一区二区三区四区 | 日本不卡一区二区三区在线观看 | 久久精品91久久久久久再现 | 久久国产高清 | 亚洲天堂av在线 | 99亚洲 | 伊人网站视频 |