//****************************************************************************// 功能: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 July's Hut!n"); //Uart0_Transmit(0x00); }}//-----------------------------------------------------------------------------// 端口初始化//-----------------------------------------------------------------------------//// 配置交叉开关和通用IO//// P0.4 - UART TX0// P0.5 - UART RX0void 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中断//-----------------------------------------------------------//中断向量0x0023void 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++); }}
导读:目前正在解读《C8051F330串口UART0示例程序》的相关信息,《C8051F330串口UART0示例程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C8051F330串口UART0示例程序》的详细说明。
简介:本文给大家分享了C8051F330串口UART0示例程序。
提醒:《C8051F330串口UART0示例程序》最后刷新时间 2024-03-14 00:57:58,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C8051F330串口UART0示例程序》该内容的真实性请自行鉴别。