PIC18单片机模拟UART
更新时间:2024-01-21 21:53:01 阅读量: 教育文库 文档下载
- pic18单片机编程手册推荐度:
- 相关推荐
#include \
#include \#include \
#include \#include \
//=============================================================================
unsigned char m_TXBUF; //(全局)模拟发送缓冲字节 unsigned char m_RXBUF; //(全局)模拟接收缓冲字节
unsigned char m_TX_BIT9; //(全局)模拟发送第九位 unsigned char m_RX_BIT9; //(全局)模拟接收第九位 unsigned char p_m_TXBUF; //(全局)发送指针 unsigned char p_m_RXBUF; //(全局)接收指针
unsigned char m_8_OR_9; //(全局收发模式标志:1为9位收发,0位8位收发
//bit m_TXIF; //(全局发送完标志(1发送完,0正在发) unsigned char m_TX_enble; //发送允许
unsigned char m_RCIF; //(全局接收完标志(1接收完,0在接收或等待接收)
unsigned char m_RX_enble; //接收允许
unsigned char m_BT_reLoad_H; //(全局时钟1初值重载_H unsigned char m_BT_reLoad_L; //(全局时钟1初值重载_L
//====================================================================== //缓冲区
unsigned int TIMER_M_BYTE_OVER_count; //模拟字节超时计时 unsigned char M_RXBuf[M_RX_PKG_LEN]; //模拟包缓冲区 unsigned char p_M_RXBuf; //模拟包缓冲区指针
unsigned char Flag_M_byte_time; //模拟字节间隔计时标志 unsigned char Flag_M_PKG_Over; //模拟包结束(1为收完一包,0未收完) //-----------------------------------------------------------------------------
//初始化模拟串口
//Bt: 波特率代码
//Flag89: 9位还是8位收发
void Init_m_usart(unsigned long Foc, unsigned long Bt, unsigned char Flag89) {
//字节部分
//========================================================= //初始化全局内存变量 if(Flag89) {
m_8_OR_9=1; } else {
m_8_OR_9=0; }//9位接收标志
p_m_TXBUF=0; //发送初始 p_m_RXBUF=0; //接收初始
//m_TXIF=1; //初始发送完
m_TX_enble=0; //发送允许(不允许)
m_RCIF=0; //初始等待接收
m_RX_enble=0; //接收允许(不允许)
//初始波特率时钟T1
//m_BT_reLoad_H=0xEE; //(全局时钟1初值重载_H 11.0592M 600 //m_BT_reLoad_L=0x00; //(全局时钟1初值重载_L
// m_BT_reLoad_H=0xFC; //(全局时钟1初值重载_H 11.0592M ----------------(不准确 )
// m_BT_reLoad_L=0xE0; //(全局时钟1初值重----------------(不准确 )
//m_BT_reLoad_H=0xFD; //(全局时钟1初值重载_H 11.0592M 2400 //m_BT_reLoad_L=0xFF; //(全局时钟1初值重载_L
m_BT_reLoad_H=0xFE; //(全局时钟1初值重载_H 11.0592M 4800 m_BT_reLoad_L=0x1F; //(全局时钟1初值重载_L
// m_BT_reLoad_H=0xFF; //(全局时钟1初值重载_H 11.0592M 9600 //m_BT_reLoad_L=0x3F; //(全局时钟1初值重载_L
1200 载_L //m_BT_reLoad_H=0xFF; //(全局时钟1初值重载_H 11.0592M 14400 ----------------(不准确 )
//m_BT_reLoad_L=0xB4; //(全局时钟1初值重载_L ----------------(不准确 )
//m_BT_reLoad_H=(FULL_U16-Foc/(4*Bt))/FULL_U8; //m_BT_reLoad_L=(FULL_U16-Foc/(4*Bt))%FULL_U8; T1CON=1; //不分频,时钟开起来
//m_BT_reLoad_H=0x00; //(全局时钟1初值重载_H //m_BT_reLoad_L=0x00; //(全局时钟1初值重载_L //T1CON=0x31; //不分频,时钟开起来
TMR1H=m_BT_reLoad_H; TMR1L=m_BT_reLoad_L;
TMR1IE=1; //允许时钟1中断
//模拟串口的口线输入输出类型设定
IOStyle_TX_Line=0; //发送口线类型 (输出) TX_Line=1; //发送口线 (高)
IOStyle_RX_Line=0; //接收口线类型 (输出) RX_Line=1; //接收口线 (高) IOStyle_RX_Line=1; //接收口线类型 (输入)
//接收外部中断(PB端口电瓶变化)开起来 RBIF=0; RBIE=1;
//===============================================================
//包部分
//=============================================================== TIMER_M_BYTE_OVER_count=0; //模拟字节超时计时 p_M_RXBuf=0; //模拟包缓冲区指针
Flag_M_PKG_Over=0; //模拟包结束(1为收完一包,0未收完) Flag_M_byte_time=0; //模拟字节间隔计时标志
//=============================================================== }
//---------------------------------------------------------------------------
//模拟串口发送字节
//Ch: 要发送的字节
void m_putch(unsigned char Ch) {
RBIE=0; RBIF=0;
/////////////////////////////// m_TXBUF=Ch;
unsigned char dBuf[20] ;
//INT16U dLen=sprintf(&dBuf[0],\ //UART1_SendConstS(dBuf);
//让停止位保持一个波特宽的高电平 p_m_TXBUF=0; m_TX_enble=1;
while(m_TX_enble);
/////////////////////////////// RBIF=0;
RBIE=1; }
//--------------------------------------------------------------------------
//模拟包接收查询服务 //在背景中执行 //起动
void SERVER_M_PKG_REC(void) {
//收到新字节 if(m_RCIF) {
if(!Flag_M_PKG_Over) {
// UART1_SendConstS(\ //====================================== //清字节间定时器
TIMER_M_BYTE_OVER_count=0; Flag_M_byte_time=1;
//====================================== //防止越界
if(M_RX_PKG_LEN==p_M_RXBuf) p_M_RXBuf--; //接收
M_RXBuf[p_M_RXBuf++]=m_RXBUF;
//====================================== }
m_RCIF=0; } }
//--------------------------------------------------------------------------
//收发波特,电平中断服务
void M_USART_INTFACE(void) {
char dBuf[20]; //时钟1中断 if(TMR1IF) {
// UART1_SendConstS(\ //重入 TMR1IF=0;
TMR1H=m_BT_reLoad_H; TMR1L=m_BT_reLoad_L;
//发送时序 if(m_TX_enble) {
// UART1_SendConstS(\ if(0==p_m_TXBUF) {
TX_Line=0; p_m_TXBUF++; }
else if(p_m_TXBUF<9) {
// UART1_SendConstS(\ if(1&m_TXBUF)
{ // UART1_SendConstS(\ TX_Line=1; } else {
//UART1_SendConstS(\ TX_Line=0; }
m_TXBUF>>=1;
p_m_TXBUF++; }
else if(9==p_m_TXBUF)
{ // UART1_SendConstS(\是否要发第九位 \\n\ //是否要发第九位 if(m_8_OR_9) {
TX_Line=m_TX_BIT9; } else {
//停止 TX_Line=1; }
p_m_TXBUF++; }
else if(10==p_m_TXBUF)
{ // UART1_SendConstS(\停止 \\n\ //停止 TX_Line=1; p_m_TXBUF++; } else
{ // UART1_SendConstS(\发完标志 \\n\ //发完标志
m_TX_enble=0; } }
//接收时序 if(m_RX_enble) {
// UART1_SendConstS(\ if(p_m_RXBUF<8) {
// UART1_SendConstS(\ m_RXBUF>>=1; if(RX_Line) {
// UART1_SendConstS(\接收到 1 \\n\ m_RXBUF|=0x80; } /* else {
UART1_SendConstS(\接收到 0 \\n\
} */ //
p_m_RXBUF++; } else {
// UART1_SendConstS(\ //是否要收第九位 if(m_8_OR_9) {
m_RX_BIT9=RX_Line; }
//接收结束 m_RX_enble=0; p_m_RXBUF=0; //开检测中断 RBIF=0; RBIE=1;
////////////////////////////////////// m_RCIF=1; //模拟接收到新数据标志 ////////////////////////////////////// } }
//模拟字节间定时 if(Flag_M_byte_time) {
// UART1_SendConstS(\ TIMER_M_BYTE_OVER_count++;
if(TIMER_M_BYTE_OVER_count>TIMER_M_BYTE_OVER)
{ // UART1_SendConstS(\\\n\
//字节超时了,一包结束 Flag_M_byte_time=0; Flag_M_PKG_Over=1; }
// INT16U dLen=sprintf(&dBuf[0],\ // UART1_SendConstS(dBuf); }
}
//=============================================================
//模拟端口接收中断起始 if(RBIE) {
if(RBIF) {
// UART1_SendConstS(\模拟端口接收中断起始 \\n\ RBIF=0;
if(0==p_m_RXBUF) {
// UART1_SendConstS(\ if(!RX_Line) {
// UART1_SendConstS(\关中断 \\n\ m_RXBUF=0; TMR1IF=0;
TMR1H=m_BT_reLoad_H; TMR1L=m_BT_reLoad_L;
//关检测中断 RBIE=0;
//起始位到了 m_RX_enble=1; //重入模拟波特率 } /* else {
UART1_SendConstS(\中断 \\n\ } */ } } }
//====================================================
//模拟包接收查询服务 //在背景中执行 //起动
SERVER_M_PKG_REC();
//===================================================
}
正在阅读:
PIC18单片机模拟UART01-21
智能吸尘器市场调查问卷04-24
初中英语满分作文句型100例汇总(五)06-06
邯郸学步造句02-11
北京市海淀区2016.1九 年 级 第 一 学 期 期 中 数学试卷及答案06-10
一年级上册数学11-20个数的认识练习题06-21
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 单片机
- 模拟
- PIC18
- UART
- 初等数论练习题答案
- 14新闻中心砂石回填及地坪施工方案 - 图文
- 南岸区南山街道林相改造一期建设实施方案
- Rotork IQ系列执行器
- 煤炭工业质量监督管理文件(2008)03号 - 图文
- 国家规定的特殊岗位津贴
- xx中学班级管理考核办法
- 苏教版三年级上学期易错题
- 《基础写作》2021-2022期末试题及答案
- 北京师范大学18秋《普通心理学》离线作业1
- 七年级下册英语Units1-5检测题
- 湖南省株洲市2018届高三年级教学质量统一检测(二)理综化学试题 word版
- 第02章 知识学习策略 试题库
- 吉大16秋学期《分析化学》在线作业一
- 西南石油大学2013年暑期社会实践指导手册
- 关于发布《高速铁路竣工验收办法》
- 土地经济学课程试题库及参考答案
- 立思辰留学:2017年加拿大乔治布朗学院交通介绍
- 人教版小学六年级数学上册主要内容及教学目标
- 二元一次方程组的应用题分类讲解(1)