DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 159|回复: 0
打印 上一主题 下一主题

模拟串口的C语言源程序代码

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-29 18:55:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
模拟串口的C语言源程序代码
本程序是模拟串口硬件机制写的,使用时可设一定时中断,时间间隔为1/4波特率,每中断一次调用一次接收函数, 每中断4次调用一次发送函数,不过.对单片机来说时钟并须要快.要知道9600的波特率的每个BIT的时间间隔是104us.而单片机中断一次压栈出栈一次的时间是20us左右(标准的51核12M晶体)这样处理时间就要考虑清楚了.呵呵.以下程序是放在定时器中断程序函数内的
//接收部分
sbit JieShou_D= ;//定义接收端口
uint8 DingShiJiShu,JieShou_h;//定时计数,接收缓冲器
uint16 JieShou_T;//接收临时寄存器
bit KaiShi,JieShou_b;//开始接收标准,接收完成标志

void JieShou(void) //接收函数,每4次调用接收一位
{
if((KaiShi==0) && (JieShou_D==0)) //串行开始位到来
{
DingShiJiShu=0; //开始定时计数
KaiShi=1;
JieShou_T=0xffff; //接收临时寄存器置全1
}
else if((KaiShi==1) && (DingShiJiShu==1)) //第2次调用,串行数据采样时间到来
{
JieShou_T >>= 1;
if(JieShou_D) JieShou_T |=0x8000;
}
else if(JieShou_T & 0x807f ==0x803f) //接收完成 JieShou_T=1xxx_xxxx_x011_1111
{
KaiShi=0;
DingShiJiShu=0;
JieShou_h = JieShou_T >> 7; //右移7位得到串行数据
JieShou_b=1;
}
if(KaiShi)
{
DingShiJiShu++; //只在开始接收时定时计数+1
DingShiJiShu &=0x03; //每4次调用接收一位
}
}

//发送部分
sbit FaSong_D= ;//定义发送端口
uint16 FaSong_h; //发送缓冲区
bit FaSong_b; //发送完成标志
void KaiShiFaSong(uint8 fs) //设置发送数据,开始发送
{
FaSong_h = fs;
FaSong_h >= 1;
}
else
FaSong_b =1; //发送完成标志=1 表示发送完成
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-11-24 20:49 , 耗时 1.180121 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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