求c8051F020的UART串口通信程序

求c8051F020的UART串口通信程序,第1张

//摘要: 掌握 UART0配置及使用,程序中将UART0 配置到P0.0、 P0.1。利中岁用串口调试助手,波特率设置为4800,并选择十六进制发送和显示,十六进制发送为偶数个,不然会少返回一个数,详见程序注释。

#include "c8051f020.h"

unsigned char data1

void SYSCLK_Init()

void PORT_Init()

void UART0_Init()

void SYSCLK_Init()

{

unsigned int i

OSCXCN=0X67//0X67=0110,0111

for(i=0i<256i++)//等待>1ms

while(!(OSCXCN&0X80)) //等待XTLVLD变为1

OSCICN=0X88//时钟失效监测器,选择外部时钟源作为系统时钟

}

void PORT_Init()

{

XBR0 = 0x27/*交叉开关配置,URAT总线TX0置到P0.0口,RX0置到P0.1口, SPI总线SCK配置到P0.2口,

MOSI为P0.4口卖袜睁, NSS为P0.5,MISO配置到P0.3口,IIC总线SDA置到P0.6口�SCK置到P0.7 TX1,RX1配置到P1.0,P1.1,CEX0,CEX1,配置到P1.2,P1.3,外部中断int0配置到P1.4 */

XBR1 = 0x04

XBR2 = 0x44 /*允许功能选择开关有效*/

P0MDOUT = 0x1A/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/

P74OUT =0xff

}

void UART0_Init()

{

SCON0=0x50 //串口方式1

TMOD=0X20//选用定时器1作为波特率发好桥生器

TH1=0xF4 //波特率为4800

TL1=0xF4

ES0=1 //开启串口中断0

TF1=0

TR1=1 //定时器启动

PCON=0X80//波特率加倍 波特率为9600

TI0=1

}

void UART0_ISR() interrupt 4 using 1

{

if(RI0)

{

RI0=0//中断接收标志清零

data1=SBUF0//接收数据

SBUF0=data1//发送数据

while(TI0==0)

TI0=0//发送标志清零

}

}

main()

{

WDTCN=0XDE

WDTCN=0XAD

SYSCLK_Init()

PORT_Init()

UART0_Init()

EA=1

while(1)

}

当你有数据接收到了以后立即触发中断,但是你在中断函数里面立即将RI0清零处理了,这样一来你的RI0几乎总是等于零的,这样

if(RI0)

{

RI0 = 0// 清除RI1标志位

*chr = SBUF0// 读取数据

return TRUE// 返回接收数据成功

}

else

return FALSE// 接收数据失败,无数据

}

这个条件永远不成立,所以你得不到数据,有两种解决办法,第一将中断关闭,这样也可以运行程序,但是不完美,第二在中断函数里面将SBUF0的数粗悔宽此据存到一个全局变量里面,同时用一个标志位指示数据的接收情况。

然后。。。。然后,,,你岩巧正应该明白了。。祝你成功。。

#include "C8051F340.h"

#define SYSCLK 48000000

#define BAUDRATE 9600

void UART0_Init(void)

{

TCON = 0x40

TMOD = 0x20 //Timer1工作8位重装载,

TH1 = 256-(SYSCLK+BAUDRATE)/2l/BAUDRATE

SCON0 = 0x10 //UART0接收允许答喊

}

void main(void)

{

PCA0MD&= ~0x40 // 关闭看门狗帆世

PCA0MD= 0x00

UART0_Init()

P0MDOUT = 0x10

XBR0 = 0x01

XBR1 = 0x40

IE= 0x90 //UART中态举肢断及全局中断使能

while(1)

{

}

}

void UART0_ISR(void) interrupt INTERRUPT_UART0

{

unsigned char value

if(RI0==1)

{value=SBUF0

SBUF0=value

}

TI0=0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存