历史上的今天
今天是:2024年12月19日(星期四)
2018年12月19日 | C51 串口收发,printf, 接收字符串
2018-12-19 来源:eefocus
串口发送,接收
在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;}
#include
//stdio.h,string.h用于printf函数原型
#include
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void uart_init(void)
{
TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2
TH1=0xe6;//设置波特率为2400 24M
TL1=0xe6;
TR1=1;//启动定时器/计数器1
SCON=0x50; //0101 0000.串口工作方式1,允许串行控制
PCON=0x00;//设置SMOD=0
IE=0x90; //CPU允许中断,串行允许中断
TI=1;//直接使用printf必须加入此句才能实现发送
RI=1;
}
int main(void)
{
int a=99;
char *string="abde";
uart_init();
printf("hello system is restart\n");
while(1)
{
//puts("abcd");
//printf("%d %x %c %s %p\n",a,a,(char)a,string,string);
delay(1000);
}
return 0;
}
void uart_receiver(void) interrupt 4 //串口中断
{
unsigned char temp; //临时变量,用于缓冲收发数据
if(RI) // 判断是串口接收产生中断
{
RI = 0; // 清接收中断标志
temp = SBUF; // 接收到的数据写入缓冲BUF
SBUF = temp; // 将收到的数据发回给电脑端
}
if (TI) // 判断是串口发送产生中断
TI = 0; // 清发送中断
}
C51串口接收字符串:
#include
//stdio.h,string.h用于printf函数原型
#include
static unsigned long int SysTick = 0;
#define S_RECEVIER_SIZE 32
unsigned char RevBuffer[S_RECEVIER_SIZE];
int revDataCount = 0;
int revTempLength = 0;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void uart_init(void)
{
TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2
TH1=0xe6;//设置波特率为2400 24M
TL1=0xe6;
TR1=1;//启动定时器/计数器1
SCON=0x50; //0101 0000.串口工作方式1,允许串行控制
PCON=0x00;//设置SMOD=0
IE=0x90; //CPU允许中断,串行允许中断
TI=1;//直接使用printf必须加入此句才能实现发送
RI=1;
}
int main(void)
{
int a=99;
char *string="abde";
uart_init();
printf("hello system is restart\n");
while(1)
{
//puts("abcd");
//printf("%d %x %c %s %p\n",a,a,(char)a,string,string);
delay(1000);
}
return 0;
}
void uart_receiver(void) interrupt 4 //串口中断
{
unsigned char temp; //临时变量,用于缓冲收发数据
if(RI) // 判断是串口接收产生中断
{
RI = 0; // 清接收中断标志
temp = SBUF; // 接收到的数据写入缓冲BUF
//SBUF = temp; // 将收到的数据发回给电脑端
if (temp != '/n') // 以‘/n’做为接收字符串结束标志
{
RevBuffer[revDataCount] = temp;
revDataCount++;
}
else
{
printf("%s\n", &RevBuffer[0]);
revTempLength = revDataCount;
revDataCount = 0;
}
}
//if (TI) // 判断是串口发送产生中断
// TI = 0; // 清发送中断
}
史海拾趣
|
在信息化程度越来越高的今天,担当信息处理与交换重任的机房是整个信息网络工程的数据传输中心、数据处理中心和数据交换中心。为保证机房设备正常运行及工作人员有一个良好的工作环境,对机房温湿度的监测是必不可少的,合理正常的温湿度环境是机 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 听说NEC公司送了芯片,可是为什么有的学校拿到了,有的学校没拿到呢? … 查看全部问答> |
|
如果需要测量皮肤某处的温度,用什么温度传感器比较好呢?红外的?还是其他什么? 如果是用接触的,测量结果会不会因为身体皮肤出汗或者其他什么受到影响?如果用红外的,精度怎么样?我的测量距离大概也就1厘米!测某一点或者直径为1厘米的区域都可以!我需 ...… 查看全部问答> |
|
我刚开始接触蓝牙开发,现在在学习Bluelab 3.6.2提供的Demo code,有做过相关蓝牙开发的吗,提供一下学习方法,适合入门,谢谢!… 查看全部问答> |
|
各位高手,帮帮小弟吧!怎么才能实现占空比可变的PWM信号五分频。单片机输出的最低频率是3.9KHz,现在需要降低到500Hz左右,怎么样才能实现呢?不胜感激…… [ 本帖最后由 daijianguo28 于 2011-7-10 12:23 编辑 ]… 查看全部问答> |




