📄 c8051f330串口通信_3.0625mhz.txt
字号:
//-------------------------------------------------------------------
//串口编程--接收pc发过来的字符串,回发字符串.发送期间中断控制led灯闪烁
//采用外部晶振11.0592Mhz使用定时器1,方式2产生波特率,smod = 0或者1
//定时器初值x=256-sysclk*(smod+1)/(baudrate*384)
//-------------------------------------------------------------------
#include <c8051f330.h>
#define uchar unsigned char
#define uint unsigned int
//-------------------------------------------------------------------
//参数设置区
//-------------------------------------------------------------------
#define max_len 10 //每次接收/发送字符串的长度
//------------------------------------------------------------------
//全局变量
//------------------------------------------------------------------
bit readflag = 0; //读标志
uchar readcounts = 0; //已经读取的字符个数,与max_len比较
uchar idata trdata[max_len]; //要接收/发送的字符串
void Timer_Init()
{
TCON = 0x40;
TMOD = 0x20;
CKCON = 0x08;
TL1 = 0x60;
TH1 = 0x60;
}
void UART_Init()
{
SCON0 = 0x10;
}
void Port_IO_Init()
{
XBR0 = 0x01;
XBR1 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x80;
}
void Interrupts_Init()
{
IE = 0x90;
}
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
//发送单个字符
void send_char(uchar ch)
{
SBUF0 = ch; //送入缓冲区
while(TI0 == 0); //等待发送完毕
TI0 = 0; //软件清零
}
//发送字符串,调用send_char() len字符串长度
void send_string(uchar * str,uint len)
{
uint k = 0;
do
{
send_char(*(str + k));
k++;
} while(k < len);
}
//uart0中断服务程序. 接收字符
void uart0_isr(void) interrupt 4 using 3
{
uchar rxch;
if(RI0==1) //中断标志 ri0=1 数据完整接收
{
RI0 = 0; //软件清零
rxch = SBUF0; //读缓冲
if(readcounts>=max_len)
{
readcounts = 0;
readflag = 1;
}
trdata[readcounts] = rxch; //存入数组,供发送
readcounts++;
}
}
//----------------------------------------------------------------------
//主函数
//----------------------------------------------------------------------
void main(void)
{uint i;
PCA0MD &= ~0x40; // Disable Watchdog timer
Init_Device();
while(1)
{
//send_char_com(0x10);
if(readflag) //已经读取
{
readflag = 0; //清零
for(i=0;i<2500;i++);
for(i=0;i<2500;i++);
send_string(trdata,max_len); //发送字符串
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -