这个程序是写的有问题么?仿真并不成功

[复制链接]
750|7
 楼主| 渔夫的烟斗 发表于 2016-12-29 08:29 | 显示全部楼层 |阅读模式
本帖最后由 渔夫的烟斗 于 2016-12-29 12:00 编辑


  1. #include <reg52.h>
  2. void Delay1000ms()                //@11.0592MHz
  3. {
  4.         unsigned char i, j, k;

  5.         i = 43;
  6.         j = 6;
  7.         k = 203;
  8.         do
  9.         {
  10.                 do
  11.                 {
  12.                         while (--k);
  13.                 } while (--j);
  14.         } while (--i);
  15. }

  16. void uart_init()
  17. {                TMOD=0x20;
  18.        PCON=0x00;
  19.        SCON=0x50;
  20.        TL1=0xfd;
  21.        TH1=0xfd;
  22.        TR1=1;
  23.         
  24. }

  25. void main()
  26. {
  27.         //char a;
  28.         uart_init();
  29.         
  30.         
  31.         
  32.         while(1)
  33.         {        
  34.         SBUF=0x56;
  35.         Delay1000ms();        
  36.         }
  37.         
  38.         


  39. }
  40. void uart_int() interrupt 4
  41. {
  42.         
  43.         if(RI)
  44.         {
  45.                 RI=0;
  46.                 SBUF=0X11;
  47.                
  48.                
  49.         }
  50.         if(TI)
  51.         {
  52.         TI=0;
  53.                 SBUF=0X77;
  54.         }
  55. }
经过候修改发现PROTUES中的串口应该是直连(相当于是单片机串口的延长线,在vspd软件中默认为两个串口是绞合连接)。修改完这个后,利用STC下载软件上的串口助手调试,发现,只能通过HEX格式进行发送单片机才会有回应。但是接收到的若以文本格式来接收却是显示乱码(?之类的),以HEX来显示,显示的值却不能对上号,比如 在单片机设置在接收到PC发送的数据则回应一个 “o”  ,在串口助手中显示FA(以HEX显示,因为文本显示不出来。)

  1. void uart_itp() interrupt 4
  2. {
  3.         if(RI)
  4.         {
  5.                 RI=0;
  6.                 p=SBUF;
  7.                
  8.                 if(p==1){P1=0XFF;}//send_str();
  9.                 if(p==2){P1=0X00;send_str();}
  10.                 if(p==0x03){P1=0XFF;}//send_str();
  11.                 if(p==0x04)P1=0X00;
  12.                
  13.                
  14.         }
  15.         

  16. }
TI在发送函数中进行清零操作

 楼主| 渔夫的烟斗 发表于 2016-12-29 08:34 | 显示全部楼层
  1. void uart_init()
  2. {                TMOD=0x20;
  3.        PCON=0x00;
  4.        SCON=0x50;
  5.        TL1=0xfd;
  6.        TH1=0xfd;
  7.        TR1=1;
  8.                 ES=1;
  9.                 EA=1;
  10.        
  11. }//上边漏了两句话
 楼主| 渔夫的烟斗 发表于 2016-12-29 08:38 | 显示全部楼层
PROTUES中的COMPIM通过VSPD(虚拟串口)与STC-ISP中的串口助手相连,在VSPD可以看一有数据传输。
皈依 发表于 2016-12-29 11:51 | 显示全部楼层
23还有5 要共地
 楼主| 渔夫的烟斗 发表于 2016-12-29 12:53 | 显示全部楼层
  1. void send_str()
  2. // 传送字串
  3. {
  4. unsigned char i = 0;
  5. while(str1[i] != '\0')
  6. {
  7.    SBUF = str1[i];
  8.    while(!TI);     // 等特数据传送
  9.    TI = 0;       // 清除数据传送标志
  10.    i++;      // 下一个字符
  11. }
  12. }
 楼主| 渔夫的烟斗 发表于 2016-12-30 09:40 | 显示全部楼层
主要是接收到的全是乱码。。用官方的例程也是一样的效果。
menfiss 发表于 2016-12-30 09:54 来自手机 | 显示全部楼层
本帖最后由 menfiss 于 2016-12-30 09:57 编辑

发一些特殊的字符,比如00h,ffh,55h,aah等,看看收到的是什么?
menfiss 发表于 2016-12-30 09:56 来自手机 | 显示全部楼层
发一些特殊的字符,比如00h,ffh,55h,aah等,看看收到的是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

185

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部