STC15F系列单片机模拟串口57600bps@24MHz
上图上PDF:论坛BUG?
牛!!!支持楼主。。。
牛牛牛XX 挺猛。。。 收到的数据全部回传,你用串口工具试试就知道了
厉害!!!!!!!!!!!!!!!!!!1 oufuqiang 发表于 2013-1-31 23:04 static/image/common/back.gif
收到的数据全部回传,你用串口工具试试就知道了
楼主,能否吧你的程序传上来,让我试试 牛!!!!! xyz2008 发表于 2013-2-1 09:20 static/image/common/back.gif
楼主,能否吧你的程序传上来,让我试试
PDF都传上来了,你自己打开复制就好了啊。
本人向来不传.C文件,太懒了。 楼主啊 我怎么测试了下 丢包这么严重啊11.0592M 9600波特率下~ 丢包?我都用了一年了,没丢啊。说详细点 厉害!!!!学习了 这个程序不怎么可靠,,因为没有采样,一般都用定时器的频率比波特率低采样。。 STM32LOU 发表于 2013-8-6 10:35 static/image/common/back.gif
这个程序不怎么可靠,,因为没有采样,一般都用定时器的频率比波特率低采样。。 ...
请仔细看帖。另外自己没有试过不要轻易下结论。
oufuqiang 发表于 2013-8-6 14:04 static/image/common/back.gif
请仔细看帖。另外自己没有试过不要轻易下结论。
我看了程序,根据波特率定时,,不怎么可靠,,再开个定时器采样,频率大于波特率 学习了。厉害!!!! STM32LOU 发表于 2013-8-6 16:10 static/image/common/back.gif
我看了程序,根据波特率定时,,不怎么可靠,,再开个定时器采样,频率大于波特率 ...
定时器中断频率是波特率的三倍。
oufuqiang 发表于 2013-8-6 20:24 static/image/common/back.gif
定时器中断频率是波特率的三倍。
这个我知道,,是3倍,,但是也没有用,,,再X3检测也是一样。。 STM32LOU 发表于 2013-8-7 09:41 static/image/common/back.gif
这个我知道,,是3倍,,但是也没有用,,,再X3检测也是一样。。
膜拜高手……高手说的话我等平民百姓听不懂。
不知能否百忙中抽点空给我们普及一下关键技术呢?
oufuqiang 发表于 2013-8-7 16:07 static/image/common/back.gif
膜拜高手……高手说的话我等平民百姓听不懂。
不知能否百忙中抽点空给我们普及一下关键技术呢?
我也是菜鸟啊, 我看了你程序没有采样多少次高电平才算这位是高电平,我想了一下除非用两个定时器,我想有一种方法跟你差不多,就是刚开始检测起始位,把定时器频率调高点,然后检测到了起始位,就跟波特率一样,貌似跟你的方法一样的。。 好人,值得一试。 接收只采样一次,就是在第三次定时中断的时候 楼主的程序写的并不完善,不足有三:
第一:原则性错误,定时器优先级不是PX0而是PT0
第二:接收一位的采样不在中点,改进一下:
if(RX_IO==0)
{
receing=1;
rece_pls_count=4; 3改成4即可
rece_bit_count=8;
}
第三:发送停止位只是拉高数据线即结束,导致停止位发送不全,连续发送的时候可能导致数据接收错误,最好发送的停止位不少于一比特的时间
菜鸟,说不对的地方请见谅,代码请自行修改 学习了,最近也在做模拟串口 15系统的单片机没办法和蓝牙进行透传 郁闷! STC官方例子有各种模拟串口程序 {:smile:}试试。 if (--rece_pls_count == 0) //三次脉冲计数够了吗?
{
//接收一位二进制位开始
rece_pls_count = 3; //脉冲计数辅助变量复位
if (rece_bit_count) //是在接收数据位还是停止位
{
//接收数据位开始
receing_data = receing_data >> 1; //向右移一位,准备拼入一位二进制数据
if (RX_IO == 1)
{
receing_data = receing_data | 0x80; //如果收到的是二进制位"1",则拼入最高位中
}
rece_bit_count = rece_bit_count - 1; //已接收一位,接收位计数变量计数
} //接收数据位结束
else //如果已经收完8位数据
{
//就开始接收停止位
receing = 0; //本字节已接收完毕
if (RX_IO == 1) //停止位是"1"吗
{
//是“1”
byte_received = receing_data; //将数据输出
received = 1; //摇旗示意数据正确接收完毕
} //数据输出处理完毕
} //停止位处理完毕
} //接收一位二进制位结束
} //接收中处理结束
// 看不到有機制,比較之前是否一樣,只是等待時間過
// 這樣 x10倍頻也沒用
页:
[1]