3593|1

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C8051F020的UART串口通讯问题? [复制链接]

c8050f020有有UART0和UART1两种工作方式,且C8051F020有两个串口分别是串口0和串口1,根据原理图,串口0是P0.0和P0.1,串口1是P0.2和P0.3,现在我有以下用UART0编的串口通讯程序:
//端口初始化
void PORT_Init(void)
{
XBR0 = 0x04; //允许UART0,RX,TX连到2个端口引脚. XBR0=0000,0100
XBR1 = 0x00;
XBR2 = 0x40; //交*开关使能
P0MDOUT  ?= 0x03; //P0.0为推拉方式输出,即TX0,RX0所在的端口 0000,0011
P1MDOUT  ?=0x40; //P1.6为推拉方式输出,即LED所在的端口 0100,0000
}
//串口初始化
void UART0_Init(void)
{
SCON0 = 0x50; //选择串口方式1,波特率可变 SCON0=0101,0000
TMOD = 0x20; //选择T1,方式2,自动再装入8位计数器
TH1 = (int)TXVAL; //T1初值,根据波特率,时钟等计算. 0xF4, bps=4800bps
TL1 = (int)TXVAL;
ES0 = 1; //UART0中断开启
TR1 = 1; //启动定时器T1
PCON  ?= PCONVAL; //PCON=0x00,SMOD = 0 ; PCON=0x80,SMOD=1
TI0 = 1; //声明TX0就绪,可以发送
TR0 = 1;
}
//发送单个字符
void Send_Char(uchar ch)
{
SBUF0 = ch; //送入缓冲区
while(TI0 == 0); //等待发送完毕
TI0 = 0; //软件清零
}
//UART0中断服务程序. 接收字符
void UART0_ISR(void) interrupt 4 using 1
{
uchar rxch;
if(RI0) //中断标志 RI0=1 数据完整接收
{
RI0 = 0; //软件清零
rxch = SBUF0; //读缓冲
if(readCounts >=MAX_LEN)  
{
readCounts = 0;
readFlag = 1;
}
trdata[readCounts] = rxch; //存入数组,供发送
readCounts++;
}
}

——————————————————————————————————————————
请问,此通讯是基于串口0的么?怎么看?如果我要将此串口通讯程序改为串口1,该如何设置?
另外,如果用UART1工作方式来进行串口1通讯又该如何修改呢?
谢谢。

最新回复

选时钟源 然后基本你把那些0改成1,基本上就都可以了....  详情 回复 发表于 2007-10-19 21:58
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
选时钟源

然后基本你把那些0改成1,基本上就都可以了....
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表