查看文章 |
作业参考该程序的结构 可以在程序中设置缓冲区,中断程序只是把收到的数据放入缓冲区,而在主程序里处理这些数据.这样做的目的是减少中断程序执行时间, 允许的中断频率就增大了,即数据传输速度变大. #include "reg51.h" #define uchar unsigned char //-------------------------------------------------------------------------- void UART_Init(void)
//-------------------------------------------------------------------------- void main(void)
void Uart_SendData(uchar dat)
//-------------------------------------------------------------------------- void INT_UartRcv(void) interrupt 4 } 另一个程序
甲机发送: #include <reg51.h> #define uchar unsigned char uchar idata buf[16];
void main() { TMOD=0x20; TH1=0xE6;TL1=0xE6; PCON=0x00; TR1=1; SCON=0x50; EA=1;ES=1; while(1); }
void send_int() interrupt 4 { uchar i,sum=0;
if((SBUF^0xBB)!=0) {if(TI==1) TI=0; else(RI==1) RI=0; } if (SBUF!=0) {for(i=0;i<16;i++) {SBUF=buf[i]; sum+=buf[i]; if(TI) TI=0;} SBUF=sum; if(TI==1) TI=0; else(RI==1) RI=0;} }
乙机接收: #include <reg51.h> #define uchar unsigned char uchar idata buf[16]; uchar sum; char HasData=0; /* 0表示数据还未接受完,1表示数据已接收完*/ void main() { char i; TMOD=0x20; TH1=0xE6;TL1=0xE6; PCON=0x00; TR1=1; SCON=0x50; EA=1;ES=1; while(1) { if (HasData) for(i=0;i<16;i++) buf[i]=SBUF; } } void rcv_int() interrupt 4 { sum=0; if(SBUF^0xAA!=0) {if(RI=1) RI=0; } SBUF=0xBB; if(TI) TI=0; while(1) { sum=0; char j; for(j=0;j<16;j++) { if(RI) RI=0; buf[i]=SBUF; sum+=buf[i]; } if(RI==1) RI=0; if((SBUF^sum)==0) { SBUF=0x00; HasData=1; break; } else { SBUF=0xff; if(TI==1) TI=0; } } }
|