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

📄 ide2.#3

📁 c8051f串口通信 程序 用于测试单片机8051F单片机的串口 开串口调试助手,向单片机发送数据 单片机将数据返回给电脑进行检测
💻 #3
字号:

#include <c8051f020.h> // SFR声明 
#include <stdio.h> 
//----------------------------------------------------------------------------- 
// C8051F02X的16位SFR定义 
//----------------------------------------------------------------------------- 
sfr16 DP = 0x82; // 数据指针 
sfr16 TMR3RL = 0x92; // 定时器3重装值 
sfr16 TMR3 = 0x94; // 定时器3计数器 
sfr16 ADC0 = 0xbe; // ADC0数据 
sfr16 ADC0GT = 0xc4; // ADC0大于窗口 
sfr16 ADC0LT = 0xc6; // ADC0小于窗口 
sfr16 RCAP2 = 0xca; // 定时器2捕捉/重装 
sfr16 T2 = 0xcc; // 定时器2 
sfr16 RCAP4 = 0xe4; // 定时器4捕捉/重装 
sfr16 T4 = 0xf4; // 定时器4 
sfr16 DAC0 = 0xd2; // DAC0数据 
sfr16 DAC1 = 0xd5; // DAC1数据 
 //----------------------------------------------------------------------------- 
 // 全局常量 
//----------------------------------------------------------------------------- 
#define SYSCLK 22118400 // 系统时钟频率
  
#define BAUDRATE 9600 // UART波特率
 


sbit LED = P1^6; // LED=’1’ 意为开 
sbit SW1 = P3^7; // SW1=’0’ 意为按压开关 
//----------------------------------------------------------------------------- 
// 函数原型 
//----------------------------------------------------------------------------- 
void SYSCLK_Init (void); 
void PORT_Init (void); 
void UART0_Init (void); 




//----------------------------------------------------------------------------- 
// 主程序 
//----------------------------------------------------------------------------- 
void main (void) { 
int i; // 循环计数器 
WDTCN = 0xde; // 禁止看门狗定时器 
WDTCN = 0xad; 
SYSCLK_Init (); // 初始化振荡器 
PORT_Init (); // 初始化数据交叉开关和通用IO口 
UART0_Init (); // 初始化UART0 
//Timer3_Init (SYSCLK/SAMPLERATE0); // 初始化定时器3溢出作为ADC0采样率 
//ADC0_Init (); // 初始化ADC 
EA  = 1; // 允许全部中断 
ES0 = 1;
while (1); 

 

} 

void SYSCLK_Init (void) 
{ 
int i; // 延时计数器 
OSCXCN = 0x67; // 开启外部振荡器
//22.1184MHz晶体  
for (i=0; i < 256; i++);  // 等待振荡器启振 
while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定 
OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器 
} 

void PORT_Init (void) 
{ 
XBR0 = 0x04; // 使能UART0 
XBR1 = 0x00; 
XBR2 = 0x40; // 使能数据交叉开关和弱上拉 
P0MDOUT |= 0x01; // 允许TX0为推挽输出 
P1MDOUT |= 0x40; // 允许P1.6(LED)为推挽输出 
} 

void UART0_Init (void) 
{ 
SCON0 = 0x50; // SCON0: 模式1, 8位UART, 使能RX 
TMOD = 0x20; // TMOD: 定时器1, 模式2, 8位重装 
TH1 = -(SYSCLK/BAUDRATE/16); // 根据波特率的值设定定时器1重装值 
TR1 = 1; // 启动定时器1 
CKCON |= 0x10; // 定时器1使用系统时钟作为时基 
PCON |= 0x80; // SMOD00 = 1 
TI0 = 1; // 表示TX0就绪 
} 

void UartInt(void) interrupt 4
{
  unsigned char temp;
  RI0 = 0;   
  LED =~LED;
  temp = SBUF0;
  SBUF0 =temp;
  while(TI0==0);
  TI0 = 0;
}




⌨️ 快捷键说明

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