找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2701|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機和單片機之間通信仿真 含主機與叢機的源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424884 發(fā)表于 2018-11-12 10:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
使用中斷方式C51程序設(shè)計_單片機與一個單片機串口通信仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機與1個單片機串口通信設(shè)計任務(wù):
1個單片機(主機)通過串行口將十六進制數(shù)發(fā)送給另一個單片機(從機),驅(qū)動從機繼電器動作,并在數(shù)碼管顯示接收到的數(shù)。從機接收到數(shù)據(jù)后,返回原數(shù)據(jù)給主機并在數(shù)碼管顯示。



手動輸入:通過開發(fā)板上的數(shù)字量輸入撥動開關(guān)來實現(xiàn)數(shù)據(jù)輸入(00 01 10 11)

單片機源程序如下:
  1. #include<reg51.h>
  2. #include<string.h>

  3. #define        uint        unsigned int
  4. #define uchar        unsigned char

  5. /****************************開關(guān)端口定義*********************************************/   
  6. sbit sw_0=P3^3;   
  7. sbit sw_1=P3^4;   

  8. /****************************數(shù)碼顯示 鍵盤接口定義****************************************/   
  9. sbit PS0=P2^4;//數(shù)碼管個位   
  10. sbit PS1=P2^5;//數(shù)碼管十位               
  11. sfr  P_data=0x80;//P0口為顯示數(shù)據(jù)輸出口
  12. sbit P_K_L=P2^2;//鍵盤列
  13.    
  14. uchar tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//字段轉(zhuǎn)換表
  15. uchar temp=0; //存放數(shù)據(jù)區(qū)
  16. uint a;        
  17. uint sw_in(void);//開關(guān)量輸入采集
  18. void display(uint a);//顯示函數(shù)
  19. void delay(uint delay_time);//延時函數(shù)     
  20. void init_serial(void);

  21. void main(void)
  22. {         
  23.         init_serial();

  24.         temp=sw_in();
  25.         TI=0;
  26.         SBUF=temp;
  27.         
  28.         while(1);
  29. }
  30. /**************************串口初始化函數(shù)**************************/
  31. /*函數(shù)原型:void init_serial(void)
  32. /*函數(shù)功能:設(shè)置串口通信參數(shù)及方式
  33. /*輸入?yún)?shù):無
  34. /*輸出參數(shù):無
  35. /*調(diào)用模塊:無
  36. /******************************************************************/
  37. void init_serial(void)
  38. {        TMOD=0X20;//定時器1方式2
  39.         TH1=0XFA;
  40.         TL1=0XFA;
  41.         PCON=0X80;
  42.         SCON=0X50;//串口方式1,允許接收,波特率9600bit/s
  43.         TR1=1;        //開始計時
  44.         ES=1;
  45.         EA=1;
  46. }
  47. //串口中斷處理函數(shù)
  48. void serial_int() interrupt 4
  49. {        
  50.         if(RI==1)
  51.         {        RI=0;
  52.                 temp=SBUF;        //接收數(shù)據(jù)
  53.                 for(a=0;a<200;a++)//顯示,兼有延時的作用
  54.                 display(temp);
  55.         }
  56.         if(TI==1)
  57.         {        temp=sw_in();
  58.                 SBUF=temp;
  59.                 TI=0;
  60.         }
  61. }
  62. /**************************數(shù)據(jù)采集函數(shù)**************************/
  63. /*函數(shù)原型:unsigned int sw_in(void)
  64. /*函數(shù)功能:數(shù)據(jù)采集
  65. /*輸入?yún)?shù):無
  66. /*輸出參數(shù):a
  67. /*調(diào)用模塊:無
  68. /******************************************************************/
  69. uint sw_in(void)
  70. {
  71.    unsigned int a=0;
  72.         if(sw_0)
  73.           {  a=a+1;}
  74.         if(sw_1)
  75.             {a=a+0x10;}
  76.     return a;
  77. }
  78. /**************************數(shù)碼管顯示函數(shù)**************************/
  79. /*函數(shù)原型:void display(void)
  80. /*函數(shù)功能:數(shù)碼管顯示
  81. /*輸入?yún)?shù):無
  82. /*輸出參數(shù):無
  83. /*調(diào)用模塊:delay()
  84. /******************************************************************/
  85. void display(unsigned int a)
  86. {        
  87.     bit b=P_K_L;
  88.         P_K_L=1;//防止按鍵干擾顯示
  89.    
  90.     P_data=tab[a&0x0f];//顯示個1位
  91.     PS0=0;                 
  92.         PS1=1;
  93.         delay(200);
  94.    
  95.          P_data=tab[(a>>4)&0x0f]; //顯示十位
  96.     PS0=1;                 
  97.         PS1=0;
  98.         delay(200);        

  99.     P_K_L=b;//恢復(fù)按鍵
  100.         P_data=0xff;//恢復(fù)數(shù)據(jù)口
  101. }
  102. /*******************************延時函數(shù)*********************************/
  103. /*函數(shù)原型:delay(unsigned int delay_time)
  104. /*函數(shù)功能:延時函數(shù)
  105. /*輸入?yún)?shù):delay_time (輸入要延時的時間)
  106. /*輸出參數(shù):無
  107. /*調(diào)用模塊:無
  108. /**********************************************************************/
  109. void delay(unsigned int delay_time)   //延時子程序
  110. {for(;delay_time>0;delay_time--)
  111. {}
  112.   }
復(fù)制代碼

所有資料51hei提供下載:
單片機通信.zip (150.55 KB, 下載次數(shù): 30)


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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-11-14 02:44 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:46999 發(fā)表于 2018-11-14 09:18 | 只看該作者
好資料,謝謝樓主的分享!
回復(fù)

使用道具 舉報

地板
ID:426839 發(fā)表于 2018-11-15 09:10 | 只看該作者
厲害
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表