P89C669 串口C51源程序

发布者:老实巴交的大叔最新更新时间:2016-11-14 来源: eefocus关键字:P89C669  串口  C51 手机看文章 扫描二维码
随时随地手机看文章
#include

#include
#include
#include "INC\UART.H"


unsigned char xdata BaudRate = 0;
unsigned char xdata Uart0_Counter = 0;
unsigned char xdata Uart1_Counter = 0;
unsigned char xdata Uart0_Buff[U0BUF_SIZE];
unsigned char xdata Uart1_Buff[U1BUF_SIZE];

/**********************************************************************/
/*名称: Uart_Init()
/*说明: 串行口初始化程序
/*输入: BaudRate 串行口波特率   
/*输出: 无
/**********************************************************************/
void Uart_Init(unsigned char Baud)
{
 unsigned int BaudR;
 unsigned long RCAP,BRGR;

 switch(Baud)
 {
  case 0x00 : BaudR = 300; break;
  case 0x01 : BaudR = 1200; break;
  case 0x02 : BaudR = 2400; break;
  case 0x03 : BaudR = 4800; break;
  case 0x04 : BaudR = 9600; break;
  case 0x05 : BaudR = 19200; break;
  default: BaudR = 19200; break; 
 }
 RCAP = 0xFFFF - ((F_OSC/BaudR)/16);
 RCAP2H = RCAP/0x100;
 RCAP2L = RCAP%0x100;  
 T2MOD = 0x00;
 T2CON = 0x34;
 S0CON = 0x50;
 ES0  = 1;

 BRGR = F_OSC/BaudR - 16;
 BRGR1 = BRGR/0x100;
 BRGR0 = BRGR%0x100; 
 BRGCON = 0x01;
 S1CON = 0x50;   
 ES1  = 1;

 PCON  = 0x80;
 EA = 1;
}   
/**********************************************************************/
/*名称: Uart0_ByteRcv()
/*说明: 串行口0数据读取中断程序
/*输入: 无 
/*输出: 无
/**********************************************************************/
static void Uart0_ByteRcv(void) interrupt 4 using 3
{
 RI_0 = 0;
 Uart0_Buff[Uart0_Counter] = S0BUF;
 Uart0_Counter++;
 if(Uart0_Counter >= U0BUF_SIZE)
 {
  Uart0_Counter = 0;
  memset(Uart0_Buff,0x00,U0BUF_SIZE);
 }
}

/**********************************************************************/
/*名称: Uart0_StrNSend()
/*说明: 串行口0指定长度字符串输出程序
/*输入: *str 字符串指针
/*  length 字符串长度 
/*输出: 无
/**********************************************************************/
void Uart0_StrNSend(unsigned char *str ,unsigned char length)
{
 unsigned char i;
 ES0 = 0; 
 for(i=0;i  {
  S0BUF = *(str+i);
  while(!TI_0);
  TI_0 = 0;
 }
 ES0 = 1;

}

/**********************************************************************/
/*名称: Uart1_ByteRcv()
/*说明: 串行口1数据读取中断程序
/*输入: 无 
/*输出: 无
/**********************************************************************/
static void Uart1_ByteRcv (void) interrupt 10 using 3
{
 RI_1 = 0;
 Uart1_Buff[Uart1_Counter] = S1BUF;
 Uart1_Counter++;
 if(Uart1_Counter >= U1BUF_SIZE)
 {
  Uart1_Counter = 0;  
  memset(Uart1_Buff,0x00,U1BUF_SIZE);  
 }
}

/**********************************************************************/
/*名称: Uart1_ByteSend()
/*说明: 串行口1单字符输出程序
/*输入: byte 要输出的字符
/*输出: 无
/**********************************************************************/
void Uart1_ByteSend(char byte)
{                                                                                                                                                                                                       
 ES1 = 0;
 S1BUF = byte;
 while(!TI_1);
 TI_1 = 0;
 ES1 = 1;
}

/**********************************************************************/
/*名称: Uart1_StrNSend()
/*说明: 串行口1指定长度字符串输出程序
/*输入: *str 字符串指针
/*  length 字符串长度 
/*输出: 无
/**********************************************************************/
void Uart1_StrNSend(unsigned char *str ,unsigned char length)
{
 unsigned char i;
 ES1 = 0;
 for(i=0;i  {
  S1BUF = *(str+i);
  while(!TI_1);
  TI_1 = 0;
 }
 ES1 = 1;
}
/**********************************************************************/
/*名称: Uart1_StrSend()
/*说明: 串行口1字符串输出程序
/*输入: *str 字符串指针 
/*输出: 无
/**********************************************************************/
void Uart1_StrSend(unsigned char *str)

 unsigned char i;
 ES1 = 0;
 for(i=0;i  {
  S1BUF = *(str+i);
  while(!TI_1);
  TI_1 = 0;
 }
 ES1 = 1;
}

关键字:P89C669  串口  C51 引用地址:P89C669 串口C51源程序

上一篇:4线EEPROM的C51源程序
下一篇:I2C总线(主)C51源程序

推荐阅读最新更新时间:2024-03-16 15:20

8051单片机的UART0串口初始化
1、C8051f的UART0是异步、全双工串口。其波特率发生器规定由定时器1定时器提供。可配置为8位UART或9位UART(多机通讯第九位用于片选作用)。SYSCLK=24.5MHZ(我的板子采用内部晶振频率作为系统时钟) BAUDRATE=115200(波特率) 2、初值TH1 Tl1配置 由上述公式可计算初值:TH1 = 256-(SYSCLK/BAUDRATE/2)而程序内是TH1 = -(SYSCLK/BAUDRATE/2),这两种是相同的。第一种是以正数的二进制形式保存在计算机内。第二种是负数,取反加1求得补码保存在计算机中。结果是相同的。每当TL1中的值溢出后 TH1存储的重装载值装载到TL1中开始计数。
[单片机]
8051单片机的UART0<font color='red'>串口</font>初始化
串口通信预备知识
0、前言 计算机通信是指计算机与外部设备或者计算机与计算机之间的信息交换。 通信分为并行通信和串行通信,在多微机系统以及现代测控系统中信息的交换多采用串行通信方式 串行口工作前,应对其进行初始化,设置产生波特率的定时器1、串行口控制和中断控制。 0.1并行通信 每次发送前,会进行询问,接收方进行应答,相当于一次握手。8位同时发送。一般用于计算机内部总线、排线等需求高速的传输。 0.2串行通信 0.3异步通信 一个字节前面1位是起始位,中间是8位数据,最后一位是停止位,一个字节中的各个位之间的时间间隔是固定的(由波特率决定),每个字节之间的时间间隔则是任意的。 注意:同一字符内的各位之间是有间隔的,
[单片机]
<font color='red'>串口</font>通信预备知识
串口与普通IO口的区别
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。 每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一
[单片机]
<font color='red'>串口</font>与普通IO口的区别
基于MSP430单片机和串口芯片PL2303的BSL编程工具设计
为了对烧断熔丝的MSP430系列单片机进行程序更新,采用USB转串口芯片PL2303和VB6.0编程语言设计出了一款高性价比的BSL编程工具,给出了该编程工具的硬件和软件设计的具体方案,并论述了设计中的要点。该BSL编程工具使用方便、操作简单、成本低廉,投入使用以后获得了较好的效果。 美国德州仪器公司的MSP430系列单片机在智能仪器仪表、医疗电子、消费电子等领域有着非常广泛的应用。大部分MSP430系列单片机都具有非易失性Flash存储器,用户调试或更新Flash中程序的方式一般有两种方法:JTAG和Bootstrap Loader(引导装载程序,简称BSL)。 MSP430系列单片机内部集成了JTAG仿真调试模块,并口
[单片机]
基于MSP430单片机和<font color='red'>串口</font>芯片PL2303的BSL编程工具设计
C51联盟 —— 外部中断+定时器中断
/*****************************************************/ void Int0Init(); //开启外部中断INTR0 void Timer1Init(); //定时器中断 5毫秒@12.000MHz /*****************************************************/ void main() { SEG = 0; Int0Init(); Timer1Init(); while(1); } /*****************************************************/ void FlowLED
[单片机]
c51写的X25045的读写程序
/*************************************************************** *X25043/45applicationProcedures *absoluteoneaddressaccess *************************************************************** WARNING:Thefunctionwith'_'ahead,usermaynotuseit.asit usedinternal */ //使用函数:write_status(status)写状态,一般写0 //clr_wchdog(void
[单片机]
51单片机串口方式0的应用
对于单片机串口的应用,在这里我就不做详细的介绍。这里只叙述串口方式0在应用时应该怎样应用。当你看单片机关于串口的应用时,它会将到怎样设置串口的工作方式。其实真正只用串口方式0的话,根本用不着设置任何寄存器。只有你把你要发的数据给SBUF,即可。 如: /*********************************** 函 数 名: HC_595_input() 功能说明: 把数据从HC595送入存储寄存器 参数说明: dat - 向595输入的数据 返 回 值: 无 ***********************************/ void HC_595_input(unsigned char dat) {
[单片机]
基于嵌入式WinCE与MSP430单片机多串口通信设计
目前WinCE嵌入式与MSP430单片机在仪器仪表、工业控制、移动设备等有着广泛的应用。在很多复杂的应用场合比如多点温度采集、多点转速采集,一个单片机不能满足要求,需要多台单片机协同工作,此时,多台单片机通信是实现的关键。以基于WinCE嵌入式设备为核心,取代传统意义上的PC机,采用TCP/IP通信机制搭建的串口通信系统,结合嵌入式设备和网络技术的优点,将各独立系统复杂的通信协议、数据格式进行统一的转化,特别适用于远程、多机串口通信,具有重要的使用价值和应用前景。 1 硬件平台 1)WinCE嵌入式采用友善之臂mini2440开发板作为硬件平台,mini2440开发板主要的硬件资源包括:SamsungS3C2440A,主频4
[单片机]
基于嵌入式WinCE与MSP430单片机多<font color='red'>串口</font>通信设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved