C8051F020编程UART串口收发数据

我编了一个 老是编译不过去 求高手改正

我用的是UART0端口 方式2

程序如下

//>>UART0串口编程--向PC发送和接受字符串<<

//

//--------------------------------------------------------------------------

#include

#include

#define uchar unsigned char

#define uint unsigned int

//----------------------------------------------------------------------

//参数设置区

//----------------------------------------------------------------------

#define BAUDRATE 138240 //波特率bps

#define SYSCLK 22118400 //外部晶振,修改也要修改OSCXCN

#define T4VAL (65536-SYSCLK/BAUDRATE/32) //定时器4初值

uchar idata reaeice_flag=0;

extern uchar idata timer_sec;

uchar idata send_buffer[10]; //数据缓冲区

uchar idata receive_buffer[20];//接收数据队列

uchar time = 0; //软件计时次数

uchar period = 25; //定时间隔 20ms * 25 =500ms

//----------------------------------------------------------------------

//子函数声明

//----------------------------------------------------------------------

void SYSCLK_Init(void); //系统时钟初始化

void PORT_Init(void); //端口初始化

void UART0_Init(void); //串口UART0初始化

void Send_Char(uchar ch); //发送单个字符

void Send_String(uchar * send_buffer, uint S_len); //发送一个字符串

void Receive_Char(uchar ch); //接收单个字符

void Receive_String(uchar * receive_buffer, uint R_len); //接受一个字符串

void Delay(uint t); //延迟

//----------------------------------------------------------------------

//主函数

//----------------------------------------------------------------------

void main(void)

{

EA = 0; //关全局中断

WDTCN = 0xde; //禁止看门狗

WDTCN = 0xad;

SYSCLK_Init(); //时钟初始化

PORT_Init(); //端口初始化

UART0_Init(); //串口初始化

EA = 1; //开中断

while(1)

{

if(TI0)

Send_String(send_buffer,S_len(send_buffer)); //发送字符串

else

Recieve_String(receive_buffer,R_len(receive_buffer));

Delay(1000); //延迟

}

}

//----------------------------------------------------------------------

//子函数具体实现

//----------------------------------------------------------------------

//系统时钟初始化

void SYSCLK_Init(void)

{

uint i;

OSCXCN = 0x67;

//采用外部晶振22.1184MHz,不分频. 选型OSCXCN=0110,0111

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

while(!(OSCXCN&0x80)); //查询直到XTLVLD=1,晶振稳定

OSCICN = 0x88;

//切换到外部振荡器,允许时钟失效监测器. OSCICN=1000,1000

}

//端口初始化

void PORT_Init(void)

{

XBR0 = 0x04; //开启UART0

XBR1 = 0x00;

XBR2 = 0x44;

//交叉开关使能,启用UART0,分配到P0.0 P0.1

P0MDOUT |= 0x01;

//P0.0为推拉方式输出,即TX0所在的端口

P1MDOUT |=0x02;

//P0.1为推拉方式输出,即RX0所在的端口

}

//串口0初始化

void UART0_Init(void)

{

SCON0 = 0xBC; //SCON0:模式2,9位UART,使能RX

PCON = 0x10; //使能UART0 的波特率/2 功能

SCON0 |= 0x02; //声明准备就绪,可以发送(TI0=1)

SCON0 = 0x01; //声明准备就绪,可以接受(RI0=1)

}

//发送单个字符

void Send_Char(uchar ch)

{

SBUF0 = ch; //送入缓冲区

while((SCON0&0x02) == 0x00); //等待发送完毕

SCON0 &=0xBC; //软件清零 TI1 = 0

}

//发送字符串,调用Send_Char() len字符串长度

void Send_String(uchar * send_buffer,uint S_len)

{

uint k = 0;

do

{

Send_Char(*(send_buffer + k));

k++;

} while(k < S_len);

}

//接收单个字符

void Recieve_char(uchar sh)

{

SBUF0 = sh;

while((SCON0&0x01)== 0x00);

SCON0 &=0xBC;

}

void Recieve_String(uchar * receive_buffer,uint R_len)

{

uint j = 0;

do

{Recieve_char(*(receive_buffer + j));

j++;

}while(j < R_len)

}

//延迟

void Delay(uint x)

{

uint i;

do{

x--;

for(i=0;i<14;i++){;}

}while(x);

}

//-------------------------------------------------------------

//程序结束

c8051f020C语言程序,C8051F020编程UART串口收发数据相关推荐

  1. MTK:UART串口收发数据

    MTK之UART串口收发数据 转:https://blog.csdn.net/ivy_reny/article/details/51192110 寄存器 UARTn_RBR: Rx Buffer Re ...

  2. MTK之UART串口收发数据

    寄存器 UARTn_RBR: Rx Buffer Register,通过读取该寄存器接收数据.要求LCR[7]=0.  UARTn_THR: Tx Holding Register,数据先写入该寄存器 ...

  3. c8051f020C语言程序,C8051F020应用程序包 - 其它资源 - 源码中国

    压缩包 : 171544c8051f020应用程序包.rar 列表 七段码显示\c8051F020.h 七段码显示\cyglink.txt 七段码显示\disp 七段码显示\disp.#1 七段码显示 ...

  4. c语言接收串口数据信息,C51通用串口收发数据C语言程序

    #include //C51通用串口收发数据C语言程序模块 #define  uchar unsigned char #define uint unsigned int uchar shu; bit ...

  5. 利用UART串口实现数据的收发

    cortex-A7核通过UART串口实现数据的收发 1.简单理解总线 总线即为各个部位之间通信的一种媒介,芯片内部的总线控制的是内部各个控制器和核之间的通信,例如SOC通过AHB4总线可以和RCC控制 ...

  6. Uart串口收发回环验证

    Uart串口收发回环验证 接受模块 发送模块 波特率设置模块 顶层模块 TB Modelsim仿真结果 板级验证 总结 本次所做的项目比较复杂(对我本人来讲),设计一个Uart IP核,在其基础,封装 ...

  7. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  8. STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是:单片机给传感器发送一帧数据,然后传感器返回单片机一帧有用数据,所以串口的收发功能十分重要. STM32cubeMX的配置 时钟和下载方式就不讲 ...

  9. c语言 程序 作文,编程之乐作文600字

    大多数人对编程不感兴趣,因为他们认为编程枯燥乏味,就是一堆乱七八糟的代码.可我偏偏对编程感兴趣,因为当你成功编出程序后,你会觉得很有成就感,那是无与伦比的. 编程,指的是用电脑制作程序,就是用各种代码 ...

最新文章

  1. 幅度调制后的频率混叠
  2. hbuilderx 2.9.8 公用css样式_浅谈关于vue中scss公用的解决方案
  3. ICE简单介绍及使用示例
  4. 区块链研究生专业_滁州区块链平台技术开发专业软件公司
  5. macOS Big Sur中“通知中心”的小组件
  6. 软件开发过程中需要的文档汇总
  7. 幼儿-综合素质【1】
  8. 免费抖音短视频素材网站分享
  9. 何凯明最新成果PointRend解析
  10. JavaScript 游戏开发:手把手实现碰撞物理引擎
  11. android添加本地资源文件,本地html文件放置位置,android中加载本地Html文件
  12. NLP-自然语言处理入门(持续更新)
  13. Value *** is outside of valid range for type java.lang.Integer
  14. 文件夹提示文件或目录损坏且无法读取
  15. 软件测试技能大赛山东省,2018年全国职业院校技能大赛山东省选拔赛高职组软件测试赛项规程.pdf...
  16. 万字长文带你解读Linux
  17. Oracle 错误代码详解及解决方式--ORA
  18. CommonJs 和 ESModule 的 区别整理
  19. smartSVN 分支合并到主干上,iOS 编译时链接错误
  20. 大学生求职的互联网“围城”:被神化的“大厂梦”

热门文章

  1. 删除cookie之js实现
  2. 使用 Ngrx ActionSubject 监听 Dispatched NgRx Actions
  3. 网络安全进阶学习第一课——认证崩溃之弱口令与暴力破解
  4. 编写LitmusRT调度器插件
  5. 阿里云通用算力型u1实例规格介绍(实例特点、适用场景、指标数据)
  6. URI URL URN
  7. av1 spec 下载地址
  8. 【Beta阶段任务分配】命劫开发
  9. MODBUS学习笔记
  10. linux之shell-信号及trap信号捕捉