串口向电脑发送数据
#include <REGX52.H>
#include "Dealy.h"
unsigned char Sec;
void UART_Init()//4800bps@12.000MHz
{
SCON=0x40;
PCON |= 0x80; //使能波特率倍速位SMOD
TMOD &= 0x0F;
TMOD |= 0x20; //8位自动重装
TL1 = 0xF3; //设置定时初始值
TH1 = 0xF3; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void main()
{
UART_Init();
while (1)
{
UART_SendByte(Sec);
Sec++;
Delay(1000);
}
}
串口中断函数模板
void UART_Routine() interrupt 4
{
if(RI==1) //接收和发出判断一下
{
RI=0;
}
}
电脑向串口发送数据
#include <REGX52.H>
#include "Dealy.h"
//#include "UART.h"
unsigned char Sec;
//以下代码是UART.h
void UART_Init()//4800bps@12.000MHz
{
SCON=0x50; //REN使能接收信号
PCON |= 0x80; //使能波特率倍速位SMOD
TMOD &= 0x0F;
TMOD |= 0x20; //8位自动重装
TL1 = 0xF3; //设置定时初始值
TH1 = 0xF3; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
EA=1; //配置中断
ES=1;
}
void main ()
{
UART_Init()
while(1)
{
}
}
void UART_Routine() interrupt 4
{
if(RI==1) //接收和发出判断一下
{
P2=~SBUF; //取反,让1灯亮0灯灭
UART_SendByte(SBUF);
RI=0;
}
}
TL1和TH1计算方法
他们用到定时器产生
F3=243 256-243=13 每隔13微秒溢出一次,溢出的频率1/13us=0.07692~MHz
0.07692/16=0.00480769MHz=4807.69Hz
7.69/4800=0.001602~ 0.16%的误差