📄 uart.c
字号:
//#include "reg52.h"
#include "reg51.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
unsigned int Vnum=0x11;
unsigned char recive;
unsigned char start[8]={'b'};
unsigned char end[15]={"me"};
unsigned char *ptr;
sbit led=P1^1;
void COM_int(void) // 串口初始化
{
SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
PCON=0x00; //波特率不倍增
ES=1; //允许串口中断
TMOD=0x21; //定时器T1工作于方式2,自动装载方式
//TH0=(65536-1000)%256;
//TL0=(65536-1000)/256;
TL1=0xfd;
TH1=0xfd;
ET1=1; //允许T1溢出中断
TR1=1; //启动定时器工作
EA=1; //允许全部中断
}
void send_char(uchar txd) // 发送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
void send_str(uchar *pstr) // 发送字符串
{
//uchar dataa[8];
//dataa = pstr;
while(*pstr!= '\0')
{
SBUF = *pstr;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
pstr++; // 下一个字符
}
}
void delayms(uchar ms) //延时
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<124;j++);
}
}
/*********************************************
unsigned char DataToASCII(unsigned char di)
{
if(di<0x0A)
return(di|=0x30);
else
return(di+=0x37);
}
********************************************/
void main()
{
COM_int(); //初始化串口
led=1;
sprintf(ptr,"%d",Vnum);
//delayms(100);
send_str(start); //发送起始信号
led=0;
//delayms(100);
send_str(ptr); //发送数据
led=1;
//delayms(100);
send_str(end); //发送结束信号
led=0;
//delayms(100);
send_str(ptr);
}
/************串行中断接收*******************/
void rev() interrupt 4 using 2
{
if(RI)
{
RI=0;
recive=SBUF;
TI=1; //置1接受中断标志位
/*中间可以加程序*/
TI=0; //清除接受中断标志位
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -