编写单片机串口收发数据的完整程序(C语言编写)

编写单片机串口收发数据的完整程序(C语言编写),第1张

我用颤码贺的新唐芯片,8051内核,跟51差不多,望采纳茄派

void UART_Initial (void)

{

P02_Quasi_Mode //Setting UART pin as Quasi mode for transmit

P16_Quasi_Mode //Setting UART pin as Quasi mode for transmit

SCON_1 = 0x50 //UART1 Mode1,REN_1=1,TI_1=1

T3CON = 0x08 //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1

clr_BRCK

RH3= HIBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */

RL3= LOBYTE(65536 - (1000000/u32Baudrate)-1) /*16 MHz */

set_TR3//Trigger Timer3

}

以上是初始化的

void Send_Data_To_UART1(UINT8 c)

{

TI_1 = 0

SBUF_1 = c

while(TI_1==0)

}

这个是发送模世

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

{

if (RI_1==1)

{ /* if reception occur */

clr_RI_1/* clear reception flag for next reception */

Receive_Date[c] = SBUF_1

if (Receive_Date[0] == First_Date)

{

c++

}

else if(Receive_Date_Size >0 &&Receive_Date_Size <4)

{

c++

}

else if(Receive_Date[c] == Last_Date &&Receive_Date_Size ==4)

{

c = 0

Flag_Receive_One = 1

}

else

{

c = 0

}

}

}

接收

#include <reg51.h>

#include <intrins.h>

unsigned char key_s, key_v, tmp

char code str[] = "welcome! www.willar.com \n\r"

void send_str()

bit scan_key()

void proc_key()

void delayms(unsigned char ms)

void send_char(unsigned char txd)

sbit K1 = P1^4

main()

{

TMOD = 0x20// 定时器1工作于8位自动重载模式, 用于产生波特率

TH1 = 0xFD// 波特率9600

TL1 = 0xFD

SCON = 0x50// 设定串行口工作方式

PCON &= 0xef// 波特率不倍增

TR1 = 1// 启动定时器1

IE = 0x0// 禁止任何中断

while(1)

{

if(scan_key()) // 扫描按键

{

delayms(10)// 延时去抖动

if(scan_key()) // 再次扫描

{

key_v = key_s// 保存键值

proc_key()// 键处理

}

}

if(RI) // 是否有数据到来

{

RI = 0

tmp = SBUF// 暂存接收到的数据

P0 = tmp// 数据传送到P0口

send_char(tmp)// 回传接收到的数据

}

}

}

bit scan_key()

// 扫描按键

key_s = 0x00

key_s |= K1

return(key_s ^ key_v)

}

void proc_key()

// 键处理

{

if((key_v &0x01) == 0)

{ // K1按下

send_str()// 传送字串"welcome!...

}

}

void send_char(unsigned char txd)

// 传送一个字符

{

SBUF = txd

while(!TI)// 等特数据传送

TI = 0// 清除数据传送标志

}

void send_str()

// 传送字串

{

unsigned char i = 0

while(str[i] != '\0')

{

SBUF = str[i]

while(!TI)// 等特数据传送

TI = 0// 清除数据传送标志

i++// 下一个字符

}

}

void delayms(unsigned char ms)

// 延时子程序

{

unsigned char i

while(ms--)

{

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

}

}

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多简激则低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为铅宴了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标拦棚准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。


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

原文地址: https://outofmemory.cn/yw/12560467.html

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

发表评论

登录后才能评论

评论列表(0条)

保存