您的位置 首页 5G

C8051F330串口UART0示例程序

****************************************************************************功能:C8051F330串口UART0示例程序*

//****************************************************************************
// 功用:C8051F330串口UART0示例程序
//****************************************************************************
//运用F330,串口为P0.4(TX0),P0.5(RX0);
//—————————————————————————–
// UART0.c
//—————————————————————————–

//—————————————————————————–
// 所包括的头文件
//————————————————————————
#include
//#include

//—————————————————————————–
// 常量界说
//—————————————————————————–
// 体系作业频率
#define SYSCLK 24500000
// 串口作业波特率
#define BAUDRATE 9600

//—————————————————————————–
// 功用函数
//—————————————————————————–
void SYSCLK_Init(void);
void PORT_Init(void);
void UART0_Init(void);
void Uart0_Transmit(unsigned char tmp);
void sendstr(unsigned char*tmp);
unsigned char temp ;
void delay_1ms()
{
unsigned int j ;
for(j=3060;j>0;j–);
}
void delay_ms(unsigned int i)
{
for(;i>0;i–)delay_1ms();
}
//—————————————————————————–
// 主程序
//—————————————————————————–

void main(void)
{
PCA0MD&=~0x40 ;
// 制止看门狗
PORT_Init();
// 初始化端口I/O
SYSCLK_Init();
// 初始化体系时钟
UART0_Init();
// 串口初始化
EA=1 ;
ES0=1 ;
while(1)
{
delay_ms(1000);
sendstr(“Welcome to Julys Hut!”);
//Uart0_Transmit(0x00);
}
}

//—————————————————————————–
// 端口初始化
//—————————————————————————–
//
// 装备交叉开关和通用IO
//
// P0.4 – UART TX0
// P0.5 – UART RX0

void PORT_Init(void)
{
P0MDOUT|=0x10 ;
// 使能 UTX 为推挽输出
XBR0=0x01 ;
// 使能 UART0 占用 P0.4(TXD) 和 P0.5(RXD)
XBR1=0x40 ;
//使能交叉开关
}

//—————————————————————————–
// 体系时钟初始化
//—————————————————————————–
void SYSCLK_Init(void)
{
OSCICN|=0x03 ;
// 装备内部振荡器的的最大频率
RSTSRC=0x04 ;
// 使能一直丢掉检测寄存器
}

//—————————————————————————–
// 串口UART0初始化
//—————————————————————————–
void UART0_Init(void)
{
SCON0=0x10 ;
if(SYSCLK/BAUDRATE/2/256<1)
{
TH1=-(SYSCLK/BAUDRATE/2);
CKCON&=~0x0B ;
CKCON|=0x08 ;
}
else if(SYSCLK/BAUDRATE/2/256<4)
{
TH1=-(SYSCLK/BAUDRATE/2/4);
CKCON&=~0x0B ;
CKCON|=0x09 ;
}
else if(SYSCLK/BAUDRATE/2/256<12)
{
TH1=-(SYSCLK/BAUDRATE/2/12);
CKCON&=~0x0B ;
}
else
{
TH1=-(SYSCLK/BAUDRATE/2/48);
CKCON&=~0x0B ;
CKCON|=0x02 ;
}

TL1=TH1 ;
TMOD&=~0xf0 ;
TMOD|=0x20 ;
TR1=1 ;
// TI0 = 1;
}
//———————————————————–
// 串口UART0中止
//———————————————————–
//中止向量0x0023
void UATR0_ISR(void)interrupt 4
{
//Rx、Tx共用中止
//接纳中止
if(!TI0)
{
RI0=0 ;
temp=SBUF0 ;
Uart0_Transmit(temp);
}
//发送中止
else TI0=0 ;
}
//———————————————————–
// 串口UART0发送
//———————————————————–
void Uart0_Transmit(unsigned char tmp)
{
ES0=0 ;
//关UART0中止
EA=0 ;
//关大局中止
SBUF0=tmp ;
while(TI0==0);
//TI0=0 ;
ES0=1 ;
//开UART0中止
EA=1 ;
//开大局中止

}
//———————————————————–
// 发送字符串
//———————————————————–
void sendstr(unsigned char*tmp)
{
while(*tmp)
{
Uart0_Transmit(*tmp++);
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/261307.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部