找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

关于PC机串口通信问题,欢迎高手来看下

[复制链接]
admin 发表于 2012-9-2 08:42:14 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
自己弄的新手程序,主要问题处,我加了“注意”两个字的,所以对高手应该很好看清楚哦。谢谢哈,忘解答啊。
#include <REGX52.H>
#include"MAX232_H.H"
#include"MacroAndConst.h"
void main()
{
InitMax232();
SBUF=0x55;while(!TI)TI=0; //注意:此处本来应该由PC机发出,我调试的时候,先程序模拟的
SBUF=0xAA;while(!TI)TI=0;
SBUF=0x01;while(!TI)TI=0;
while(1)
{ RI=1;
if(Txdflag)
{
Txdflag=0;
Serial_Txd(Txdnum);
}
}
}
/***********************************************************************************
***********************************************************************************/

#ifndef __MAX232_H__
#define __MAX232_H__
/*---------------------------------------------------------------------------------*
调用的头文件
*---------------------------------------------------------------------------------*/
#include <REGX52.H>
#include"MacroAndConst.h"
/*---------------------------------------------------------------------------------*
可调用变量
*---------------------------------------------------------------------------------*/
extern bit Txdflag;
extern uchar Txdnum[15];
/*---------------------------------------------------------------------------------*
可调用函数
*---------------------------------------------------------------------------------*/
extern void InitMax232(void);
extern void Serial_Txd(uchar *p);
#endif
/***********************************************************************************
***********************************************************************************/

#include"MAX232_H.H"
bit Txdflag=0;
uchar Txdnum[15]={0,1,2,3,4,5,6,7,8,9,0xa0,0xa1,0xa2,0xa3,0xa4};
/*-------------片内RAM初始化-----------------------*/
void InitMax232(void)
{
TMOD=0X21;
TH1=0XFD;TL1=0XFD;
SCON=0X50;
PCON=0X00;
TR1=1;ES=1;

TH0=0XDC;TL0=0X00;
ET0=1;
EA=1;
}
/*-----------------------------------------*/
void Serial_Txd(uchar *p)
{
uchar i;
for(i=0;i<15;i++)
{
SBUF=*p++;
while(!TI);TI=0;
}
}
/*------------T0中断块---------------------*/
void T0interrupt() interrupt 1
{
static uchar timercount=200;
TH0=0XDC;
TL0=0X00;
if(--timercount==0)
{
timercount=200;
Txdflag=1;
}
}
/*-----------------串口中断块------------------*/

void Serial_Int() interrupt 4
{
uchar temp;
ES=0;
if(RI) // 注意:为什么一直进不了这个if()里面??我直接将RI=1。或者把RI换成1,都进不去
{
temp=SBUF;RI=0;
if(temp==0x55)
{
while(!RI);
temp=SBUF;RI=0;
if(temp==0xAA)
{
while(!RI);
temp=SBUF;RI=0;
if(temp==0x01)
{
P1=~temp;
TR0=1;
}
}
else ES=1;
}
else ES=1;
}
ES=1;
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 10:52 , Processed in 0.050503 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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