查看: 1216|回复: 0
打印 上一主题 下一主题

AT89S52精简开发板485通讯测试程序

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-27 19:45:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************************************
                            汇诚科技

实现功能:此版配套测试程序
使用芯片:AT89S52
晶振:11.0592MHZ
波特率:9600
编译环境:Keil
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
/********************************************************************
程序说明:
1、所有IO口流水灯3次。
2、所有IO口闪烁输出5次。
3、按下P2.0按键点亮P1.0灯,按下P2.1按键点亮P1.1灯,按下P2.2按键点亮P1.2灯,按下P2.3按键点亮P1.3灯,
4、接收串口发送的数据再返回原值。
********************************************************************/
#include<reg52.h>                 //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
/********************************************************************
                            初始定义
*********************************************************************/
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
/********************************************************************
                            延时函数
*********************************************************************/
void delay()//延时程序 0.2秒
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}

/********************************************************************
             功能:串口初始化,波特率9600,方式1
*********************************************************************/        
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/********************************************************************
                            闪烁函数
*********************************************************************/
void shanshuo(uchar j)
{
uchar i;
for(i=0;i<j;i++)
{
P0=0X001=0X002=0X003=0X00;
delay();
P0=0XFF1=0XFF2=0XFF3=0XFF;
delay();
}
}
/********************************************************************
                            流水灯函数
*********************************************************************/
void liushuideng(uchar j)
{
uchar i,temp,a,k;
for(i=0;i<j;i++)
{
        temp=0xfe; //11111110定义每次一个灯亮
        P3=P2=P0=P1=temp;//直接对1/0口赋值,使批输出低电平。
        delay();//延时
        for(k=1;k<8;k++)//实现广告灯的从右到左移动
{
a=temp<<k;                //左移i位
P3=P2=P0=P1=a;//相与求值
delay();
}
}
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{
Init_Com();//串口初始化
liushuideng(3);//所有IO口流水灯3次
shanshuo(5);//所有IO口闪烁输出5次
while(1)
{
if(P20==0){P10=0;} //如果P2.0按键按下,P1.0口输出低电平,指示灯亮。
if(P21==0){P11=0;} //如果P2.1按键按下,P1.1口输出低电平,指示灯亮。
if(P22==0){P12=0;} //如果P2.2按键按下,P1.2口输出低电平,指示灯亮。
if(P23==0){P13=0;} //如果P2.3按键按下,P1.3口输出低电平,指示灯亮。

if(RI) //扫描判断是否接收到数据,
{
dat=SBUF; //接收数据SBUF赋与dat
RI=0; //RI 清零。
SBUF=dat; //在原样把数据发送回去
}
}
}
       
/********************************************************************
                              结束
*********************************************************************/



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表