我遇到的另一个问题,似乎我想不出问题所在。 使用AT89S51的,项目是通过RS485的数据流,每个uC站号,并选择指定的数据 ,现在我只是测试的串口... 发现是串口不是象我想象中的那样工作。。。。代码如下:我的想法是UC上不断发送,读取的P1和输出P2的值的命中率。如果我短的UC Tx和Rx端口,那么我应该收到与我发送相同的数据。我要证明我已接收到的数据,swaped ACC和它输出到P2 ,P0.0到P0.0(MAX1232)给我的复位发生器的脉冲
- $MOD51
- org 0000H
- ljmp INItiAL
- org 0100H
- INITIAL:
- setb P0.0
- mov TH1,#0FDH
- mov TMOD,#20H
- setb TR1
- clr P0.0
- mov PCON,#00H
- mov SCON,#0D0H
- clr TI
- clr RI
- MULAI:
- setb P0.0
- mov A,P1
- mov P2,A
- mov SBUF,A
- clr P0.0
- clr TI
- jb RI,SERIAL_RECEIVED
- ljmp MULAI
- org 0150H
- SERIAL_RECEIVED:
- clr P0.0
- mov A,SBUF
- swap A
- setb P0.0
- mov P2,A
- jmp SERIAL_RECEIVED
复制代码大家有没有什么意见。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我有一个是用C语言写的,在串口调试助手上输入什么,就接受什么
可能端口和你的不大一样
#include<reg51.h>
#define uchar unsigned char
sbit P3_0=P3^0;
uchar a,flag;
void main()
{
TMOD=0x20; //设置定时器 1 为模式2
TH1=0xfd; //装初值设定波特率
TL1=0xfd;
TR1=1; //启动定时器
SM0=0; // 串口通信模式设置
SM1=1;
REN=1; // 串口允许接收数据
EA=1; //开总中断
ES=1; //开串行中断
while(1)
{
if(flag==1) //如果有数据则进入这个语句
{
ES=0; //进入发送数据时先关闭串行中断
flag=0;
SBUF=a; //将数据原样发回
while(!TI); //等待数据发完
TI=0;
ES=1; //退出进再开串行中断
}
}
}
void serial() interrupt 4 // 串行中断函数
{ P3_0=SBUF; //将数据发送给 P3_0 口显示(测试用)
a=SBUF; //收取数据
flag=1; //标志置位
RI=0;
}
一周热门 更多>