标题:
stc15w404as单片机串口发送程序问题
[打印本页]
作者:
老董
时间:
2021-11-18 15:05
标题:
stc15w404as单片机串口发送程序问题
这个程序运行后 串口调试助手应该能收到10个“m”才对 可是实际只能收到一个 弄了好长时间也搞不懂 希望各位大神能指导一下 十分感谢!
单片机源程序如下:
#include "stc15.h"
# include <intrins.h>
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
#define FOSC 11059200L //系统频率
#define BAUD 4800 //串口波特率
sbit k=P1^2;
unsigned char i;
void delay(unsigned int i)
{
while(i--);
}
void qie_huan() //串口引脚选择函数
{
/* 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;
*/
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
qie_huan();
SCON = 0x50;
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
while(1)
{
if(k==0)
{
delay(1000);
if(k==0)
{
for(i=0;i<10;i++)
{
SBUF='m';
}
while(!k);
}
}
}
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
P0 = SBUF; //P0显示串口数据
}
if (TI)
{
TI = 0; //清除TI位
}
}
复制代码
作者:
Y_G_G
时间:
2021-11-18 16:42
串口发送之后是要等待发送完成的
大概是这样的
void Uart1_Isr() interrupt 4 //串口1中断函数,这里要参考数据手册来编写代码
{
if(TI) //如果是发送中断触发,就处理发送中断
{
TI=0; //发送中断
busy=0;
}
if(RI)
{
RI=0;
}
}
void Send_Out_COM(unsigned char COM) //发送一个字节数据
{
while(busy); //等待上次发送完成,Busy在串口2完成发送后清除
busy=1;
SBUF=COM;
}
作者:
wulin
时间:
2021-11-18 21:12
#include "stc15.h"
#include <intrins.h>
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
#define FOSC 11059200L //系统频率
#define BAUD 4800 //串口波特率
sbit k=P1^2;
unsigned char i;
void delay(unsigned int i)
{
while(i--);
}
void qie_huan() //串口引脚选择函数
{
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;
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
qie_huan();
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xE0; //设置定时初始值
T2H = 0xFE; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
while(1)
{
if(k==0)
{
delay(1000);
if(k==0)
{
for(i=0;i<10;i++)
{
SBUF='m';
while(!TI);
TI=0;
}
}
}
}
}
复制代码
作者:
老董
时间:
2021-11-19 14:59
谢谢 已经解决了 按照2楼大师的办法 3楼大师的做法是查询方法也好用 多谢了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1