51_串行通信
来源:互联网 发布:淘宝卖家数据谁有账号 编辑:程序博客网 时间:2024/05/22 09:06
/*三根线(同样适合单片机与单片机,单片机与PC,单片机与其他的收发设备)
*P3^0连接另一单片机的P3^1
*P3^1连接另一单片机的P3^0
*地连接另一单片机地
*/
/////////////////////////////////////////////////////////////
/*GATE C / T M1 M0 GATE C / T M1 M0*/
TMOD=0x20; ////定时器T1工作在方式2,
/* SCON: SM0 SM1 SM2 REN TB8 RB8 TI R1 */
SCON=0x50;// 串行口工作在方式1,既可以发送数据,也可以接收数据,波特率可变 ,8位,也可以这样写:SM0=0; SM1=1;REN=1; //允许接收数据 0101_0000
PCON=0x00; //主要是为了SMOD为1或者0,0为波特率不加倍
TH1=0xfd; // 赋值9600的波特率
TL1=0xfd;
RI=0; //RI,TI:串行口收/发数据申请中断标志位
TI=0;
TR1=1; //启动定时器1,用定时器1作为波特率发生器
/*IE: EA — ET2 ES ET1 EX1 ET0 EX0*/ //ES:串行中断允许控制位
IE=0x90; //串行口总中断打开 使能串行中断
////////////////////串口中断函数///////////////////////////////////////////////
void recieve() interrupt 4
{
if(RI==1)
{
RI=0;
shuju[i]=SBUF;
i++;
if(i==8)//前面定义了uchar shuju[8];
{
i=0;
write_str(0x88, "接收到的数据:");
write_lcd12864(1,shuju[0]);
write_lcd12864(1,shuju[1]);
write_lcd12864(1,shuju[2]);
}
}
}
/////////////////////////////////发送函数/////////////////////////////////////////////
void transfer(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//////////////////////////////////////end///////////////////////////////////////////////
注意:如果是9600的波特率要11.0592的晶振,初值TH1=0xfd; TL1=0xfd;如果接收发送不正常多数是波特率不对!
如果调试的时候出错,可以先用单片机跟PC的串口调试软件调试发送跟接收看是否正常!!
初值x=2^8 - 2^0(SMOD) * 11.0592*10^6 (晶振) / (32*波特率*12)
(**51单片机**)
- 51_串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信
- 串行通信与重叠I/O _自我学习
- MCS-51的串行通信口 (转)
- 51单片机编程:双机串行通信
- 同步串行通信和异步串行通信
- 同步串行通信与异步串行通信
- 串行通信的实现
- 驱动和串行通信
- 串行通信基础
- 联想万全R350 G7服务器启动tomcat死机
- 沟通
- 眼控电脑专用眼镜亮相
- Form Query Process Flow(F11 -> Ctrl+F11)
- 子类继承父类时实例化子类的执行顺序
- 51_串行通信
- java property有乱码
- 使用strace工具故障排查的5种简单方法
- Java:String和Date、Timestamp之间的转换
- 家乡的小河
- Python学习笔记
- 关于无效使用 Null: 'Replace'
- 黑马程序员——html回顾
- 如何优雅地关闭一个socket