c8051f020C语言程序,C8051F020编程UART串口收发数据
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串口收发数据相关推荐
- MTK:UART串口收发数据
MTK之UART串口收发数据 转:https://blog.csdn.net/ivy_reny/article/details/51192110 寄存器 UARTn_RBR: Rx Buffer Re ...
- MTK之UART串口收发数据
寄存器 UARTn_RBR: Rx Buffer Register,通过读取该寄存器接收数据.要求LCR[7]=0. UARTn_THR: Tx Holding Register,数据先写入该寄存器 ...
- c8051f020C语言程序,C8051F020应用程序包 - 其它资源 - 源码中国
压缩包 : 171544c8051f020应用程序包.rar 列表 七段码显示\c8051F020.h 七段码显示\cyglink.txt 七段码显示\disp 七段码显示\disp.#1 七段码显示 ...
- c语言接收串口数据信息,C51通用串口收发数据C语言程序
#include //C51通用串口收发数据C语言程序模块 #define uchar unsigned char #define uint unsigned int uchar shu; bit ...
- 利用UART串口实现数据的收发
cortex-A7核通过UART串口实现数据的收发 1.简单理解总线 总线即为各个部位之间通信的一种媒介,芯片内部的总线控制的是内部各个控制器和核之间的通信,例如SOC通过AHB4总线可以和RCC控制 ...
- Uart串口收发回环验证
Uart串口收发回环验证 接受模块 发送模块 波特率设置模块 顶层模块 TB Modelsim仿真结果 板级验证 总结 本次所做的项目比较复杂(对我本人来讲),设计一个Uart IP核,在其基础,封装 ...
- 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭
实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...
- STM32 HAL库串口收发数据
STM32 HAL库串口收发数据 许多传感器的使用方法是:单片机给传感器发送一帧数据,然后传感器返回单片机一帧有用数据,所以串口的收发功能十分重要. STM32cubeMX的配置 时钟和下载方式就不讲 ...
- c语言 程序 作文,编程之乐作文600字
大多数人对编程不感兴趣,因为他们认为编程枯燥乏味,就是一堆乱七八糟的代码.可我偏偏对编程感兴趣,因为当你成功编出程序后,你会觉得很有成就感,那是无与伦比的. 编程,指的是用电脑制作程序,就是用各种代码 ...
最新文章
- 幅度调制后的频率混叠
- hbuilderx 2.9.8 公用css样式_浅谈关于vue中scss公用的解决方案
- ICE简单介绍及使用示例
- 区块链研究生专业_滁州区块链平台技术开发专业软件公司
- macOS Big Sur中“通知中心”的小组件
- 软件开发过程中需要的文档汇总
- 幼儿-综合素质【1】
- 免费抖音短视频素材网站分享
- 何凯明最新成果PointRend解析
- JavaScript 游戏开发:手把手实现碰撞物理引擎
- android添加本地资源文件,本地html文件放置位置,android中加载本地Html文件
- NLP-自然语言处理入门(持续更新)
- Value *** is outside of valid range for type java.lang.Integer
- 文件夹提示文件或目录损坏且无法读取
- 软件测试技能大赛山东省,2018年全国职业院校技能大赛山东省选拔赛高职组软件测试赛项规程.pdf...
- 万字长文带你解读Linux
- Oracle 错误代码详解及解决方式--ORA
- CommonJs 和 ESModule 的 区别整理
- smartSVN 分支合并到主干上,iOS 编译时链接错误
- 大学生求职的互联网“围城”:被神化的“大厂梦”