首页 MC68HC08串行通信接口概述

MC68HC08串行通信接口概述

举报
开通vip

MC68HC08串行通信接口概述MC68HC08串行通信接口概述 Made By CreativeSoft Ver 1.0 设计串口通信程序,主要是掌握四个寄存器,设置好初始化。本着有用的原则,我们不对所有的寄存器含义进行说明,只介绍用得着的。突出重点,有点像考试提纲 硬件电路:    将MPU与RS232相连 VSS 寄存器: SCDR:SCI数据寄存器    所在地址: @0x00000018 功能: 一个八位的寄存器,当微控制器向外发送时,将要发送的数据放入SCDR,当要接收外来数据时,外来数据会被暂存入SCDR,微控制器从SCDR中取出...

MC68HC08串行通信接口概述
MC68HC08串行通信接口概述 Made By CreativeSoft Ver 1.0 设计串口通信程序,主要是掌握四个寄存器,设置好初始化。本着有用的原则,我们不对所有的寄存器含义进行说明,只介绍用得着的。突出重点,有点像考试提纲 硬件电路:    将MPU与RS232相连 VSS 寄存器: SCDR:SCI数据寄存器    所在地址: @0x00000018 功能: 一个八位的寄存器,当微控制器向外发送时,将要发送的数据放入SCDR,当要接收外来数据时,外来数据会被暂存入SCDR,微控制器从SCDR中取出此数据,可以把SCDR看成一个交换数据的缓冲区。 主要用法: byte data; data=SCDR;        //将值取出 SCDR=data;        //将值放入 SCC1:SCI控制寄存器1  所在地址: @0x00000013 功能速查 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf :(红色代表比较重要的) 地址 7 6 5 4 3 2 1 0     ENSCI 串口使能   M 字符长度     PEN 奇偶校验使能 PTY 奇偶校验方式 置1   SCI允许   9位     允许 寄校验 置0   SCI禁止   8位     禁止 偶校验 默认 0 0 0 0 0 0 0 0                   虽然表中有的放矢的删去了很多不常用的位功能,但是还是很难记,怎么办呢?其实,每一位的含义在头文件中都有详细地说明,学会阅读头文件,必将达到好学好记,事半功倍的效果。因此,本文带领你阅读头文件。 头文件定义: /*** SCC1 - SCI 寄存器1 ***/ typedef union { byte Byte; struct { byte PTY    :1;          /* Parity Bit */ byte PEN    :1;          /* Parity Enable Bit */ byte ILTY    :1;          /* Idle Line Type Bit */ byte WAKE    :1;          /* Wakeup Condition Bit */ byte M      :1;          /* Mode (Character Length) Bit */ byte TXINV  :1;          /* Transmit Inversion Bit */ byte ENSCI  :1;          /* Enable SCI Bit */ byte LOOPS  :1;          /* Loop Mode Select Bit */ } Bits; } SCC1STR; extern volatile SCC1STR _SCC1 @0x00000013; 你会发现,它从第0位开始,到第七位,每一位名称和表中一致,每一位含义用注释给出。 最后一句说明了SCC1使这种结构的一个实际的变量,它叫SCC1, 地址位于 @0x00000013,以后我们就用SCC1代表这个寄存器。 主要用法: 由于SCC1支持位赋值,所以可以对单个位进行操作。 请先不要看注释,对照表格和头文件讲出含义,然后和注释对照。 (1) SCC1_ENSCI=1;    // 开启SCI传输 (2) SCC1=0x53;        //八位含义是 0,1使能SCI,0,1九位数据,00,1使能校验,1寄校验 SCC2:SCI控制寄存器2  所在地址@0x00000014 功能速查表: 地址 7 6 5 4 3 2 1 0   SCITE 发送中断使能   SCITE 接收中断使能   TE 发送使能 RE 接收使能   SBK 发送中止位 置1 允许   允许   允许 允许   发送 置0 禁止   禁止   禁止 禁止   不发送 默认 0 0 0 0 0 0 0 0                   头文件定义: /*** SCC2 - SCI控制寄存器2 ***/ typedef union { byte Byte; struct { byte SBK    :1;          /* Send Break Bit */ byte RWU    :1;          /* Receiver Wakeup Bit */ byte RE      :1;          /* Receiver Enable Bit */ byte TE      :1;          /* Transmitter Enable Bit */ byte ILIE    :1;          /* Idle Line Interrupt Enable Bit */ byte SCRIE  :1;          /* SCI Receive Interrupt Enable Bit */ byte TCIE    :1;          /* Transmission Complete Interrupt Enable Bit */ byte SCTIE  :1;          /* SCI Transmit Interrupt Enable Bit */ } Bits; } SCC2STR; extern volatile SCC2STR _SCC2 @0x00000014; 主要用法: (1) SCC2=0xac;//八位含义:1发送中断使能,0,1接收中断使能,0,1发送使能1接收使能,00,这种初始化方式主要用于中断方式传输 (2) SCC2_TE=1;SCC_RE=1;//使能发送和接收器,用于非中断方式 SCC3:SCI控制寄存器2  所在地址@0x00000014 功能:主要用于线路状态检测。简单的实现一般用不到。有兴趣的参考头文件定义 /*** SCC3 - SCI 控制寄存器3 ***/ typedef union { byte Byte; struct { byte PEIE    :1;          /* Receiver Parity Error Interrupt Enable Bit */ byte FEIE    :1;          /* Receiver Framing Error Interrupt Enable Bit */ byte NEIE    :1;          /* Receiver Noise Error Interrupt Enable Bit */ byte ORIE    :1;          /* Receiver Overrun Interrupt Enable Bit */ byte        :1; byte        :1; byte T8      :1;          /* Transmitted Bit 8 */ byte R8      :1;          /* Received Bit 8 */ } Bits; } SCC3STR; extern volatile SCC3STR _SCC3 @0x00000015; SCS1状态寄存器1            所在地址@0x00000016 功能速查表: 地址 7 6 5 4 3 2 1 0   SCTE 发送器空   SCRF 接收器满           置1 空,可以放数据   满,可以取数据           置0 满   没数据           默认 1 0 0 0 0 0 0 0                   头文件定义: /*** SCS1 - SCI状态寄存器1 ***/ typedef union { byte Byte; struct { byte PE      :1;          /* Receiver Parity Error Bit */ byte FE      :1;          /* Receiver Framing Error Bit */ byte NF      :1;          /* Receiver Noise Flag Bit */ byte OR      :1;          /* Receiver Overrun Bit */ byte IDLE    :1;          /* Receiver Idle Bit */ byte SCRF    :1;          /* SCI Receiver Full Bit */ byte TC      :1;          /* Transmission Complete Bit */ byte SCTE    :1;          /* SCI Transmitter Empty Bit */ } Bits; } SCS1STR; extern volatile SCS1STR _SCS1 @0x00000016; 主要用法: if(SCS1_SCTE==1) SCDR=data;        //如果发送器空,则把数(data)放进去 if(SCS1_SCRF==1) data=SCDR;        //如果接收器满,则把数取出来 SCBR:SCI波特率寄存器  所在地址@0x00000019 地址 7 6 5 4 3 2 1 0   0 0 SCP1 SCP2 0 SCR2 SCR1 SCR0 置1   联合作用   联合作用 置0 默认 0 0 0 0 0 0 0 0                     5,4两位确定了预分频,2,1,0三位确定了波特率分频,两者通过公式 波特率=SCI时钟频率/(64*预分频*波特率分频) 计算出波特率。由此,可作出下列常用波特率设置表,此表只列出常见的波特率 SCP1 SCP0 预分频 SCR2 SCR1 SCR0 波特率分频 波特率 0 0 1 0 0 1 1 38400 0 0 1 0 1 0 2 19200 0 0 1 0 1 1 8 9600 0 0 1 1 0 0 16 4800 0 0 1 1 0 1 32 2400 0 0 1 1 1 0 64 1200 1 0 4 0 0 0 1 19200 1 0 4 0 1 0 4 4800 1 0 4 0 1 1 8 2400 1 0 4 1 0 1 32 600 1 0 4 1 1 1 128 300                 头文件定义: /*** SCBR - SCI Baud Rate Register ***/ typedef union { byte Byte; struct { byte SCR0    :1;          /* SCI Baud Rate Select Bit 0 */ byte SCR1    :1;          /* SCI Baud Rate Select Bit 1 */ byte SCR2    :1;          /* SCI Baud Rate Select Bit 2 */ byte        :1; byte SCP0    :1;          /* SCI Baud Rate Prescaler Bit 0 */ byte SCP1    :1;          /* SCI Baud Rate Prescaler Bit 1 */ byte        :1; byte        :1; } Bits; struct { byte SCR    :3; byte        :1; byte SCP    :2; byte        :1; byte        :1; } MergedBits; } SCBRSTR; extern volatile SCBRSTR _SCBR @0x00000019; 主要用法: SCBR=0x04;//    波特率为4800 好了,也许已经被一大堆寄存器搞晕了,或者勉强读完第一个表格,浏览完第二个表格,就看到这里了,通过程序学寄存器,是最好的方式,毕竟我们最终都是用程序来实现。下面,我们一起动手自己做两个小程序,一个是查询方式串口传输的最简形式,一个是中断方式传输的最简形式,中断方式时,用13号中断向量代表接收中断,14号代表发送中断。分别调用不同的中断服务程序。之所以研究最简方式,是为了避免与一堆无关的知识点混淆,提取出精华。(中断就是让CPU停下当前的工作,转向中断服务程序处理中断任务。如果仍不懂什么是中断的话,强烈建议去寻找有关文档) 串口传输最简实现: 程序的任务:把收到的字符发回去 一、 非中断方式: 查询方式串口通信几步走: (1) 设置CONFIG1,CONFIG2等,其作用与本文无关,不进行讨论 (2) 根据波特率,进行查表,设置SCBR (3) 开启SCI传输。确定是否校验,从而设置SCC1 (4) 发送器,接收器使能,即设置SCC2 (5) 进入一个死循环 (6) 循环中检测,如果接收器满,就把数据从接收器取出来。如果发送器空,就把数据回送到发送器,如果发送器有数据,就等待; 好了,现在我们可以下笔了。 #include #include int  data; void main(void) { CONFIG1=0x01;      //step1 SCBR_SCR1=1;  //step2 SCBR_SCR0=1;  SCC1_ENSCI=1;  //step3 SCC2_TE=1;      //step4 SCC2_RE=1; for(;;){              //step5 if (SCS1_SCRF==1){    //step6 data=SCDR; while(SCS1_SCTE==0);        SCDR=data; } } } 中断方式串口通讯几步走:和上边得很像 (1) 设置CONFIG (2) 根据波特率,进行查表,设置SCBR (3) 开启SCI传输。确定是否校验,从而设置SCC1 (4) 发送器,接收器使能,接收中断使能,即设置SCC2 (5) 开中断。 (6) 主程序进入一个死循环。 (7) 定义一个接收中断服务程序,用于处理接收字符,接收完毕开启发送中断 (8) 定义一个发送中断服务程序,用于发送,把接收到的字符发出去 思路理清,代码自然就出来了。 #include #include int j; void main(void) { CONFIG1=0x01;        //step1 SCBR_SCR1=1;        //step2 SCBR_SCR0=1; SCC1_ENSCI=1;        //step3 SCC2=0b000101100;      //step4 EnableInterrupts;            //step5 for(;;){                    //step6 } } interrupt 13 void Rx(void){ j=SCDR; while(SCS1_SCTE==0); SCC2_SCTIE=1;            //step7 } interrupt 14 void Tx(void){ SCDR=j; SCC2_SCTIE=0;            //step8 } 好了,对MC68HC08微控制器的理解是不是加深了呢,其实它的工作很像可编程控制器,设置好工作方式,就能按我们的需求工作了。 参考资料:M68HC08单片机原理及c语言开发实例 常越 北京航空航天大学出版社 本文代码在code warrior 3.0 for 08平台下在BMTC实验室的MC68HC908GP32微控制器开发板通过
本文档为【MC68HC08串行通信接口概述】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_314187
暂无简介~
格式:doc
大小:69KB
软件:Word
页数:15
分类:互联网
上传时间:2019-01-18
浏览量:14