找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3369|回复: 10
打印 上一主题 下一主题
收起左侧

STC12C5a60S2单片机AD检测串口发送问题

[复制链接]
跳转到指定楼层
楼主
这个程序写完发现串口接受的数据都是混乱的,还请大神指教啊?我都郁闷一天了。


主程序
#include"stc12c5a60s2.h"
#include"ADC.h"
#include"UART.h"
unsigned char channel;  //如果我在此处将Channel改成Channel=0串口接受不到数据?不知道什么问题
void main()
{
   UART_init();
   ADC_init();
   while(1);
}
void adc_isr() interrupt 5 using 1
{
ADC_CONTR&=!ADC_FLAG;
UART_Sent(channel);
UART_Sent(ADC_RES);
UART_Sent(ADC_RESL);  
if(++channel>7) channel=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|channel;
}
  ADC程序
#include"stc12c5a60s2.h"
#include"ADC.h"
#include"Delay.h"
void ADC_init()      //ADC?????????
{
P1ASF=0xff;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0;  //?????????
delay(3);
EA=1;
EADC=1;

串口程序
#include"stc12c5a60s2.h"
#include"UART.h"
void UART_init()
{
SCON=0x5a;
S2CON= 0x5a;
PCON|=0x80;
AUXR|=0x19;
AUXR1 |=0x10;
BRT=0xfa;
IE2|=0x01;
ES=0;
EA=1;  
TI=0;
RI=0;
}
void UART_Sent(uchar fdata
{
SBUF=fdata;
while(TI==0);
TI=0;

}
}




2019-02-21_170352.png (43.79 KB, 下载次数: 30)

串口接受到数据,完全不是我要的啊

串口接受到数据,完全不是我要的啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:432823 发表于 2019-2-21 21:03 | 只看该作者
ADC读数时,先选定通道、打开adc电源,等待转换完成,(转换标志位置1)后,读数。
回复

使用道具 举报

板凳
ID:277550 发表于 2019-2-21 22:53 | 只看该作者
把10进制,当16进制发送。。。。。。。。。。。。。应该转换进制,或接收端转换回来成10进制

~~~~~~~~~~~~~~

回复

使用道具 举报

地板
ID:158375 发表于 2019-2-22 08:41 | 只看该作者
问题没说清楚:单片机AD检测串口发送问题?倒是把人说糊涂了!
回复

使用道具 举报

5#
ID:474677 发表于 2019-2-22 08:47 | 只看该作者
楼主先检查波特率设置是否正确,还有STC12C5a60S2的片子如果采用内部时钟,会有相当几率的串口通信异常,因为它的内部RC振荡器频率误差比较大,我最近刚好碰到这类问题……
回复

使用道具 举报

6#
ID:394056 发表于 2019-2-22 09:23 | 只看该作者
devcang 发表于 2019-2-21 22:53
把10进制,当16进制发送。。。。。。。。。。。。。应该转换进制,或接收端转换回来成10进制

~~~~~~~~~~ ...

官网程序也没有进行进制转换,也是直接将RES和RESL直接发送出去的。不太明白怎么转换,还请指导

回复

使用道具 举报

7#
ID:394056 发表于 2019-2-22 09:25 | 只看该作者
yaoji123 发表于 2019-2-21 21:03
ADC读数时,先选定通道、打开adc电源,等待转换完成,(转换标志位置1)后,读数。

是先打开的AD电源然后转换的呢
回复

使用道具 举报

8#
ID:394056 发表于 2019-2-22 09:28 | 只看该作者
笨笨兔 发表于 2019-2-22 08:41
问题没说清楚:单片机AD检测串口发送问题?倒是把人说糊涂了!

主题是比较简短的了(水平不够啊),这个问题有啥方法解决吗
回复

使用道具 举报

9#
ID:213173 发表于 2019-2-22 09:49 | 只看该作者
1.使用STC12C5a60S2的串口通讯必须外接晶振,内部振荡器无法满足波特率精度。
2.楼主初始化串口程序可能有误,使用串口2独立波特率发生器设置如图

回复

使用道具 举报

10#
ID:123289 发表于 2019-2-22 12:24 | 只看该作者
核实一下波特率
回复

使用道具 举报

11#
ID:394056 发表于 2019-2-22 13:34 | 只看该作者
wulin 发表于 2019-2-22 09:49
1.使用STC12C5a60S2的串口通讯必须外接晶振,内部振荡器无法满足波特率精度。
2.楼主初始化串口程序可能有 ...

问题已经解决,确实是自己在串口配置中出错了(波特率计算错了导致收到的数据全错了),谢谢大家的帮助。
但是有遇到了个新问题就是有几个通道返回的数据不正确,不太明白问题出在哪里了啊

2019-02-21_170352.png (66.94 KB, 下载次数: 31)

2019-02-21_170352.png
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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