欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2146|回復: 5
收起左側

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

[復制鏈接]
ID:781656 發表于 2021-5-6 16:17 | 顯示全部樓層 |閱讀模式
這個是pc機和單片機的通信,程序沒問題,但顯示出來的是亂碼,使用VSPD虛擬串口軟件調試。望各位大俠幫忙指導!
51hei截圖_20210506160734.jpg 51hei截圖_20210506160813.jpg
  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[]=  //共陰數碼管數字段碼表,最后為“-”的段碼
  8. {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X40};
  9. uchar R[]={10,10,10,10}; //保存接收到的四位數字(初始時為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定時器)(當T2CON寄存器的RCLK,TCLK二者之一置位
  30. //t2即工作于波特率發生器模式,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;      //收/發時鐘位: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,下降沿觸發
  48. ES=1;            //允許串口中斷
  49. EA=1;            //開中斷
  50. while(1)
  51. {
  52.   for(i=0;i<4;i++)  //循環先掃描顯示4個數字字符
  53.   {
  54.    P0=0X00;            //先暫時關閉段碼
  55.    P2=~(1<<i);         //發送位碼
  56.    P0=SEG_CODE[R[i]];   //發送段碼
  57.    delay_ms(4);   //位間短暫延時
  58.   }
  59. }
  60. }
  61. //串口接收中斷
  62. void receive_4_digit() interrupt 4
  63. {
  64. static uchar i=0;         //接收緩沖索引(靜態變量)
  65. uchar c;      //當前接收的字符
  66. if(RI)       //接收中斷標志位判斷
  67. {
  68.   RI=0;      //軟件清零中斷標志位
  69.   c=SBUF;               //從SBUF寄存器讀取字符
  70.   if(c=='#')     //接收時遇到‘#’則將接收索引清零
  71.   {
  72.    i=0;     
  73.   }
  74.   else
  75.   {
  76.    if(c>='0'&&c<='9')  //遇到數字0-9時從當前位置循環存放
  77.    {
  78.     R[i++]=c-'0';  //存入R數組當前位置,索引遞增
  79.     if(i==4)   //索引范圍限于0-3
  80.     {
  81.      i=0;
  82.     }
  83.    }
  84.   }
  85. }
  86. }
  87. //INT0中斷發送字符串
  88. void EX_INT0() interrupt 0
  89. {
  90. uchar *s="這是由8051單片機發送的字符串!!!\r\n";
  91. uchar i=0;
  92. while(s[i]!='\0')
  93. {
  94.   SBUF=s[i++];         //發送1字節,索引遞增
  95.   while(TI==0)   //等待發送完畢
  96.   {
  97.    TI=0;            //軟件清零中斷標志位TI
  98.   }
  99. }
  100. }
復制代碼

回復

使用道具 舉報

ID:781656 發表于 2021-5-6 16:23 | 顯示全部樓層

全運行狀態下,都是亂碼,
51hei截圖_20210506162107.png
回復

使用道具 舉報

ID:390416 發表于 2021-5-6 20:02 | 顯示全部樓層
串口1打印程序 可以打印3個十六位的變量 波特率9600 http://m.raoushi.com/bbs/dpj-201660-1.html
回復

使用道具 舉報

ID:401564 發表于 2021-5-6 21:35 | 顯示全部樓層
STC官方下載器有串口助手,下載程序到單片機上運行就可以
有的串口通訊軟件是會亂碼,STC下載的是相對比較好用的
回復

使用道具 舉報

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

使用道具 舉報

ID:781656 發表于 2021-5-7 15:01 | 顯示全部樓層
用的是89c52芯片,現在的問題是,串口調試發出的信號,單片機數碼管不顯示
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表