51单片机串口通信c语言编程

51单片机串口通信c语言编程,第1张

#include <REG52.H>

#define uchar unsigned char

#define uint unsigned int

sbit ring=P3^7

sbit CASE1=P2^0

sbit CASE2=P2^1

sbit CASE3=P2^2

sbit CASE4=P2^3

uchar se=0,re=0

uchar temp=0

void wait(uint cnt)

{

while(--cnt)

}

//串口发送程序

void send(uchar se)

{

SBUF=se //发送数据

while(TI == 0)

TI = 0

}

//串口接收程序

uchar receive(void)

{

re=SBUF //接收数据

while(RI==0)

RI=0

return re

}

//串口初始化

void sinti(void)

{

SCON = 0x50

TMOD |= 0x20

TH1 = 0xFD

TR1 = 1

EA= 1

ES= 1

}

void delay(int cnt)

{

while(--cnt)

}

//主程序

int main (void)

{

int i

sinti() //串口初始化程序

ring=1

while(1)

{

while (1)

{

if(CASE1==0)

{

send('a')

ring=0

break

}

if(CASE2==0)

{

send('b')

ring=0

break

}

if(CASE3==0)

{

send('c')

ring=0

break

}

if(CASE4==0)

{

send('d')

ring=0

break

}

}

if(ring==0)

{

wait(60000)

ring=1

}

for(i=0i<10000i++)

}

}

//串口中断程序

void UART_SER (void) interrupt 4 //串行中断服务程序

{

if(RI)//判断是接收中断产生

{

RI=0 //标志位清零

temp=SBUF

}

if(TI)//如果是发送标志位,清零

TI=0

}

编程原理

程序1为查询通信方式接口程序,为一典型的数据采集例程。其中bioscom()函数初始化COM1(此函数实际调用BIOS

INT

14H中断0号功能)。这样在程序中就避免了具体设置波特率因子等繁琐工作,只需直接访问发送/接收寄存器(3F8H)和线路状态寄存

发送:

#include

<reg52.h>

#include<intrins.h>

#include<string.h>

#define

uchar

unsigned

char

uchar

data

i,j,p,TEST

sbit

INTT0=P3^2

uchar

code

V_35[10]={'V','o','l','t','

','3','.','5',13,10}

void

Init()

void

Delay()

void

Volt_35()

void

main()

{

Init()

while(1)

{

if(TEST)

{

Volt_35()

TEST=0

}

}

}

void

Init()

{

P0=0XFF

//I/O口初始化

P1=0xFF

P2=0XFF

P3=0xFF

SCON=0x50

//设置成串口方式1

T2CON=0x34

TH2=0xff

//晶振11.0592MHZ,波特率9600

TL2=0xdc

RCAP2H=0XFF

RCAP2L=0XdC

EA=1

EX0=1

IT0=1

TEST=0

}

void

Delay()

{

for(i=0i<100i++)

for(j=0j<100j++)

}

void

Volt_35()

{

for(p=0p<10p++)

{

SBUF=V_35[p]

while(!TI)

TI=0

}

}

void

int0svr(void)

interrupt

0

using

1

{

Delay()

if(!INTT0)

{

while(!INTT0)

TEST=1

}

}

接收:

#include

<reg52.h>

#include<intrins.h>

#include<string.h>

#define

uchar

unsigned

char

uchar

data

i

void

Init()

void

main()

{

Init()

while(1)

{

for(i=0i<10i++)

{

while(!RI)

P1=SBUF

RI=0

}

}

}

void

Init()

{

P0=0XFF

P1=0xFF

P2=0XFF

P3=0xFF

SCON=0x50

T2CON=0x34

TH2=0xff

TL2=0xdc

RCAP2H=0XFF

RCAP2L=0XdC

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11003148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存