为国外客户做网站建设,三网获客大数据获客营销软件,搬家公司网站制作,分销系统是什么计算机串行通信#xff1a; 并行通信#xff1a; 串行通信#xff1a; 异步通信#xff1a; 同步通信#xff1a; 串行通信的传输方向#xff1a; 串行通信常见的错误校验#xff1a; 传输速率比特率#xff08;波特率#xff09;#xff1a; #xff08;fos…计算机串行通信 并行通信 串行通信 异步通信 同步通信 串行通信的传输方向 串行通信常见的错误校验 传输速率比特率波特率 fosc是晶振频率要将Mhz转化为hz乘10的6次方若不设置SMOD则默认是0有想设置的波特率就可以求出T初了将它赋给TH和TL就行了
串行通信接口标准 传输距离与传输速率的关系 采用RS-232C接口存在的问题 串行接口的结构 使用串口前的准备工作 与串行通信相关的寄存器 可位寻址的意思是可以写为像以下这样的形式 SM00; SM11;//串口工作方式1,8位UART波特率可变REN1;//串口允许接收定时计数器控制寄存器TCON 单片机同优先级中内部查询顺序 串口通信示例通过定时中断刷新数码管显示PC端发送的数据
#include reg52.h
#include intrins.h#define uint unsigned int
#define uchar unsigned charsbit DU P2^6;//数码管段选
sbit WE P2^7;//数码管位选
sbit key_s2 P3^0;//独立按键S2
sbit key_s3 P3^1;//独立按键S3
uchar num;//数码管显示的值//共阴数码管段选表
uchar code SMGduan[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
uchar code SMGwei[] {0xfe, 0xfd, 0xfb};void display(uchar i)
{static uchar wei; P0 0XFF;//清除断码WE 1;//打开位选寄存器P0 SMGwei[wei];WE 0;//锁存位选寄存器switch(wei){case 0: DU 1; P0 SMGduan[i / 100]; DU 0; break;case 1: DU 1; P0 SMGduan[i % 100 / 10]; DU 0; break; case 2: DU 1; P0 SMGduan[i % 10]; DU 0; break; }wei;if(wei 3)wei 0;
}
//定时器0初始化
void timer0Init()
{EA 1; //打开总中断ET0 1;//打开定时器0中断TR0 1; //启动定时器0TMOD | 0X01; //定时器工作模式16位定时模式TH0 0xED;TL0 0xFF; //定时5ms
}
//串口初始化
void UARTInit()
{EA1;//打开总中断ES1;//打开串口中断SM00; SM11;//串口工作方式1,8位UART波特率可变REN1;//串口允许接收TR11;//启动定时器一用来串口通信设置波特率TMOD |0x20;// 定时器1工作模式2 8位自动重装TH10xfd;TL10xfd;//设置波特率9600
}void main()//main函数自身会循环
{ timer0Init();//定时器0初始化UARTInit();//串口初始化while(1);
} //定时器中断函数达到时间后进入中断函数
void timer0() interrupt 1
{TH0 0xED;TL0 0xFF; //定时5msdisplay(num); //数码管显示函数
}
//串口中断函数
void UART() interrupt 4
{uchar temp;if(RI)//判断接收数否完成{numSBUF;//读SBUF读串口接收到的数据RI0;//软件清0接收标志位tempnum;SBUFtemp;//写SBUF把要发送的数据发送给缓存器}if(TI)//判断是否发送完成TI0;//清0发送完成标志位
} 当单片机接收到一帧数据后RI会置1向CPU申请中断若之前有中断允许则产生了中断进入中断服务程序。当然单片机发送完一帧数据TI也会置1同样会产生中断
补充其实不管你有没有允许中断上位机此时即给单片机发送信息的机器只要给单片机发送数据单片机就会自动接收数据并把它放在数据缓冲器SBUF中如果你之前有允许串行口中断RI就会置1向单片机CPU申请中断并进入中断服务程序即你问题中的serial()函数做完这个函数后就会自动返回断点。如果你没有允许中断便不会产生串行中断。