打印
[国产单片机]

字符串发送问题

[复制链接]
866|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abchhcba2012|  楼主 | 2014-12-15 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请大家帮忙看一下,我用STC15W单片机串口2与计算机做通信实验,下面是实验程序,
#include "reg51.h"
#include "intrins.h"

typedef unsigned char uchar;
typedef unsigned int uint;

#define FOSC 18432000       //系统频率
#define BAUD 9600              //串口波特率
#define S2RI  0x01              //S2CON.0
#define S2TI  0x02              //S2CON.1
/*----------------------------
         寄存器定义
----------------------------*/
sfr AUXR  = 0x8e;                             //辅助寄存器
sfr S2CON =        0x9a;                        //串口2控制寄存器
sfr IE2   =        0xaf;                                //串口2中断控制寄存器
sfr S2BUF =        0x9b;                        //串口2缓存寄存器
sfr T2H   = 0xd6;                             //定时器2高8位
sfr T2L   = 0xd7;                             //定时器2低8位
sfr P_SW1 = 0xA2;                         //外设功能切换寄存器1
sfr P_SW2 = 0xBA;                         //外设功能切换寄存器2
sfr P1M1 = 0x91;                              //IO口模式控制寄存器
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sbit PM01=P1^3;
sbit PM00=P1^4;
/*----------------------------
         函数声明
----------------------------*/
void SendData(uchar dat);
void SendString(uchar *s);
/*----------------------------
         主函数
----------------------------*/
void main()
{
           P1M1=0;                                                      //将IO口设置为上电弱上拉
        P1M0=0;
        P2M1=0;
        P2M0=0;
        P3M1=0;
        P3M0=0;
        PM01=0;
        PM00=1;
        P_SW2 = P_SW2&0xFE;
        P_SW1 = P_SW1&0x3F;                            //串口1设置为(P3.0/RxD, P3.1/TxD)
        S2CON =0x50;                                                  //串口2工作于模式0,开串口2接收
        SCON = 0x50;                                                  //串口1工作于模式1,开串口1接收
        T2L = (65536 - (FOSC/4/BAUD));              //设置波特率重装值
        T2H = (65536 - (FOSC/4/BAUD))/256;
        AUXR = 0x15;                                                  //设置定时器2工作1T,串口1、2用定时器2做波特率发生器
        PS=1;                                                          //设置串口1优先级为高
        ES = 1;                                                      //使能串口1中断
        IE2=0x01;                                                 //使能串口2中断
        EA = 1;                                                                  //开总中断
        SendString("STC15F2K60S2\r\nUart2 Test !\r\n");
        while(1);
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(uchar dat)
{
        S2BUF=dat;
        while(!(S2CON & S2TI));
         S2CON &= ~S2TI;              //清除S2TI位
}

/*----------------------------
发送字符串
----------------------------*/
void SendString(uchar *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}
上电以后,串口助手显示的字符是SSTC15F2K60S2\r\nUart2 Test !,首字母发了两遍,不知道什么原因,请指点一下,谢谢。

相关帖子

沙发
McuPlayer| | 2014-12-17 15:36 | 只看该作者
把SendData改一下,写发送寄存器前,也检测下,是否空闲

使用特权

评论回复
板凳
tianm| | 2014-12-18 23:53 | 只看该作者
检查指针

使用特权

评论回复
地板
abchhcba2012|  楼主 | 2015-1-6 10:07 | 只看该作者
tianm 发表于 2014-12-18 23:53
检查指针

不好意思,过了好多天才回复,能再说的详细点吗?感觉指针这部分没有问题啊

使用特权

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

本版积分规则

14

主题

68

帖子

0

粉丝