.-
{ if(INT0==0) //如果相应按键(默认为sw18)按下,则允许接收 {REN=0;}
if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲 {
SBUF = RX1_Buffer[TX1_Cnt]; //把收到的数据远样返回 B_TX1_Busy = 1;
if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0; }
else{if(INT1==0) //如果相应按键(默认为sw17)按下,则禁止接收 {REN=1;}} } }
4.3 中断服务程序
void UART1_int (void) interrupt 4//中断服务子程序 {
if(RI) //如果产生中断,则把SBUF内容赋值给单片机的数组 {
RI = 0;
RX1_Buffer[RX1_Cnt] = SBUF;
if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0; //防溢出 } if(TI) {
TI = 0;
B_TX1_Busy = 0; } }
4.4 总程序
/************* 功能说明 **************
双串口全双工中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
******************************************/
#define MAIN_Fosc 22118400L //定义主时钟 #include \
#define Baudrate1 115200L
.-
#define UART1_BUF_LENGTH 200 u8 TX1_Cnt; //发送计数 u8 RX1_Cnt; //接收计数 bit B_TX1_Busy; //发送忙标志 u8 idata RX1_Buffer[UART1_BUF_LENGTH]; //接收缓冲 void UartInit(void) //115200bps@22.1184MHz {
SCON = 0x50; //8位数据可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发射生器 TMOD &= 0x0F; //设置定时器1为16位自动重装方式 TL1 = 0xD0; //设定定时初值 TH1 = 0xFF; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 }
void main(void) {
P0M1 = 0; P0M0 = 0; //设置为准双向口 P1M1 = 0; P1M0 = 0; //设置为准双向口 P2M1 = 0; P2M0 = 0; //设置为准双向口 P3M1 = 0; P3M0 = 0; //设置为准双向口 P4M1 = 0; P4M0 = 0; //设置为准双向口 P5M1 = 0; P5M0 = 0; //设置为准双向口 P6M1 = 0; P6M0 = 0; //设置为准双向口 P7M1 = 0; P7M0 = 0; //设置为准双向口 UartInit() ;
//UART1_config(1); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
EA = 1; //允许总中断 ES=1; //开串口中断
PrintString1(\//SUART1发送一个字符串 while (1)
{ if(INT0==0) {REN=0;}
if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲 {
SBUF = RX1_Buffer[TX1_Cnt]; //把收到的数据远样返回 B_TX1_Busy = 1;
if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0; }
else{if(INT1==0) {REN=1;}}
.-
} }
void UART1_int (void) interrupt 4//中断服务子程序 {
if(RI) {
RI = 0;
RX1_Buffer[RX1_Cnt] = SBUF;
if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0; //防溢出 } if(TI) {
TI = 0;
B_TX1_Busy = 0; } }
第五章 总结与体会
串行通信端口在系统控制的范畴中一直占据着及其重要的地位,它不仅没有因为时代的进步而遭淘汰,反而在规格上越来越完善,应用也越来越广泛。作为一种基本而又灵活方便的通信方式,串口通信被广泛应用于PC与PC或者PC与单片机之间的数据交换以及其他工业控制与自动控制中。
随着单片机和微机技术的不断发展,由PC机和多台单片机构成的多机网络监控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,Windows环境下后台微机在数据库管理上具有明显的优势,二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。
随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。但是USB接口逐步取代RS-232(DB-9)串口已是大势所趋,单片机同计算机的USB通信在实际工作中的应用范围也将越来越广。本文所介绍的单片机和PC机的USB通信方法,具有电路简单,兼容性好,可移植性强等特点,故可作为单片机同计算机的USB通信模块广泛应用于工业和电子产品的开发中。
.-
第六章 参考文献
[1]于永.15系列单片机C语言常用模块与综合系统设计.电子工业出版社,2007 [2]丁向荣.单片微机原理与接口技术.电子工业出版社,2010
[3]郭天祥.《新概念51单片机C语言教程》.北京:电子工业出版社 [4]袁新艳.计算机外设与接口技术[M].高等教育出版社,2009.
相关推荐: