模拟串口的C语言程序

来源:本站
导读:目前正在解读《模拟串口的C语言程序》的相关信息,《模拟串口的C语言程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《模拟串口的C语言程序》的详细说明。
简介:本文给出模拟串口的C语言程序,感兴趣的朋友可以看看。

本程序是模拟串口硬件机制写的,对硬件熟悉的人看着会方便些

使用时可设一定时中断,时间间隔为1/4波特率,每中断一次调用一次接收函数,每中断4次调用一次发送函数 。

不过.对单片机来说时钟并须要快.要知道9600的波特率的每个BIT的时间间隔是104us.而单片机中断一次压栈出栈一次的时间是20us左右(标准的51核12M晶体)这样处理时间就要考虑清楚了.呵呵.以下程序是放在定时器中断程序函数内的

//接收部分

sbitJieShou_D=;//定义接收端口

uint8DingShiJiShu,JieShou_h;//定时计数,接收缓冲器

uint16JieShou_T;//接收临时寄存器

bitKaiShi,JieShou_b;//开始接收标准,接收完成标志

voidJieShou(void)//接收函数,每4次调用接收一位

{

if((KaiShi==0)&&(JieShou_D==0))//串行开始位到来

{

DingShiJiShu=0;//开始定时计数

KaiShi=1;

JieShou_T=0xffff;//接收临时寄存器置全1

}

elseif((KaiShi==1)&&(DingShiJiShu==1))//第2次调用,串行数据采样时间到来

{

JieShou_T>>=1;

if(JieShou_D)JieShou_T|=0x8000;

}

elseif(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次调用接收一位

}

}

//发送部分

sbitFaSong_D=;//定义发送端口

uint16FaSong_h;//发送缓冲区

bitFaSong_b;//发送完成标志

voidKaiShiFaSong(uint8fs)//设置发送数据,开始发送

{

FaSong_h=fs;

FaSong_h<<=1;

FaSong_h|=0x0200;//FaSong_h=0000_001x_xxxx_xxx_0

FaSong_b=0;//发送标志=0表示正在发送中

}

voidFaSong(void)//发送函数,每调用一次发一位

{

if(FaSong_h)//发送未完成

{

if(FaSong_h&0x0001)

FaSong_D=1;

elseFaSong_D=0;

FaSong_h>>=1;

}

else

FaSong_b=1;//发送完成标志=1表示发送完成

}

提醒:《模拟串口的C语言程序》最后刷新时间 2024-03-14 00:59:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《模拟串口的C语言程序》该内容的真实性请自行鉴别。