void ser() interrupt 4
{
RI=0;
flag=1;
a=SBUF;
}
不对,修改如下
//串口接收中断函数
void serial () interrupt 4
{
EA=0;
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
}
EA=1;
}
下面是我的参考程序,希望对你有用
.......
bit read_flag=0;
void COM_Init(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xF6; //Baud:9600 fosc=18.432MHz 11.0592 0XFD
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
EA=0;
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
}
EA=1;
}
main()
{
char i=0,N;
COM_Init(); //初始化串口
while(1)
{
if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
{ EA=0;
read_flag=0; //取数标志清0
MCU_TXD(dat[i]);//数据处理过程
EA=1;
}
}
}
希望对你有帮助
jvifhngklnkbm bkvjnkm jkbgnkc bjn
初始化中需要加入
SCON=0x50;//串口模式配置
TR1=1;//启动波特率发生器
主程序中的if对num判断应该用==
ES=0之后没有ES=1重新允许中断.
不知道你想定义T0计数多少,赋值的写法明显有问题.
等等......
你首先要理清思路,单片机通讯,不管是232还是485,只要不是全双工,其通讯程序都是一样的,况且你用到全双工的几率很小。唯一的差别就是单片机上需要有个引脚是控制485芯片传输方向,这个要根据你的硬件了。
232通讯程序网上不难找吧。
232通讯:
。。。
接收
。。。
和
。。。
发送
。。。
485通讯
。。。。
接收
。。。。
。。。。
485设为发送
发送
485设为接收
。。。。。
程序,很难理解。
楼主能否说一下,编写这个程序的目的是什么?