- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用定时器 T0或 T1 模拟串行口程序
/*************************************************************************用定时器 T0 或 T1 模拟串行口程序。最高波特率(12 clock):??? 本程序收、发波特率相同。
??? 11.059MHz -- 最高波特率 收: 9600,? 最低波特率:300?? ??? 30.000MHz -- 最高波特率 收: 28800? 最低波特率:300?? ??? 40.000MHz -- 最高波特率 收: 38400? 最低波特率:300?? ?????? ...使用说明:??? 1. 本程序使用一个定时器和任意 2 个 I/O 口模拟一个串行口。??? 2. 1位起始位,8位数据位,1位停止位。发数据位时先发低位。??? 3. 支持半双工通讯。收、发波特率相同。??? 4. 应把定时器中断优先级设置为最高级。??? 5. 本程序每接收一个字节后就把它放到一个队列缓冲区中(也可使用环行缓冲区),?????? 待缓冲区满后,将缓冲区中的内容原样发回。这是为了测试多字节连续收发的?????? 能力和简化程序。实际应用中应防止缓冲区溢出。? ??? 6. 由接收转换到发送时要先调用? soft_send_enable ();?????? 由发送转换到接收时要先调用? soft_receive_enable ()。??? 7. 发送最后一个字节后如果要立刻转为接收,必须等待最后一个字节后发送完毕?????????? while ( rs_f_TI == 0)? ;? // 等待最后一个字节发送完毕**************************************************************************编程说明:发送:??? 由接收转换到发送时要先调用 soft_send_enable (), 它为发送做初始化的工作。以后就可以调用 rs_send_byte () 启动发送一个字节的过程。??? 发送口平时为高电平,rs_send_byte ()函数使发送口变为低电平开始发送起始位; 同时设置和启动定时器,为发送数据位在预定的时刻产生定时器中断。发送数据位和停止位都在定时器的中断服务程序中进行。??? 中断服务程序中处理 4 种情况:发送数据位、发送停止位、发送完毕、处理错误。接收:??? 由发送转换到接收时要先调用 soft_receive_enable (), 它为接收做初始化的工作。定时器以 3 到 4 倍波特率的频率产生中断(参见 rs_TEST0 的定义)检测 PC机发送的起始位。一旦检测到起始位,立刻把定时器产生中断的频率调整到与波特率相同,准备在下一个定时器中断中接收第 1 个数据位。??? 中断服务程序中处理以下情况:??? 1. 收到的是 PC 机发送的起始位: 调整定时器产生中断的频率与波特率相同。??? 2. 收到第 8 位数据位: 存储接收到的字节。??? 3. 收到第 1--7 位数据位: 存储到收、发移位暂存器。??? 4. 收到停止位: 调用 soft_receive_enable(),检测 PC 机发出的下一个起始位。 ??? 5. 处理出错的情况。**************************************************************************/
#i nclude reg52.hsfr16?DPTR = 0x82;
typedef?unsigned char?INT8U;typedef?unsigned int?INT16U;
#define?YES?? 1#define?NO??? 0
//定义使用哪个定时器, 只可定义一个?? //#define TIMER_0#define TIMER_1
//定义串口收、发送管脚。? sbit rs_TXD = P2^1;sbit rs_RXD = P2^0;
//根据定时器确定参数? #ifdef TIMER_0??? #define TMOD_AND_WORD?? 0xF0;??? #define TMOD_TIME_MODE? 0x01;??? #define TMOD_COUNT_MODE 0x05;????? //设置计数模式位? ??? sbit? TCON_ENABLE_TIMER = TCON^4;??? sbit? TCON_TFx = TCON^5;?????????? //中断标志位? ??? sbit? IE_ETx = IE^1;
您可能关注的文档
- 现代汉语练习 3章 文字 (附答案).doc
- 现代汉语词类表语法表.doc
- 现代汉语语法专训练.doc
- 现在遥感导论 PT整理.doc
- 王浦劬《政治学础》笔记详细版1.doc
- 现场改善之工作化(讲义).doc
- 现当代诗歌的发及特点.doc
- 现代诗歌阅读赏题目训练.doc
- 王台董城村东张办公楼及住宅空气源热泵.doc
- 现浇箱梁调平层件认可.doc
- 《JJF 2132-2024荧光紫外灯人工气候老化试验装置校准规范:辐射照度参数》.pdf
- JJF 2120-2024轮速传感器校准规范.pdf
- 计量规程规范 JJF 2120-2024轮速传感器校准规范.pdf
- 《JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数》.pdf
- JJF 2129-2024钙钛矿太阳电池校准规范:光电性能参数.pdf
- 《JJF 2120-2024轮速传感器校准规范》.pdf
- JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
- JJF 2116-2024特定蛋白分析仪校准规范.pdf
- 《JJF 2116-2024特定蛋白分析仪校准规范》.pdf
- 计量规程规范 JJF 2117-2024沥青混合料理论最大相对密度仪校准规范.pdf
文档评论(0)