请教一个单片机的问题

[复制链接]
查看11 | 回复4 | 2011-4-16 10:24:51 | 显示全部楼层 |阅读模式
程序是这个的:
void init_s(void)
{
ES=1;
TMOD=0x20;
SCON=0x50;
TH1=250;
TL1=250;
TR1=1;
PCON=0x80;
if(RI==1)
{
P0=SBUF;
RI=0;
SBUF=P0;
while(TI==0);
TI=0;
}
}
单片机通过P0组接口实现将传进来的并行数据转化成RSR232串行数据到计算机。
P0接口为AD采样,然后通过一条线发送至计算机读取数据。
上面的这个程序,无法将A/D转换器的8位数据上传至计算机,请问。上面的这个程序应该怎样改好?
我是第一次学习单片机,所以程序写的比较糟糕。
串口不用讲了,RS232收发器我用CPLD实现成功,只是为了节省设计成本,就打算改用单片机实现这个功能了。

回复

使用道具 举报

千问 | 2011-4-16 10:24:51 | 显示全部楼层
void init_s(void){ ES=1;//如果你不使用串口中断的话这句话就可以省去了 TMOD=0x20; SCON=0x50; TH1=250; TL1=250;//看看你的波特率设置的对不对,PC机和单片机的波特率一定要一致 TR1=1; PCON=0x80; if(RI==1) {P0=SBUF;//这句话是什么意思,将上位机发给单片机的数据赋给P0口?干嘛要这样做呢,你不是想把P0口的数据传给PC机吗,那这一句就不要了吧RI=0;SBUF=P0;//这一句就是将采集到的数据送给串口缓冲器,然后发送给上位机while(TI==0);TI=0; }}
回复

使用道具 举报

千问 | 2011-4-16 10:24:51 | 显示全部楼层
如果只是发送单片机P0口的数据,不要接收的那部分。#include voidmain(void)
//void init_s(void){ ES=1; TMOD=0x20; SCON=0x50; TH1=250; TL1=250; TR1=1; PCON=0x80;// if(R
回复

使用道具 举报

千问 | 2011-4-16 10:24:51 | 显示全部楼层
串口接收需要用中断来做void serial () interrupt 4 {
if (RI)
{RI = 0;
P0=SBUF;}}发送则:SBUF = P0;while(TI) TI=0;单片机main()里至少要包含一个无限循环while(1),否则怎么一直运行呢
回复

使用道具 举报

千问 | 2011-4-16 10:24:51 | 显示全部楼层
while(1)呢程序应该一直在while(1)里面检测是否接受中断RI置1,若RI==1,表明计算机有数据传进来(任何数据都会发送P0的数据),然后SBUF=P0;发送出P0数据如果要发送相关指令,计算机才收取单片机数据可以加IF条件句可以用个数组收取发送的数据进来,然后比较数组值,识别相关指令while(1){if(RI==1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行