请大家帮忙看一下,我用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 !,首字母发了两遍,不知道什么原因,请指点一下,谢谢。
|