串口通信:异步通信,一帧一帧地发送,有点像TCP/IP那样^_^
每帧参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。挺好理解的,注意全双工。
//串口
#include<reg52.h>
#define uchar unsigned char
uchar a,flag;
void main(){
TMOD=0x20;//方式2,8位自动重装定时器
TH1=0xfd;//赋值高四位
TL1=0xfd;//赋值低四位
TR1=1;//定时器1开始工作
SM0=0;//工作方式选位
SM1=1;//工作方式选位
//以上两个值决定了串行口控制寄存器工作方式为1
REN=1;//串行口接收允许位
EA=1;//总中断
ES=1;//串行口中断允许位
PCON=0x80;//只有PCON。7这一种写位,波特率提高
while(1){
if(flag==1){
ES=0;//不允许串行口中断
flag=0;//赋值
SBUF=a;//发送a
while(!TI);//串行口发送中断标志位非零
TI=0;//串行口发送中断标志位,要手动清,否则下次不可以发送
ES=1;//允许串行口中断
}
}
}
void serial() interrupt 4{
P1=SBUF;//接收
a=SBUF;//接收
flag=1;//赋值,执行if语句
RI=0;//串行口接收中断标志位关闭,不可接收
}
//IIC
//总线初始化,将总线都拉高以释放总线
void init(){
SCL=1;
delay();
SDA=1;