专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
HT66F70A
GPIO
模拟串口
IO口模拟串口问题 合泰HT66F70A
2020-03-12 19:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5235
20
20
问下大家合泰的单片机怎么用IO口模拟串口通信?用的是HT66F70A,这个单片机不带UART,所以要模拟串口,但是我写的程序发送可以实现,但是接收部分总是不对,已经弄了好几个星期了,简直要崩溃。。。
代码稍后贴出
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
Mr_D
2020-03-12 23:16
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]
加载中...
查看其它20个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
HT66F70A
GPIO
模拟串口
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
注: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]一周热门 更多>