52芯片,比51要多一个定时器。所以我在网上也是看了很多资料,许多都不能运行,我在进行部分修改后,终于在keli和proteus上实现了仿真测试。以下是我的代码和设计的电路。
/*-----------------------------------------------------------------------------
* 实 验 名 : RS232串口试验
* 实验说明 : 单片机串口接收数据控制灯亮灭
* 连接方式 :
* 注 意 : 该试验使用的晶振是11.0592
*******************************************************************************/
#include #include #define uchar unsigned char #define uint unsigned int uchar PuZh[36] = "hello world"; //--定义使用的IO--// sbit LED=P2^0; //--声明全局函数--// void UsartConfiguration(); void Delay_1ms(uint i); /******************************************************************** * 名称 : Com_Int() * 功能 : 串口中断子函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Com_IntIsr(void) interrupt 4 { uchar i; uchar receive_data; EA = 0; if(RI == 1) //当硬件接收到一个数据时,RI会置位 { RI = 0; receive_data = SBUF;//接收到的数据 if(receive_data == '1') { LED =0;//接收到1亮灯 } else { LED =1; //其他情况灯灭 } } for(i=0; i<36; i++) { SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 Delay_1ms(1); } EA = 1; } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { UsartConfiguration();//初始化串口 while(1); } /******************************************************************************* * 函 数 名 : UsartConfiguration() * 函数功能 : 设置串口 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void UsartConfiguration() { T2MOD = 0x01; //自动重载 T2CON = 0x30; //T2用做发送接收时钟 TH2 = 0xFF; //9600波特率,11.0592Mhz晶振 TL2 = 0xDC; RCAP2H = 0xFF; RCAP2L = 0xDC; SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据,可变波特率 PCON = 0X00; //波特率不加倍 TR2 = 1; //启动T2 ES = 1; //开串口中断 EA = 1; //开总中断 } /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j for(x=0;x<=148;x++); } 由于不是用的自己电脑来画的图,所以就没有办法贴出图片,但是要是有空的话,我一定把图贴出来。但是我还说一下设计的大概思路,就是一个最小单片机系统RX端接compim的RX端,TX接compim的TX端,然后LED接P2口的0端。
上一篇:89c51单片机32个心形流水灯
下一篇:51单片机定时器TMOD与TCON、SCON
推荐阅读最新更新时间:2024-11-18 20:50