打印
[MCU]

IO口模拟串口问题 合泰HT66F70A

[复制链接]
11681|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mr_D|  楼主 | 2016-4-17 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问下大家合泰的单片机怎么用IO口模拟串口通信?用的是HT66F70A,这个单片机不带UART,所以要模拟串口,但是我写的程序发送可以实现,但是接收部分总是不对,已经弄了好几个星期了,简直要崩溃。。。
代码稍后贴出
评论
idrummer 2019-12-15 15:26 回复TA
楼主,HT66F70A的模拟串口在吗可以发给我吗?邮箱1076406367@qq.com,我也是卡了很久,向您寻求一下帮助 
Scanf0 2019-10-27 15:36 回复TA
1014983343@qq.com可以分享一下程序吗? 
打扫房间 2019-2-17 19:36 回复TA
2955831751@qq.com 可以给我程序吗 

相关帖子

沙发
Mr_D|  楼主 | 2016-4-17 13:05 | 只看该作者
主程序部分
#include "HT66F70A.h"
#include "UART_Analog.h"
#include "sys.h"
#include "string.h"

char x[]="Hello!\t";
void main()
{

        UART_Init();
        uchar i;
        while(1)
        {
                if(RXD==0)
                //        for(i=0;i<strlen(x);i++)
                //                Send(x[i]);
                        Send(Receive());
        }

}

使用特权

评论回复
板凳
Mr_D|  楼主 | 2016-4-17 13:10 | 只看该作者
io口配置及模拟串口部分
注:RXD为_pc2口,TXD为_pc3口
#include "HT66F70A.h"
#include "sys.h"


void Sys_Init()
{
        _wdtc=0xaf;        //关闭看门狗
       
        /*        PF2 PF5上拉输出使能        做指示灯,暂不使用        */
        _pfc2=0;
        _pfpu2=1;
        _pfc5=0;
        _pfpu5=1;
       
        /*        RX:PC2   TX:PC3        */
        _pcc2=1;
        _pcc3=0;
       
                       
}

void delay()
{
        volatile int i=50000;
        while(i--);
}
[code]#include "HT66F70A.h"
#include "UART_Analog.h"
#include "sys.h"


void UART_Init()
{
        Sys_Init();
        /*        定时器装初值        */
        _tm0al=0x41;//设置波特率为9600
        _tm0ah=0x03;
           /*        工作寄存器的设定        */
        _tm0c0=0x98;//计数器暂停运行控制,时钟选择,TM总开关TnPAU=1 暂停
        _tm0c1=0xc1;//工作模式,清零条件位       
       
       
        _tm3al=0x41;//设置波特率为9600
        _tm3ah=0x03;
           /*        工作寄存器的设定        */
        _tm3c0=0x98;//计数器暂停运行控制,时钟选择,TM总开关TnPAU=1 暂停
        _tm3c1=0xc1;//工作模式,清零条件位       
       
}

void Waitting0()        //等待计时器0溢出
{
        while(!_t0af);
        _t0af=0;       
}

void Waitting3()        //等待计时器3溢出
{
        while(!_t3af);
        _t3af=0;       
}

int judge(char input,int j)
{
        if(input&j)
                return 1;
        else
                return 0;       
}

void Send(char input)
{

        uchar i=8;
        int j=0x01;
        _t0pau=0;        //开始计时       
        TXD=0;
        Waitting0();
        while(i--)
        {
                TXD=judge(input,j);
                Waitting0();
                j<<=1;
        }
        TXD=1;
        Waitting0();
        _t0pau=1;
       
        _pf5=~_pf5;        //指示灯               
}

char Receive()
{

        uchar i=8;
        char receive=0;
        _t3pau=0;        //开始计时

        if(RXD==0)
        {
               
                Waitting3();
                while(i--)
                {
                        if(RXD)
                                receive|=0x80;
                        Waitting3();
                        receive>>=1;               
                }
       
                Waitting3();
                if(RXD)
                        _t3pau=1;        //停止计时               
        }
        return receive;
}
[/code]

使用特权

评论回复
地板
Mr_D|  楼主 | 2016-4-17 21:27 | 只看该作者
啊,不好意思,已经解决了

使用特权

评论回复
5
coody| | 2016-4-17 22:36 | 只看该作者
模拟串口其实很简单,就是按串口的位时间发送或接收就好了。
我从上世纪90年代就经常软件模拟多路全双工串口用于工控,很好的。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Mr_D + 1 赞一个!
6
Mr_D|  楼主 | 2016-4-18 18:06 | 只看该作者
coody 发表于 2016-4-17 22:36
模拟串口其实很简单,就是按串口的位时间发送或接收就好了。
我从上世纪90年代就经常软件模拟多路全双工串 ...

嗯嗯,有点东西没有搞明白,已经解决了

使用特权

评论回复
7
Mr_D|  楼主 | 2016-4-18 18:07 | 只看该作者
datouyuan 发表于 2016-4-18 16:26
给你一个用状态机做的模拟串口供参考,占用一个定时器中断,但效率很高.虽然是51MCU,但移植到其它mcu是很简单 ...

谢谢,有点东西没有弄明白,已经解决了

使用特权

评论回复
8
zhlcm| | 2016-4-26 09:20 | 只看该作者
什么原因啊?

使用特权

评论回复
9
hebutwangyun| | 2016-4-27 16:21 | 只看该作者

为什么没有  UART_Analog.h

使用特权

评论回复
10
Mr_D|  楼主 | 2016-4-27 22:02 | 只看该作者

时序不对,语句顺序改一下就可以了

使用特权

评论回复
11
Mr_D|  楼主 | 2016-4-27 22:03 | 只看该作者
hebutwangyun 发表于 2016-4-27 16:21
为什么没有  UART_Analog.h

因为这个头文件里面我只进行了函数声明,所以就没贴出来

使用特权

评论回复
12
韩小阳| | 2016-4-29 21:06 | 只看该作者
具体是哪里时许不对呢?请教一下

使用特权

评论回复
13
韩小阳| | 2016-4-29 21:09 | 只看该作者
能把具体程序发一下么,谢谢

使用特权

评论回复
14
韩小阳| | 2016-5-2 14:08 | 只看该作者
您好我很着急我想要看一下您改那个程序的完整版可以发给我么

使用特权

评论回复
15
Blue-Blue| | 2016-5-4 23:46 | 只看该作者
Mr_D 发表于 2016-4-17 21:27
啊,不好意思,已经解决了

求分享如何解决,因为上面的程序好像接收时间短的话,会乱码

使用特权

评论回复
16
Blue-Blue| | 2016-5-4 23:50 | 只看该作者
Mr_D 发表于 2016-4-27 22:02
时序不对,语句顺序改一下就可以了

语句顺序怎么改?求指导

使用特权

评论回复
17
Mr_D|  楼主 | 2016-5-5 17:33 | 只看该作者
韩小阳 发表于 2016-5-2 14:08
您好我很着急我想要看一下您改那个程序的完整版可以发给我么

留个邮箱,我把程序发给你

使用特权

评论回复
18
Mr_D|  楼主 | 2016-5-5 17:33 | 只看该作者
Blue-Blue 发表于 2016-5-4 23:50
语句顺序怎么改?求指导

留个邮箱,我把程序发给你

使用特权

评论回复
19
rock24| | 2016-5-7 16:32 | 只看该作者
Mr_D 发表于 2016-5-5 17:33
留个邮箱,我把程序发给你

楼主可以把程序发我看一下吗?1093735015@qq.com谢谢。

使用特权

评论回复
20
Fearon| | 2016-5-25 19:42 | 只看该作者
楼主你好,可以看一看你的串口模拟程序的完整版嘛??我才开始学单片机,,,,491674105@qq.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

2

粉丝