51单片机串口通信模板_STC12C5202AD 51单片机串口通信配置模板

本文介绍了如何使用单片机定时器方式2配置波特率为9600,通过C语言实现串口通信。在发送函数中加入延时避免乱码问题,并在ISP软件烧写时注意选择外部晶体振荡器。示例代码展示了初始化串口、发送字符和字符串的函数。
摘要由CSDN通过智能技术生成

定时器方式2:  8位自动重装   波特率 9600

#include

void delayms(int x)

{

int i, j;

for(i = x; i; --i)

for(j= 110; j; --j);

return ;

}

void initSCI(void)

{

SM0 = 0; /*Step 1 : 确定串口通信方式*/

SM1 = 1;

TMOD = 0x20; /*step 2: 根据串口通信方式 确定是否设置波特率*/

TH1 = 0xfd;

TL1 = 0xfd;

TR1 = 1; /*step 3 :启动*/

REN = 1;

EA = 1; /*step 4: 是否启用中断函数*/

ES = 1;

}

void putChar (unsigned char chr)//发送一个字符

{

SBUF = chr;

}

void putStr(unsigned char str[], unsigned char n)

{

while( n-- )

{

SBUF = str[n];

delayms(1);

}

}

int main()

{

initSCI();

while(1)

{

putChar('A');

//operation;

}

return 0;

}

void ser() interrupt 4

{

if( RI )

{

RI = 0;

/*Operation SBUF*/

}

if( TI )

{

TI = 0;

}

return ;

}

Clue 1:发送函数中加延时  否则乱码

Clue 2:ISP软件烧写时 Step4选择外部晶体振荡器  否则乱码

(注意串口中断和发送函数  TI清零重复了 导致无法连续发送)

#include "reg51.h"

#include "intrins.h"

void SendData(unsigned char dat);

void SendString(char *s);

void delay(unsigned char n)

{

unsigned char i, j;

for(i = n; i; --i)

for(j = 110; j; --j);

}

void main()

{

SCON = 0x50;

TMOD = 0x20;

TH1 = TL1 = 0xfd;

TR1 = 1;

ES = 1;

EA = 1;

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

while(1);

}

void Uart_Isr() interrupt 4 using 1

{

if( RI )

{

RI = 0;

}

if(TI)

{

TI = 0;

}

}

void SendData(unsigned char dat)

{

SBUF = dat;

while(!TI);

delay(5);

TI = 0;

delay(5);

}

void SendString(char *s)

{

while(*s)

{

SendData(*s++);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值