stc15w204s步进电机c语言,stc15w204s串口求救

#include "reg51.h"

#include "intrins.h"

typedef unsigned char BYTE;

typedef unsigned int WORD;

#define FOSC 18432000L          //系统频率

#define BAUD 115200             //串口波特率

#define NONE_PARITY     0       //无校验

#define ODD_PARITY      1       //奇校验

#define EVEN_PARITY     2       //偶校验

#define MARK_PARITY     3       //标记校验

#define SPACE_PARITY    4       //空白校验

#define PARITYBIT EVEN_PARITY   //定义校验位

sfr AUXR  = 0x8e;               //辅助寄存器

sfr P_SW1   = 0xA2;             //外设功能切换寄存器1

#define S1_S0 0x40              //P_SW1.6

#define S1_S1 0x80              //P_SW1.7

sbit P22 = P2^2;

sbit P37 = P3^7;  //led

bit busy;

void SendData(BYTE dat);

void SendString(char *s);

void main()

{

P37=1;

ACC = P_SW1;

ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0

P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)

//  ACC = P_SW1;

//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0

//  ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)

//  P_SW1 = ACC;

//

//  ACC = P_SW1;

//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1

//  ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)

//  P_SW1 = ACC;

#if (PARITYBIT == NONE_PARITY)

SCON = 0x50;                //8位可变波特率

#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)

SCON = 0xda;                //9位可变波特率,校验位初始为1

#elif (PARITYBIT == SPACE_PARITY)

SCON = 0xd2;                //9位可变波特率,校验位初始为0

#endif

AUXR = 0x40;                //定时器1为1T模式

TMOD = 0x00;                //定时器1为模式0(16位自动重载)

TL1 = (65536 - (FOSC/4/BAUD));   //设置波特率重装值

TH1 = (65536 - (FOSC/4/BAUD))>>8;

TR1 = 1;                    //定时器1开始启动

ES = 1;                     //使能串口中断

EA = 1;

P37  =1;

_nop_();

_nop_();

_nop_();

P37  =0;

_nop_();

_nop_();

_nop_();

P37  =0;

SendString("STC15F2K60S2\r\nUart Test !\r\n");  //卡在这里了

P37 = 1;

while(1)

{

SendString("STC15F2K60S2\r\nUart Test !\r\n");

P37  =0;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

}

/*----------------------------

UART 中断服务程序

-----------------------------*/

void Uart() interrupt 4 using 1

{

if (RI)

{

RI = 0;                 //清除RI位

P0 = SBUF;              //P0显示串口数据

P22 = RB8;              //P2.2显示校验位

}

if (TI)

{

TI = 0;                 //清除TI位

busy = 0;               //清忙标志

}

}

/*----------------------------

发送串口数据

----------------------------*/

void SendData(BYTE dat)

{

while (busy);               //等待前面的数据发送完成

ACC = dat;                  //获取校验位P (PSW.0)

if (P)                      //根据P来设置校验位

{

#if (PARITYBIT == ODD_PARITY)

TB8 = 0;                //设置校验位为0

#elif (PARITYBIT == EVEN_PARITY)

TB8 = 1;                //设置校验位为1

#endif

}

else

{

#if (PARITYBIT == ODD_PARITY)

TB8 = 1;                //设置校验位为1

#elif (PARITYBIT == EVEN_PARITY)

TB8 = 0;                //设置校验位为0

#endif

}

busy = 1;

SBUF = ACC;                 //写数据到UART数据寄存器

}

/*----------------------------

发送字符串

----------------------------*/

void SendString(char *s)

{

while (*s)                  //检测字符串结束标志

{

SendData(*(s++) );         //发送当前字符

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值