打印

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

[复制链接]
599|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
渔夫的烟斗|  楼主 | 2016-12-29 08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 渔夫的烟斗 于 2016-12-29 12:00 编辑


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

        i = 43;
        j = 6;
        k = 203;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void uart_init()
{                TMOD=0x20;
       PCON=0x00;
       SCON=0x50;
       TL1=0xfd;
       TH1=0xfd;
       TR1=1;
        
}

void main()
{
        //char a;
        uart_init();
        
        
        
        while(1)
        {        
        SBUF=0x56;
        Delay1000ms();        
        }
        
        


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

void uart_itp() interrupt 4
{
        if(RI)
        {
                RI=0;
                p=SBUF;
               
                if(p==1){P1=0XFF;}//send_str();
                if(p==2){P1=0X00;send_str();}
                if(p==0x03){P1=0XFF;}//send_str();
                if(p==0x04)P1=0X00;
               
               
        }
        

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

相关帖子

沙发
渔夫的烟斗|  楼主 | 2016-12-29 08:34 | 只看该作者
void uart_init()
{                TMOD=0x20;
       PCON=0x00;
       SCON=0x50;
       TL1=0xfd;
       TH1=0xfd;
       TR1=1;
                ES=1;
                EA=1;
       
}//上边漏了两句话

使用特权

评论回复
板凳
渔夫的烟斗|  楼主 | 2016-12-29 08:38 | 只看该作者
PROTUES中的COMPIM通过VSPD(虚拟串口)与STC-ISP中的串口助手相连,在VSPD可以看一有数据传输。

使用特权

评论回复
地板
皈依| | 2016-12-29 11:51 | 只看该作者
23还有5 要共地

使用特权

评论回复
5
渔夫的烟斗|  楼主 | 2016-12-29 12:53 | 只看该作者
void send_str()
// 传送字串
{
unsigned char i = 0;
while(str1[i] != '\0')
{
   SBUF = str1[i];
   while(!TI);     // 等特数据传送
   TI = 0;       // 清除数据传送标志
   i++;      // 下一个字符
}
}

使用特权

评论回复
6
渔夫的烟斗|  楼主 | 2016-12-30 09:40 | 只看该作者
主要是接收到的全是乱码。。用官方的例程也是一样的效果。

使用特权

评论回复
7
menfiss| | 2016-12-30 09:54 | 只看该作者
本帖最后由 menfiss 于 2016-12-30 09:57 编辑

发一些特殊的字符,比如00h,ffh,55h,aah等,看看收到的是什么?

使用特权

评论回复
8
menfiss| | 2016-12-30 09:56 | 只看该作者
发一些特殊的字符,比如00h,ffh,55h,aah等,看看收到的是什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

178

帖子

2

粉丝