⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 33xuart.c

📁 一些C8051f330的C程序
💻 C
字号:
//-----------------------------------------------------------------------------
// UART.c
//-----------------------------------------------------------------------------
// 版权归新华龙电子有限公司所有
// 作者:Robi Ken 
// 功能:串口通讯
// 目标板: C8051F33x
// 日期: 2004.12.28
// 开发工具: Silicon Laboratories  IDE 


//-----------------------------------------------------------------------------
// 所包含的头文件
//------------------------------------------------------------------------

#include <c8051f330.h>                 
#include <stdio.h>

//-----------------------------------------------------------------------------
// 常量定义
//-----------------------------------------------------------------------------

#define SYSCLK          24500000             // 系统工作频率
#define BAUDRATE        9600               // 串口工作波特率
#define TIMER2_RATE     1000                 // 定时器2溢出标志位频率
 
//-----------------------------------------------------------------------------
// F33x’定时器2的16位SFR
//-----------------------------------------------------------------------------

sfr16 TMR2RL   = 0xca;                 
sfr16 TMR2     = 0xcc;                 

//--------------------------------------------------------------------------------
// 功能函数
//-----------------------------------------------------------------------------

void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
void Timer2_Init (int);

//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------

 void main (void) {


   PCA0MD &= ~0x40;                    // 禁止看门狗
                                       
   PORT_Init();                        // 初始化端口I/O
   
   SYSCLK_Init ();                     //  初始化系统时钟
   
   Timer2_Init(SYSCLK/TIMER2_RATE);    //  初始化 Timer 2 
   
   UART0_Init();                       //  串口初始化
  
   printf (" KEN :) Happy new year!  \n ");                //  输出字符     
 
}

  

//-----------------------------------------------------------------------------
// 端口初始化
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports.
//
// P0.4 - UART TX
// P0.5 - UART RX
// P3.3 - LED

void PORT_Init (void)
{
   P0SKIP  |= 0x01;                    
   P0MDIN  |= 0x01;                    // 配置P0.0为模拟出入
   P0MDOUT |= 0x10;                    // 使能 UTX 为推挽输出
   P1MDOUT |= 0x08;                    // 使能 LED 为推挽输出
   XBR0    = 0x01;                     // 使能 UART on P0.4(TX) and P0.5(RX)                     
   XBR1    = 0x40;                  
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------


void SYSCLK_Init (void)
{
   OSCICN |= 0x03;                     // 配置内部振荡器的的最大频率
                                        
   RSTSRC  = 0x04;                     // 使能始终丢失检测寄存器

}

//-----------------------------------------------------------------------------
// 串口初始化
//-----------------------------------------------------------------------------


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;                            
}
//-----------------------------------------------------------------------------
// 时钟2中断
//-----------------------------------------------------------------------------

void Timer2_Init (int counts)
{
   TMR2CN = 0x00;                      // 停止时钟2;清除 TF2H 和TF2L;
                                       
   CKCON |= 0x10;                      
   TMR2RL  = -counts;                  
   TMR2    = TMR2RL;                   
   ET2 = 0;                            
   TR2 = 1;                            
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -