基于Proteus虚拟终端51单片机仿真串口发送和接收字符串.docxVIP

  • 130
  • 0
  • 约1.45千字
  • 约 5页
  • 2016-11-29 发布于重庆
  • 举报

基于Proteus虚拟终端51单片机仿真串口发送和接收字符串.docx

基于Proteus虚拟终端51单片机仿真串口发送和接收字符串

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

文档评论(0)

1亿VIP精品文档

相关文档