C8051F040的RS485收发程序

合集下载

C8051F系列单片机串口通讯程序-推荐下载

C8051F系列单片机串口通讯程序-推荐下载

C8051F系列单片机串口通讯程序采用C8051F020单片机//串口编程--接收PC发过来的字符串,回发字符串.发送期间中断控制LED灯闪烁//采用外部晶振22.1184MHz 使用定时器1,方式2产生波特率,SMOD = 0或者1 //定时器初值X=256-SYSCLK*(SMOD+1)/(BAUDRATE*384)/#include <C8051F020.h>sfr16 TMR3RL = 0x92; //定时器3重装载寄存器sfr16 TMR3 = 0x94; //定时器3计数器#define uchar unsigned char#define uint unsigned int//----------------------------------------------------------------------//参数设置区//----------------------------------------------------------------------#define BAUDRATE 4800 //波特率bps#define CLKOUT 22118400 //外部晶振,修改也要修改OSCXCN#define SMODVAL 0 //SMOD的值,修改请也修改PCONVAL#define PCONVAL 0x00 //PCON的值,=0x00时SMOD0=0; =0x80时SMOD0=1 #define TXVAL (256-CLKOUT*(SMODVAL+1)/BAUDRATE/384) //定时器初值#define MAX_LEN 10 //每次接收/发送字符串的长度//---------------------------------------------------------------------//全局变量//---------------------------------------------------------------------sbit LED = P1^6; //LED '1'亮'0'灭bit readFlag = 0; //读标志uchar readCounts = 0; //已经读取的字符个数,与MAX_LEN比较uchar idata trdata[MAX_LEN]; //要接收/发送的字符串//----------------------------------------------------------------------//子函数声明//----------------------------------------------------------------------void SYSCLK_Init(void); //系统时钟初始化void PORT_Init(void); //端口初始化void UART0_Init(void); //串口UART0初始化void Send_Char(uchar ch); //发送单个字符void Send_String(uchar * str, uint len); //发送一个字符串void UART0_ISR(); //串口中断服务程序,接收字符void Timer3_Init(uint counts); //定时器3初始化void Timer3_ISR(void); //定时器3中断服务程序//----------------------------------------------------------------------//主函数//----------------------------------------------------------------------void main(void){WDTCN = 0xde; //禁止看门狗WDTCN = 0xad;SYSCLK_Init(); //时钟初始化PORT_Init(); //端口初始化UART0_Init(); //串口初始化Timer3_Init(CLKOUT/12/10); //定时器初始化EA = 1; //开全局中断while(1){if(readFlag) //已经读取{readFlag = 0; //清零Send_String(trdata,MAX_LEN); //发送字符串}}}//----------------------------------------------------------------------//子函数具体实现//----------------------------------------------------------------------//系统时钟初始化void SYSCLK_Init(void){uint i;OSCXCN = 0x67; //采用外部晶振22.1184MHz,不分频. 选型OSCXCN=0110,0111 for(i=0;i<256;i++); //等待>1mswhile(!(OSCXCN&0x80)); //查询直到XTLVLD=1,晶振稳定OSCICN = 0x88; //切换到外部振荡器,允许时钟失效监测器. OSCICN=1000,1000 }//端口初始化void PORT_Init(void){XBR0 = 0x04; //允许UART0,RX,TX连到2个端口引脚. XBR0=0000,0100XBR1 = 0x00;XBR2 = 0x40; //交*开关使能P0MDOUT |= 0x03; //P0.0为推拉方式输出,即TX0,RX0所在的端口0000,0011P1MDOUT |=0x40; //P1.6为推拉方式输出,即LED所在的端口0100,0000}//串口初始化void UART0_Init(void){SCON0 = 0x50; //选择串口方式1,波特率可变SCON0=0101,0000TMOD = 0x20; //选择T1,方式2,自动再装入8位计数器TH1 = (int)TXVAL; //T1初值,根据波特率,时钟等计算. 0xF4, bps=4800bpsTL1 = (int)TXVAL;ES0 = 1; //UART0中断开启TR1 = 1; //启动定时器T1PCON |= PCONVAL; //PCON=0x00,SMOD = 0 ; PCON=0x80,SMOD=1 TI0 = 1; //声明TX0就绪,可以发送TR0 = 1;}//定时器初始化void Timer3_Init(uint counts){TMR3CN = 0x00; //禁止定时器T3,清TF3,采用SYSCLK/12为时基TMR3RL = -counts; //初始化重装载值TMR3 = 0xffff; //设置为立即重装载EIE2 |= 0x01; //T3中断开启TMR3CN |= 0x04; //启动T3}//发送单个字符void Send_Char(uchar ch){SBUF0 = ch; //送入缓冲区while(TI0 == 0); //等待发送完毕TI0 = 0; //软件清零}//发送字符串,调用Send_Char() len字符串长度void Send_String(uchar * str,uint len){uint k = 0;do{Send_Char(*(str + k));k++;} while(k < len);}//定时器3中断服务程序void Timer3_ISR(void) interrupt 14 using 0{TMR3CN &= ~(0x80); //清TF3LED = ~LED;}//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++;}}//-------------------------------------------------------------//程序结束。

RS485通信原理图及程序实例详解

RS485通信原理图及程序实例详解

RS485通信原理图及程序实例详解RS232 标准是诞⽣于 RS485 之前的,但是 RS232 有⼏处不⾜的地⽅:接⼝的信号电平值较⾼,达到⼗⼏ V,使⽤不当容易损坏接⼝芯⽚,电平标准也与TTL 电平不兼容。

传输速率有局限,不可以过⾼,⼀般到⼀两百千⽐特每秒(Kb/s)就到极限了。

接⼝使⽤信号线和 GND 与其它设备形成共地模式的通信,这种共地模式传输容易产⽣⼲扰,并且抗⼲扰性能也⽐较弱。

传输距离有限,最多只能通信⼏⼗⽶。

通信的时候只能两点之间进⾏通信,不能够实现多机联⽹通信。

针对 RS232 接⼝的不⾜,就不断出现了⼀些新的接⼝标准,RS485 就是其中之⼀,它具备以下的特点:采⽤差分信号。

我们在讲 A/D 的时候,讲过差分信号输⼊的概念,同时也介绍了差分输⼊的好处,最⼤的优势是可以抑制共模⼲扰。

尤其当⼯业现场环境⽐较复杂,⼲扰⽐较多时,采⽤差分⽅式可以有效的提⾼通信可靠性。

RS485 采⽤两根通信线,通常⽤ A 和 B 或者 D+和D-来表⽰。

逻辑“1”以两线之间的电压差为+(0.2~6)V 表⽰,逻辑“0”以两线间的电压差为-(0.2~6)V 来表⽰,是⼀种典型的差分通信。

RS485 通信速率快,最⼤传输速度可以达到 10Mb/s 以上。

RS485 内部的物理结构,采⽤的是平衡驱动器和差分接收器的组合,抗⼲扰能⼒也⼤⼤增加。

传输距离最远可以达到 1200 ⽶左右,但是它的传输速率和传输距离是成反⽐的,只有在 100Kb/s 以下的传输速度,才能达到最⼤的通信距离,如果需要传输更远距离可以使⽤中继。

可以在总线上进⾏联⽹实现多机通信,总线上允许挂多个收发器,从现有的 RS485芯⽚来看,有可以挂 32、64、128、256 等不同个设备的驱动器。

RS485 的接⼝⾮常简单,与 RS232 所使⽤的 MAX232 是类似的,只需要⼀个 RS485转换器,就可以直接与单⽚机的 UART 串⼝连接起来,并且使⽤完全相同的异步串⾏通信协议。

基于C8051F060单片机的CAN_RS_485转换器的设计与实现

基于C8051F060单片机的CAN_RS_485转换器的设计与实现

CAN 总 线 ;同 样 ,若 转 换 器 通 过
CAN 通 信 接 口 模 块 从 CAN 总
线接收到数据帧后,通过数据转
换模块判断数据帧的信息,将其
图 2 主程序流程图
《工业控制计算机》2009 年 22 卷第 9 期
57
转换为符合 RS-485 协议的数据帧, 然后通过 RS-485 通信接 口模块发送到 RS-485 总线。 CAN / RS-485 转换器的主程序流 程图如图 2 所示。
RS-485 通信接口模块实现 RS-485 总线通信, 包括 RS- 485 总线数据帧的接收和发送。 数据帧的接收和发送均可采用中 断查询的方法完成。 SBUF1 寄存器每次只接收或发送一个字节。 当软件向 SBUF1 寄存器写入一个字节时开始数据发送。 UART1 中断被允许后,每次发送完成(SCON1 中的 TI1 位被置 '1')或接 收到数据字节(SCON1 中的 RI1 位被置 '1')时将产生中断。 中
参考文献 [1]王 东 ,等.利 用 ZigBee 技 术 构 建 无 线 传 感 器 网 络 [J].重 庆 大 学 学 报
(自 然 科 学 版 ),2006 (8) [2]Chipcon AS SmartRF CC2430 Preliminary Datasheet(rev1.01),
2005.9.15 [3]802.15.4,2003 IEEE Standard for Information Technology-Part
以 下 主 要 讨 论 初 始 化 模 块 、CAN 通 信 接 口 模 块 和 RS-485 通信接口模块。 2.1 初始化模块
初 始 化 模 块 主 要 包 括 C8051F060 初 始 化 ,UART1 初 始 化 和 SJA1000 初 始 化 。 C8051F060 初 始 化 主 要 完 成 主 控 器 C8051F060 的端口配置和系统时钟设置。 需要注意的是要通过 C8051F060 初始化使 UART1 的 TX 和 RX 连到两个端口引脚。

485通信程序(51单片机)

485通信程序(51单片机)

485通信程序(51单片机)什么是485通信?RS-485是一种串行通信协议,它使用差分信号传输数据。

485通信支持了在两个或以上设备之间传输数据的需求,比如用于电子计算机、通信设备、工业自动化等等。

RS-485已广泛应用于数控机床、自动化设备控制等领域中。

单纯的485通信包含四种通信模式:点对点、总线形、多主机和简介式通信。

其中,点对点通信指的是一对一的通信方式;总线形通信指的是一对多的群通信方式,所有设备都在同一条总线上发送和接收数据;多主机通信指的是多台主机的通信方式,多个设备都可以同时发送数据;简介式通信是一种用于仅需要发送少量数据的情况的通信方式。

下面介绍一下485通信的部分基本知识1.485通信的传输距离远,一般可以达到1200米。

2.485通信具有较强的抗干扰能力。

3.485通信使用差分信号进行传输,信号稳定,传输速率也比较快。

4.485通信可以支持多个设备同时进行通信,但是在同一时间内只有一个设备可发送数据。

5.在采用485通信时,一定要注意通讯端口的设置,如波特率、数据位、停止位等。

程序实现原理该程序使用了51单片机作为主控制器实现了基本的485通信,具体实现如下:1.通信模式的设置在程序开始时,需要设置通信模式。

如果通信模式为点对点通信,则可以直接使用UART通信模块进行通信;如果是多点通信,则需要使用485通信芯片。

2.通讯端口的配置在进行485通讯时,需要进行通讯端口的配置,包括波特率、数据位、停止位等参数的设定。

在485通信模式下,只有一个设备可为主设备,其他设备均为被设备。

在发送数据时,主设备的TXD口要与外部总线的D+口相连,而D-口不连接,从设备的TXD口要与D-口相连,而D+口不连接。

在接收数据时,主设备的RXD口要与D+口相连,而D-口不连接,从设备的RXD口要与D-口相连,而D+口不连接。

3.数据的发送和接收在发送和接收数据时,需要采用特定的方式进行报文的封装和解析。

一种rs485串口自动收发控制及指示电路的制作方法

一种rs485串口自动收发控制及指示电路的制作方法

一种rs485串口自动收发控制及指示电路的制作方法RS485串口是一种常用的通信协议,常用于远距离通信和多节点通信。

为了实现对RS485串口的自动收发控制及指示,可以设计一个电路来实现。

下面将介绍一种制作RS485串口自动收发控制及指示电路的方法。

首先,我们需要准备以下材料和工具:1. RS485模块2. Arduino开发板3. MAX485芯片4.逻辑门电路芯片5. LED灯6.电阻、电容等相关元件7.连接线、焊锡工具等制作步骤如下:1.首先,我们将RS485模块和Arduino开发板连接起来。

将RS485模块的A、B线分别连接到Arduino开发板的串口引脚,如A线连接到TX引脚,B线连接到RX引脚。

同时,还需要将RS485模块的GND引脚和Arduino开发板的GND引脚连接起来,以确保电路的接地。

2.接下来,我们需要添加MAX485芯片。

将MAX485芯片的VCC和GND引脚连接到电源上,确保其正常工作。

然后,将MAX485芯片的A、B线分别连接到RS485模块的A、B线上。

此时,RS485模块的A、B线通过MAX485芯片和Arduino开发板相连接。

3.然后,我们需要添加逻辑门电路芯片。

逻辑门电路芯片的作用是控制RS485模块的发送和接收功能。

我们将逻辑门电路芯片的引脚与Arduino开发板的引脚相连接。

具体连接方式可以根据所使用的逻辑门电路芯片而定,通常需要将逻辑门电路芯片的控制引脚连接到Arduino开发板的某个数字引脚上,以实现对RS485模块的控制。

4.接下来,我们需要添加LED灯来指示RS485模块的发送和接收状态。

我们将LED灯的阳极(长脚)连接到逻辑门电路芯片的输出引脚上,将LED灯的阴极(短脚)连接到电源的负极上,以实现对LED 灯的控制和指示。

5.最后,我们需要添加一些电阻、电容等相关元件来保护电路和改善信号质量。

具体的元件数值和连接方式可以根据实际需求而定,在这里不作详细介绍。

C8051F040开发系统板使用说明书

C8051F040开发系统板使用说明书

第一章 C8051F040开发系统板简介1.1 开发系统的组成Cygnal C8051F040单片机开发系统主要由Cygnal 片上系统单片机开发工具、C8051F040片上系统单片机和系统试验板三部分组成,应用该系统可进行片上系统单片机较典型应用的试验,请参见以下介绍。

1.2 Cygnal C8051F单片机开发工具简介开发工具概述Cygnal 的开发工具实质上就是计算机IDE 调试环境软件及计算机RS-232到C8051F单片机JTAG 口的协议转换器(EC2-N1)的组合。

Cygnal C8051F系列全部的单片机片内均设计有调试电路该调试电路通过边界扫描方式获得单片机片内信息,通过10线的JTAG接口与开发工具连接以便于进行对单片机在片编程调试。

该开发系统板中的核心部分是Cygnal C8051F040单片机。

适配器(EC2-N1)一端与计算机相连,另一端与C8051F单片机的JTAG口相连,应用Cygnal 供应的IDE调试环境就可以进行非侵入式、全速的在系统编程(ISP)和调试。

Cygnal 开发工具支持视察和修改存储器和寄存器支持断点、视察点、堆栈指示器、单步、运行和停止吩咐。

调试时不须要额外的目标RAM、程序存储器、定时器或通信通道,并且全部的模拟和数字外设都正常工作。

开发工具主要技术指标●支持的目标系统:全部C8051Fxxx 系列单片机;●系统时钟:最大可达25MHz;●通过RS232接口与PC机连接;●支持汇编语言和C51源代码级调试;●第三方工具支持Keil C。

IDE 软件运行环境要求PC机能够运行开发工具软件并能与串行适配器通信。

对PC机有如下系统要求:●Windows 95/98/Me/NT/2000/XP 操作系统;●32MB RAM;●40MB 自由硬盘空间;●空闲的COM 口。

开发工具与PC 机硬件连接硬件连接及软件安装:●将JTAG 扁平电缆与串行示配器EC2 连接●将JTAG 扁平电缆的另一端与目标系统连接●将RS232 串行电缆的一端与EC2 连接●连接RS232 串行电缆的另一端到PC●给目标系统上电●插入CD 并运行SETUP.EXE 将IDE 软件安装到您的PC 机●在PC 机的起先菜单的程序项中选择Cygnal IDE 点击Cygnal 图标运行IDE软件。

C8051F040的RS485收发程序

C8051F040的RS485收发程序

//交叉开关配置使能,UART0配置在P0.0-P0.1
P0MDOUT = 0Xff;
}
/*系统时钟初始化
-----------------------------------------------------------*/
void os_init()
{
int i = 0;
SFRPAGE = CONFIG_PAGE;
void time1_init()
{
SFRPAGE = TIMER01_PAGE;
TCON
= 0X40;
//TR1=1 定时器允许
TMOD
= 0x20;
//T1M1=1 T1M0=0 定时器工作在方式
CKCON = 0x10;
TH1
= 0xb8;
//装初值,波特率为
TL1
= 0xb8;
TR1=1;
i=0; for(i=0;i<50000;i++)
for(j=0;j<10;j++); }
SFRPAGE = UART0_PAGE;
gate = 0;
}
}
/*端口初始化-------------------------------------*/ void port_init() {
SFRPAGE = CONFIG_PAGE;
XBR0 = 0x04; XBR1 = 0x00; XBR2 = 0xd main()
{
WDTCN = 0x07;
//看门狗禁止
WDTCN = 0xDE;
WDTCN = 0xAD;
os_init();
port_init();
uart0_init();

C8051F系列单片机串口通讯程序

C8051F系列单片机串口通讯程序

C8051F系列单片机串口通讯程序C8051F系列单片机串口通讯程序采用C8051F020单片机//串口编程--接收PC发过来的字符串,回发字符串.发送期间中断控制LED灯闪烁//采用外部晶振22.1184MHz 使用定时器1,方式2产生波特率,SMOD = 0或者 1 //定时器初值X=256-SYSCLK*(SMOD+1)/(BAUDRATE*384)/#includesfr16 TMR3RL = 0x92; //定时器3重装载寄存器sfr16 TMR3 = 0x94; //定时器3计数器#define uchar unsigned char#define uint unsigned int//----------------------------------------------------------------------//参数设置区//----------------------------------------------------------------------#define BAUDRATE 4800 //波特率bps#define CLKOUT 22118400 //外部晶振,修改也要修改OSCXCN #define SMODVAL 0 //SMOD的值,修改请也修改PCONVAL#define PCONVAL 0x00 //PCON的值,=0x00时SMOD0=0; =0x80时SMOD0=1 #define TXVAL (256-CLKOUT*(SMODVAL+1)/BAUDRATE/384) //定时器初值#define MAX_LEN 10 //每次接收/发送字符串的长度//---------------------------------------------------------------------//全局变量//---------------------------------------------------------------------sbit LED = P1^6; //LED '1'亮'0'灭bit readFlag = 0; //读标志uchar readCounts = 0; //已经读取的字符个数,与MAX_LEN比较uchar idata trdata[MAX_LEN]; //要接收/发送的字符串//----------------------------------------------------------------------//子函数声明//---------------------------------------------------------------------- void SYSCLK_Init(void); //系统时钟初始化void PORT_Init(void); //端口初始化void UART0_Init(void); //串口UART0初始化void Send_Char(uchar ch); //发送单个字符void Send_String(uchar * str, uint len); //发送一个字符串void UART0_ISR(); //串口中断服务程序,接收字符void Timer3_Init(uint counts); //定时器3初始化void Timer3_ISR(void); //定时器3中断服务程序//---------------------------------------------------------------------- //主函数//---------------------------------------------------------------------- void main(void){WDTCN = 0xde; //禁止看门狗WDTCN = 0xad;SYSCLK_Init(); //时钟初始化PORT_Init(); //端口初始化UART0_Init(); //串口初始化Timer3_Init(CLKOUT/12/10); //定时器初始化EA = 1; //开全局中断while(1){if(readFlag) //已经读取{readFlag = 0; //清零Send_String(trdata,MAX_LEN); //发送字符串}}}//----------------------------------------------------------------------//子函数具体实现//----------------------------------------------------------------------//系统时钟初始化void SYSCLK_Init(void){uint i;OSCXCN = 0x67; //采用外部晶振22.1184MHz,不分频. 选型OSCXCN=0110,0111 for(i=0;i<256;i++); //等待>1mswhile(!(OSCXCN&0x80)); //查询直到XTLVLD=1,晶振稳定OSCICN = 0x88; //切换到外部振荡器,允许时钟失效监测器. OSCICN=1000,1000 }//端口初始化void PORT_Init(void){XBR0 = 0x04; //允许UART0,RX,TX连到2个端口引脚. XBR0=0000,0100XBR1 = 0x00;XBR2 = 0x40; //交*开关使能P0MDOUT |= 0x03; //P0.0为推拉方式输出,即TX0,RX0所在的端口0000,0011P1MDOUT |=0x40; //P1.6为推拉方式输出,即LED所在的端口0100,0000}//串口初始化void UART0_Init(void){SCON0 = 0x50; //选择串口方式1,波特率可变SCON0=0101,0000TMOD = 0x20; //选择T1,方式2,自动再装入8位计数器TH1 = (int)TXVAL; //T1初值,根据波特率,时钟等计算. 0xF4, bps=4800bpsTL1 = (int)TXVAL;ES0 = 1; //UART0中断开启TR1 = 1; //启动定时器T1PCON |= PCONVAL; //PCON=0x00,SMOD = 0 ; PCON=0x80,SMOD=1 TI0 = 1; //声明TX0就绪,可以发送TR0 = 1;}//定时器初始化void Timer3_Init(uint counts){TMR3CN = 0x00; //禁止定时器T3,清TF3,采用SYSCLK/12为时基TMR3RL = -counts; //初始化重装载值TMR3 = 0xffff; //设置为立即重装载EIE2 |= 0x01; //T3中断开启TMR3CN |= 0x04; //启动T3}//发送单个字符void Send_Char(uchar ch){SBUF0 = ch; //送入缓冲区while(TI0 == 0); //等待发送完毕TI0 = 0; //软件清零}//发送字符串,调用Send_Char() len字符串长度void Send_String(uchar * str,uint len){uint k = 0;do{Send_Char(*(str + k));k++;} while(k < len);}//定时器3中断服务程序void Timer3_ISR(void) interrupt 14 using 0 {TMR3CN &= ~(0x80); //清TF3LED = ~LED;}//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++;}}//------------------------------------------------------------- //程序结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void main()
{
WDTCN = 0x07;
//看门狗禁止
WDTCN = 0xDE;
WDTCN = 0xAD;
os_init();
port_init();
uart0_init();
time1_init();
interrput_init();
transmit_RS485(); while(1) {
i=0; for(i=0;i<50000;i++)
for(j=0;j<10;j++); }
SFRPAGE = UART0_PAGE;
gate = 0;
}
}
/*端口初始化-------------------------------------*/ void port_init() {
SFRPAGE = CONFIG_PAGE;
XBR0 = 0x04; XBR1 = 0x00; XBR2 = 0x40; XBR3 = 0x00;
#include "c8051F040.h" #define uchar unsigned char #define uint unsigned int
void port_init(); void os_init(); void uart0_init(); void time1_init(); void interrput_init(); void transmit_RS485(); void delay();
void interrput_uart0() interrupt 4
{
SFRPAGE = UART0_PAGE;
if(TI0 == 1)
{
TI0 = 0;
}
if(RI0 == 1)
{
RI0 = 0;
g = SBUF0;
}
}
/*RS485发送数据程序---------------------------------------*/
sbit gate = P0^2; uchar g; uchar xx[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xaa,0xbb,0xcc,0xdd ,0xee,0xff};
/*主函数-----------------------------------------------------*/
}
/*中断程序初始化--------------------------------------*/
void interrput_init()
{
EA = 1;
//允许所有中断
ES0 = 1;
//允许uart0中断
}
/*uart0中断服务程序---------------------------------------*/
//交叉开关配置使能,UART0配置在P0.0-P0.1
P0MDOUT = 0Xff;
}
/*系统时钟初始化
-----------------------------------------------------------*/
void os_init()
{
int i = 0;
SFRPAGE = CONFIG_PAGE;
}
/*串口初始化,选择UART0--------------------------------------*/
void uart0_init()
{
SFRPAGE = UART0_PAGE;
SCON0 = 0x50;
SCON0 &= 0xFC;
//清中断标志
SSTA0 = 0x00;
}
/*定时器初始化,作为UART0的波特率发生器------------------------*/
void time1_init()
{
SFRPAGE = TIMER01_PAGE;
TCON
= 0X40;
//TR1=1 定时器允许
TMOD
= 0x20;
//T1M1=1 T1M0=0 定时器工作在方式
CKCON = 0x10;
TH1
= 0xb8;
//装初值,波特率为
TL1
= 0xb8;
TR1=1;
OSCXCN = 0x67;
//外部.1184M晶振
for (i = 0; i < 3000; i++);
//等待外部晶振稳

while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
//系统时钟不分频
OSCICN = 0x00;
// 将内部晶振关闭,
也可不关闭,不关闭时MCU耗能高
void transmit_RS485()
{
uchar i;
ห้องสมุดไป่ตู้
gate = 1;
for(i=0;i<15;i++)
{
SBUF0 = xx[i];
delay();
}
}
/*延时程序---------------------------------------*/
void delay()
{
uint i,j;
相关文档
最新文档