找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PC機與51單片機的通信程序 顯示出來的是亂碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:781656 發(fā)表于 2021-5-6 16:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這個是pc機和單片機的通信,程序沒問題,但顯示出來的是亂碼,使用VSPD虛擬串口軟件調(diào)試。望各位大俠幫忙指導(dǎo)!

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define FREQ 11059200       //振蕩器頻率11.0592Mhz
  7. uchar code SEG_CODE[]=  //共陰數(shù)碼管數(shù)字段碼表,最后為“-”的段碼
  8. {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40};
  9. uchar R[]={10,10,10,10}; //保存接收到的四位數(shù)字(初始時為4個“-”)
  10. //延時程序
  11. void delay_ms(uint x)
  12. {
  13. uchar t;
  14. while(x--)
  15. {
  16.   for(t=0;t<120;t++);
  17. }
  18. }
  19. //初始化串口(使用time1定時器)
  20. void init_usart_ut1()
  21. {
  22. SCON=0X50;    //串口方式1
  23. TMOD=0X20;    //t1工作于方式2(8位自動重裝)
  24. PCON=0X80;        //波特率不倍增
  25. TH1=TL1=-FREQ/384/9600;      //波特率配置(TH1=TL1=0XFD)
  26. //或:TH1=TL1=256-FREQ/384/9600;
  27. TR1=1;            //啟動定時器1
  28. }
  29. //串口初始化(使用t2定時器)(當(dāng)T2CON寄存器的RCLK,TCLK二者之一置位
  30. //t2即工作于波特率發(fā)生器模式,TH2-TL2溢出時,RCAP2H-RCAP2L重裝TH2-TL2)
  31. void init_usart_ut2()
  32. {
  33. RCAP2H=0XFF;         //波特率配置(RCAP2H=0XFF)
  34. RCAP2L=-FREQ/32/9600;    //波特率配置(RCAP2L=0XDC)
  35. //或:RCAP2L=256-FREQ/32/9600;
  36. SCON=0X50;       //串口方式1
  37. T2CON=0X30;      //收/發(fā)時鐘位:RCLK,TCLK同時置位
  38. PCON=0X00;       //波特率不倍增
  39. TR2=1;           //啟動定時器t2
  40. }
  41. //主程序
  42. main()
  43. {
  44. uchar i;
  45. init_usart_ut2();   //串口初始化(使用timer2定時器)
  46. //或:init_usart_ut1();  //串口初始化(使用timer1定時器)
  47. EX0=1; IT0=1;               //允許外部中斷0,下降沿觸發(fā)
  48. ES=1;            //允許串口中斷
  49. EA=1;            //開中斷
  50. while(1)
  51. {
  52.   for(i=0;i<4;i++)  //循環(huán)先掃描顯示4個數(shù)字字符
  53.   {
  54.    P0=0X00;            //先暫時關(guān)閉段碼
  55.    P2=~(1<<i);         //發(fā)送位碼
  56.    P0=SEG_CODE[R[i]];   //發(fā)送段碼
  57.    delay_ms(4);   //位間短暫延時
  58.   }
  59. }
  60. }
  61. //串口接收中斷
  62. void receive_4_digit() interrupt 4
  63. {
  64. static uchar i=0;         //接收緩沖索引(靜態(tài)變量)
  65. uchar c;      //當(dāng)前接收的字符
  66. if(RI)       //接收中斷標(biāo)志位判斷
  67. {
  68.   RI=0;      //軟件清零中斷標(biāo)志位
  69.   c=SBUF;               //從SBUF寄存器讀取字符
  70.   if(c=='#')     //接收時遇到‘#’則將接收索引清零
  71.   {
  72.    i=0;     
  73.   }
  74.   else
  75.   {
  76.    if(c>='0'&&c<='9')  //遇到數(shù)字0-9時從當(dāng)前位置循環(huán)存放
  77.    {
  78.     R[i++]=c-'0';  //存入R數(shù)組當(dāng)前位置,索引遞增
  79.     if(i==4)   //索引范圍限于0-3
  80.     {
  81.      i=0;
  82.     }
  83.    }
  84.   }
  85. }
  86. }
  87. //INT0中斷發(fā)送字符串
  88. void EX_INT0() interrupt 0
  89. {
  90. uchar *s="這是由8051單片機發(fā)送的字符串!!\r\n";
  91. uchar i=0;
  92. while(s[i]!='\0')
  93. {
  94.   SBUF=s[i++];         //發(fā)送1字節(jié),索引遞增
  95.   while(TI==0)   //等待發(fā)送完畢
  96.   {
  97.    TI=0;            //軟件清零中斷標(biāo)志位TI
  98.   }
  99. }
  100. }
復(fù)制代碼

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

使用道具 舉報

沙發(fā)
ID:781656 發(fā)表于 2021-5-6 16:23 | 只看該作者

全運行狀態(tài)下,都是亂碼,

51hei截圖_20210506162107.png (282.38 KB, 下載次數(shù): 40)

51hei截圖_20210506162107.png
回復(fù)

使用道具 舉報

板凳
ID:390416 發(fā)表于 2021-5-6 20:02 | 只看該作者
串口1打印程序 可以打印3個十六位的變量 波特率9600 http://www.torrancerestoration.com/bbs/dpj-201660-1.html
回復(fù)

使用道具 舉報

地板
ID:401564 發(fā)表于 2021-5-6 21:35 | 只看該作者
STC官方下載器有串口助手,下載程序到單片機上運行就可以
有的串口通訊軟件是會亂碼,STC下載的是相對比較好用的
回復(fù)

使用道具 舉報

5#
ID:889094 發(fā)表于 2021-5-6 22:18 | 只看該作者
看了兩個串口初始化函數(shù),串口2的初始化函數(shù)中怎么和1中的一樣都是SCON=0X50
雖然我不知道樓主用的什么芯片,但兩個串口設(shè)置模式1肯定不是一個寄存器,因為我的芯片兩個串口各有設(shè)置的寄存器。我的是串口1用SCON串口2用S2CON
回復(fù)

使用道具 舉報

6#
ID:781656 發(fā)表于 2021-5-7 15:01 | 只看該作者
用的是89c52芯片,現(xiàn)在的問題是,串口調(diào)試發(fā)出的信號,單片機數(shù)碼管不顯示
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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