找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

Proteus仿真 51單片機(jī)測(cè)試printf發(fā)送函數(shù) 可以發(fā)送字符串和數(shù)字

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

其他詳見附件!printf可以發(fā)送數(shù)字  put_seris_port("字符串");可以發(fā)送字符串,接收部分已經(jīng)寫好!

單片機(jī)源程序如下:
  1. #include<reg52.h>                 //庫文件
  2. #include<stdio.h>
  3. #include "string.h"       
  4. #include "master.h"
  5. #define uchar unsigned char//宏定義無符號(hào)字符型
  6. #define uint unsigned int  //宏定義無符號(hào)整型
  7. /********************************************************************
  8.                             端口定義
  9. *********************************************************************/
  10. sbit P1_0=P1^0;
  11. sbit P1_1=P1^1;
  12. sbit P1_2=P1^2;
  13. sbit P1_3=P1^3;
  14. /********************************************************************
  15.                             變量定義
  16. *********************************************************************/
  17. unsigned char uart_rx_finish=0;  
  18. unsigned char uart_rx_cnt=0;
  19. unsigned char dis2[16];                   //串口接收數(shù)據(jù)顯示
  20. /********************************************************************

  21. /********************************************************************
  22.                             延時(shí)函數(shù)
  23. *********************************************************************/
  24. void delay_ms(uchar ms)
  25. { uchar i;
  26. while(ms--)
  27. for(i=0;i<120;i++);
  28. }
  29. void DelayUs2x(unsigned char t)        //  T=tx2+5 uS
  30. {   
  31. while(--t);
  32. }
  33. /********************************************************************
  34.                             主函數(shù)
  35. *********************************************************************/
  36. void main()
  37. {
  38.   uint i=0;
  39.   UART_Init();         
  40.   delay_ms(500);
  41.   delay_ms(500);
  42.   delay_ms(500);
  43.   while(1)
  44.           {  i++;
  45. //         puts_to_SerialPort("d\r\n");    //數(shù)據(jù)發(fā)送以\r\n作為結(jié)束符
  46.          printf("%d\r\n",i);    //數(shù)據(jù)發(fā)送以\r\n作為結(jié)束符
  47.          delay_ms(500);
  48.         }
  49. }       
  50. /********************************************************************
  51.                               串口處理程序
  52. *********************************************************************/
  53. void UART_Init(void)
  54. {
  55.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  56.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  57.         PCON = 0x00;
  58.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz
  59.         TL1 = TH1;  
  60.     TR1   = 1;                  // TR1:  timer 1 打開                        
  61.     EA    = 1;                  //打開總中斷
  62.     ES    = 1;                  //打開串口中斷
  63. }

  64. void SendByte(unsigned char dat)//串口發(fā)送單字節(jié)數(shù)據(jù)
  65. {
  66.         unsigned char time_out;
  67.         time_out=0x00;
  68.         SBUF = dat;                          //將數(shù)據(jù)放入SBUF中
  69.         while((!TI)&&(time_out<100))  //檢測(cè)是否發(fā)送出去
  70.         {time_out++;DelayUs2x(10);}        //未發(fā)送出去 進(jìn)行短暫延時(shí)
  71.         TI = 0;                                                //清除ti標(biāo)志
  72. }

  73. void SendStr(unsigned char *s,unsigned char length)           //發(fā)送定長度字符串
  74. {
  75.         unsigned char NUM;
  76.         NUM=0x00;
  77.         while(NUM<length)        //發(fā)送長度對(duì)比
  78.         {
  79.                 SendByte(*s);  //放松單字節(jié)數(shù)據(jù)
  80.                 s++;                  //指針++
  81.                 NUM++;                  //下一個(gè)++
  82.            }
  83. }
  84. char putchar(char c) //printf函數(shù)會(huì)調(diào)用putchar()
  85.         {
  86.         SendByte(c);
  87.         return c;
  88. }
  89. void puts_to_SerialPort(uchar *s)
  90. {
  91.         while(*s != '\0')
  92.         {
  93.                  SendByte(*s);
  94.                 s++;
  95.                 delay_ms(5);       
  96.         }
  97. }
  98. void UART_SER (void) interrupt 4         //串行中斷服務(wù)程序
  99. {
  100.         uchar c;
  101.         if(RI)                        //判斷是接收中斷產(chǎn)生
  102.         {
  103.                 c  = SBUF;
  104.              if(c=='\n') {
  105.                 uart_rx_finish=1;  
  106.                 dis2[uart_rx_cnt]='\0';       
  107.                  }
  108.                  else{
  109.                   if(uart_rx_cnt<sizeof(dis2)-1)
  110.                            dis2[uart_rx_cnt++]=c;
  111.                  }

  112.                 RI=0;                      //標(biāo)志位清零
  113.         }         
  114.         if(TI)  //如果是發(fā)送標(biāo)志位,清零
  115.         TI=0;
  116. }
  117. /********************************************************************
  118.                               結(jié)束
  119. *********************************************************************/
復(fù)制代碼

所有資料51hei提供下載:
甲keil.rar (61.74 KB, 下載次數(shù): 49)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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