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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3957|回復: 0
收起左側

Proteus仿真 51單片機測試printf發送函數 可以發送字符串和數字

[復制鏈接]
ID:471909 發表于 2019-7-7 16:44 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
其他詳見附件!printf可以發送數字  put_seris_port("字符串");可以發送字符串,接收部分已經寫好!

單片機源程序如下:
  1. #include<reg52.h>                 //庫文件
  2. #include<stdio.h>
  3. #include "string.h"       
  4. #include "master.h"
  5. #define uchar unsigned char//宏定義無符號字符型
  6. #define uint unsigned int  //宏定義無符號整型
  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];                   //串口接收數據顯示
  20. /********************************************************************

  21. /********************************************************************
  22.                             延時函數
  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.                             主函數
  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");    //數據發送以\r\n作為結束符
  46.          printf("%d\r\n",i);    //數據發送以\r\n作為結束符
  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)//串口發送單字節數據
  65. {
  66.         unsigned char time_out;
  67.         time_out=0x00;
  68.         SBUF = dat;                          //將數據放入SBUF中
  69.         while((!TI)&&(time_out<100))  //檢測是否發送出去
  70.         {time_out++;DelayUs2x(10);}        //未發送出去 進行短暫延時
  71.         TI = 0;                                                //清除ti標志
  72. }

  73. void SendStr(unsigned char *s,unsigned char length)           //發送定長度字符串
  74. {
  75.         unsigned char NUM;
  76.         NUM=0x00;
  77.         while(NUM<length)        //發送長度對比
  78.         {
  79.                 SendByte(*s);  //放松單字節數據
  80.                 s++;                  //指針++
  81.                 NUM++;                  //下一個++
  82.            }
  83. }
  84. char putchar(char c) //printf函數會調用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         //串行中斷服務程序
  99. {
  100.         uchar c;
  101.         if(RI)                        //判斷是接收中斷產生
  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;                      //標志位清零
  113.         }         
  114.         if(TI)  //如果是發送標志位,清零
  115.         TI=0;
  116. }
  117. /********************************************************************
  118.                               結束
  119. *********************************************************************/
復制代碼

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

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人av在线网站 | 亚洲伊人精品酒店 | 国产熟熟| 黄色片免费看视频 | 欧美三区视频 | 黄色欧美视频 | 九九热免费视频在线观看 | 亚洲一区有码 | 狠狠躁夜夜躁人人爽天天高潮 | 久久久女女女女999久久 | 欧美 日韩 国产 成人 在线 | 精品国产一区二区 | 在线欧美 | 中文成人在线 | 玖玖综合网 | 国产精品av久久久久久久久久 | 欧美一区二区久久 | 国产精品久久国产精品 | 日韩免费一二三区 | 日本涩涩网 | 欧美一区二区三区视频 | 91精品国产一区二区三区蜜臀 | 国产在线精品一区 | 伦理午夜电影免费观看 | 久久精品亚洲精品 | 亚洲综合五月天婷婷 | 一二三区在线 | 男女精品网站 | 武道仙尊动漫在线观看 | 精品国产精品三级精品av网址 | 国产视频一区二区 | 伊人伊人| 你懂的国产 | 99热国产在线播放 | 免费视频一区二区三区在线观看 | 国产成人在线视频 | 欧美日韩高清在线一区 | 欧美区在线 | 国产视频福利一区 | 国产女人第一次做爰毛片 | 中文字幕久久精品 |