预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

先上图: 实验程序: /********************************************************************************* *【编写时间】:2016年6月12日 *【作者】:小瓶子 *【实验平台】:Proteus7 *【内部晶振】:11.0592mhz *【主控芯片】:STC89C51 *【编译环境】:KeilμVisio4 *【程序功能】:利用虚拟中断实现串口数据的发送和接收 **********************************************************************************/ #include<reg51.h> #defineuintunsignedint #defineucharunsignedchar //毫秒级延时函数 voiddelay(uintx) { uchari; while(x--) { for(i=0;i<120;i++); } } //字符发送函数 voidputchar(uchardata1) { SBUF=data1;//将待发送的字符送入发送缓冲器 while(!TI);//等待发送完成 TI=0;//发送中断标志请0 } //字符串发送函数 voidputstring(uchar*dat) { while(*dat!='\0')//判断字符串是否发送完毕 { putchar(*dat);//发送单个字符 dat++;//字符地址加1,指向先下一个字符 delay(5); } } //串口初始化函数 voidserial_init() { ucharc=0; SCON=0x50;//串口方式1,允许接收 TMOD=0x20;//T1工作于方式2 PCON=0x00;//波特率不倍增 TL1=0xfd; TH1=0xfd;//波特率设置为9600 EA=1; //开总中断 ES=1;//开串口接收中断 } //主函数 voidmain() { serial_init(); //串口初始化 TR1=1;//定时器开启 delay(200); putstring("Receivingfrom8051...\r\n");//串口向终端发送字符串,结尾处回车换行 putstring("----------------------\r\n"); delay(50); while(1); } //串口中断 voidrevdata()interrupt4 { uchartemp; if(RI==0)return;//如果没有接收中断标志,退出中断 ES=0;//关闭串口中断 RI=0;//清串行中断标志位 temp=SBUF;//接收缓冲器中的字符 putchar(temp);//将接收的字符发送出去 ES=1;//开启串口中断 } 仿真: