首页 > 作文

单片机必备知识–串口通讯

更新时间:2023-04-04 10:04:39 阅读: 评论:0

蓝桥杯单片机必备知识—–(12)串口通讯

串口初始化函数

//主程序中调用

void UartInit(void)//9600bps@11.0592MHz{ SCON = 0x50;//8位数据,可变波特率AUXR |= 0x01;//串口1选择定时器2为波特率发生器AUXR &= 0xFB;//定时器2时钟为Fosc/12,即12TT2L = 0xE8;//设定定时初值T2H = 0xFF;//设定定时初值AUXR |= 0x10;//启动定时器2}

发送字符串

void ndstring(un国家公费师范生signed char *str)//发送字符串{ while(*str !='
void ndstring(unsigned char *str)//发送字符串{ while(*str !='\0')//等待\0{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成TI=0; //清除发送完成标志}}
'
)//等待
void ndstring(unsigned char *str)//发送字符串{ while(*str !='\0')//等待\0{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成TI=0; //清除发送完成标志}}
{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成 TI=0; //清除发送完成标志}}

串口中断

void s() interrupt 4{ if(RI){ str1[scount++]=SBUF;   RI=1时接收数据,将数据放入SBUFRI = 0;}}

整个代码粘贴

#include <stc15f2k60s2.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intuchar tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};uchar dspbuf[] = { 10,10,10,10,10,10,10,10};uchar temperature = 12;unsigned char str1[20];unsigned char scount = 0;unsigned char str[20];void load();void ndstring(unsigned char *str);void ndbyte(unsigned char dat);void display();void uart_proc();void cls(){ P2 = (P2 & 0x1f) | 0x80;P0 = 0xff;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xa0;P0 = 0x00;P2 = 0x1f;}void UartInit(void)//9600bps@11.0592MHz{ SCON = 0x50;//8位数据,可变波特率AUXR |= 0x01;//串口1选择定时器2为波特率发生器AUXR &= 0xFB;//定时器2时钟为Fosc/12,即12TT2L = 0xE8;//设定定时初值T2H = 0xFF;//设定定时初值AUXR |= 0x10;//启动定时器2}void main(){ cls();AUXR = 0xc0;TMOD = 0x00;TL0 = 0xcd;TH0 = 0xd4;TR0 = 1;ET1 = 1;ES = 1;EA = 1;UartInit();while(1){ uart_proc();}}void s() interrupt 4{ if(RI){ str1[scount++]=SBUF;RI = 0;}}void uart_proc(){ if(scount > 0){ //ndstring(str1); if(str1[scount-1] == 0xa){ ndstring(str1);if((str1[0] =='s')  && (str1[1] == 0xd)){ sprintf(str,"#temperature:%02u\r\n",(uint)(temperature));//发送Hellondstring(str);}scount 端午放假2017= 0;}elif(scount==6){       ndstring(str1);scount = 0;}}}void ndstring(unsigned char *str)//发送字符串{ while(*str !='
#include <stc15f2k60s2.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intuchar tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};uchar dspbuf[] = { 10,10,10,10,10,10,10,10};uchar temperature = 12;unsigned char str1[20];unsigned char scount = 0;unsigned char str[20];void load();void ndstring(unsigned char *str);void ndbyte(unsigned char dat);void display();void uart_proc();void cls(){ P2 = (P2 & 0x1f) | 0x80;P0 = 0xff;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xa0;P0 = 0x00;P2 = 0x1f;}void UartInit(void)//9600bps@11.0592MHz{ SCON = 0x50;//8位数据,可变波特率AUXR |= 0x01;//串口1选择定时器2为波特率发生器AUXR &= 0xFB;//定时器2时钟为Fosc/12,即12TT2L = 0xE8;//设定定时初值T2H = 0xFF;//设定定时初值AUXR |= 0x10;//启动定时器2}void main(){ cls();AUXR = 0xc0;TMOD = 0x00;TL0 = 0xcd;TH0 = 0xd4;TR0 = 1;ET1 = 1;ES = 1;EA = 1;UartInit();while(1){ uart_proc();}}void s() interrupt 4{ if(RI){ str1[scount++]=SBUF;RI = 0;}}void uart_proc(){ if(scount > 0){ //ndstring(str1); if(str1[scount-1] == 0xa){ ndstring(str1);if((str1[0] =有吸引力的英文='s')  && (str1[1] == 0xd)){ sprintf(str,"#temperature:%02u\r\n",(uint)(temperature));//发送Hellondstring(str);}scount = 0;}elif(scount==6){ ndstring(str1);scount = 0;}}}void ndstring(unsigned char *str)//发送字符串{ while(*str !='\0')//等待\0{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成TI=0; //清除发送完成标志}}
'
)//等待
#include <stc15f2k60s2.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intuchar tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0中国笛子xf8,0x80,0x90,0xff};uchar dspbuf[] = { 10,10,10,10,10,10,10,10};uchar temperature = 12;unsigned char str1[20];unsigned char scount = 0;unsigned char str[20];void load();void ndstring(unsigned char *str);void ndbyte(unsigned char dat);void display();void uart_proc();void cls(){ P2 = (P2 & 0x1深圳锦绣中华旅游f) | 0x80;P0 = 0xff;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xa0;P0 = 0x00;P2 = 0x1f;}void UartInit(void)//9600bps@11.0592MHz{ SCON = 0x50;//8位数据,可变波特率AUXR |= 0x01;//串口1选择定时器2为波特率发生器AUXR &= 0xFB;//定时器2时钟为Fosc/12,即12TT2L = 0xE8;//设定定时初值T2H = 0xFF;//设定定时初值AUXR |= 0x10;//启动定时器2}void main(){ cls();AUXR = 0xc0;TMOD = 0x00;TL0 = 0xcd;TH0 = 0xd4;TR0 = 1;ET1 = 1;ES = 1;EA = 1;UartInit();while(1){ uart_proc();}}void s() interrupt 4{ if(RI){ str1[scount++]=SBUF;RI = 0;}}void uart_proc(){ if(scount > 0){ //ndstring(str1); if(str1[scount-1] == 0xa){ ndstring(str1);if((str1[0] =='s')  && (str1[1] == 0xd)){ sprintf(str,"#temperature:%02u\r\n",(uint)(temperature));//发送Hellondstring(str);}scount = 0;}elif(scount==6){ ndstring(str1);scount = 0;}}}void ndstring(unsigned char *str)//发送字符串{ while(*str !='\0')//等待\0{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成TI=0; //清除发送完成标志}}
{ //ndbyte(*str++);//发送下一个字符SBUF=*str++; //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成 TI=0; //清除发送完成标志}}

本文地址:https://blog.csdn.net/qq_43710889/article/details/110082932

本文发布于:2023-04-04 10:04:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/666b09594b3def9162f1a013a2a454f0.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:单片机必备知识–串口通讯.doc

本文 PDF 下载地址:单片机必备知识–串口通讯.pdf

标签:定时器   数据   波特率   初值
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图