51单片机串口通信笔记(2)
816波特,消除误差可以调整时钟振荡频率fosc实现。例如采用的时钟振荡频率为11.0592MHz。
(2) 如果串行通讯选用很低的波特率,例如,波特率选为55,可将定时器T1设置为方式1定时。但在这种情况下,T1溢出时,需用在中断服务程序中重新装入初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整。
例7-3 若8031单片机的时钟振荡频率为11.0592MHz,选用T1为方式2定时作为波特率发生器,波特率为2400b/s,求初值。
上述结果可直接从表7-2中查到。
这里时钟振荡频率选为11.0592 MHz,就可使初值为整数,从而产生精确的波特率。
方式1无中断式
#include <AT89X51.H>
void Send(void);
void rec(void);
int statu=0;
char dat;
void main(void){
TMOD=0x20;
TH1=0xfd;
TH0=0xfd;
TR1=1;
PCON=0x00;
SCON=0x50;
TI=1;
while(1){
rec();
Send();
}
}
void Send(){
int i=0;
if(TI & statu){
TI=0;
SBUF=dat;
while(!TI);
statu=0;
}
}
void rec(){
if(RI){
dat=SBUF;
RI=0;
statu=1;
}
}
方式1中断式
#include <AT89X51.H>
char str[10];
int len=0;
void main(void){
int i=0;
TMOD=0x20;
TH1=0xfd;
TH0=0xfd;
TR1=1;
PCON=0x00;
SCON=0x50;
EA=1;
ES=1;
while(1){
if(len==10){
int i;
ES=0;
SBUF='\n';
while(!TI);
TI=0;
for(i=0;i<10;i++){
SBUF=str[i];
高中物理教学艺术
while(!TI);
TI=0;
}
SBUF='\n';
while(!TI);
TI=0;
ES=1;
len=0;
}
}
}
rec() interrupt 4{
if(RI){
str[len]=SBUF;
RI=0;
ES=0;
SBUF=str[len];
while(!TI);
TI=0;
ES=1;
len++;
}
}
//使用printf,scanf
#include <AT89X51.H>
#include <stdio.h>
void main(void){
int x,y,z;
unsigned int a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned int i,j;
P0=1;
SCON=0x50;
TMOD=0x20; //定时器设置主要是波特率
//TCON=0x40;
TH1=0xe8;
TL1=0xe8;
TI=1;
TR1=1;
while(1){
for(j=0;j<8;j++){
for(i=0;i<20000;i++);
P0=a[j];
}
printf("Good morning!\n");
for(j=0;j<8;j++){
for(i=0;i<20000;i++);
P0=0xff-a[j];
}
printf("input x and y\n");
scanf("%d%d",&x,&y);
z=x+y;
printf("x+y=%d\n\n",z);
}
}
//网上程序例子
#include <reg51.h>
#include <string.h>
unsigned char ch;
bit read_flag= 0 ;
void init_serialcom( void ) //串口通信初始设定
{
SCON = 0x50 ; //UART为模式1,8位数据,允许接收
TMOD |= 0x20 ; //定时器1为模式2,8位自动重装
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
ch=SBUF;
read_flag= 1 ; //就置位取数标志
}
}
main()
{
init
_serialcom(); //初始化串口
while ( 1 )
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
send_char_com(ch);
}
}
}
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




