新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 利用捕获比较功能实现MSP430与微机串行通信的研究

利用捕获比较功能实现MSP430与微机串行通信的研究

作者:时间:2009-11-27来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/157756.htm

发送信号时,即Rin输入有效,接收器会自动打开,并产生有效的INVALID信号。该信号将触发P1.2引脚的中断。在中断处理程序中将F413的功耗模式设定为模式3(功耗电流0.7μA),这时频率为32768的ACLK时钟工作就可以完成低速的任务。当接收、处理完的数据后需要将结果返回给。这时可以打开MAX3221的驱动器,关闭接收器完成此工作。当发送完毕后可以将和MAX3221再设定为准备接收信息的最低功耗状态。

上述方法可以在满足的同时达到非常低的功耗。

表1:MAX3221收发器工作控制及其工作状态对照表

工作及能耗状态FORCEONFORCEOFFEN接收器输入信号Rin驱动器状态接收器状态
完全待机状态最低功耗X00X关闭激活
X01X关闭关闭
正常工作状态人工调节能耗110X激活激活
111X激活关闭
器件自理状态自动调节能耗010有效自动激活激活
011有效自动激活关闭
010无效关闭激活
011无效关闭关闭

注:驱动器将MOS电平转换为RS232电平,接收器将RS232电平转换为MOS电平

4 结束语
应用上述的设计方法和电路,很好地与微机之间的,并且达到了非常理想的功耗水平。实践证明该方法对于没有硬件UART的MSP430系列单片机进行串行通信非常有效,并给需要扩展串口的其他类型MSP430单片机提供了一种可行的方案。此外,文中的超低功耗电路设计方法对于功耗敏感的应用是一种很好的解决方案。

参考文献:
[1] Brian Merritt. Ultralow Power Thermostat ([R]). Texas, U.S.A. : Texas Instruments Incorporated, 2001.
[2] MAX3221 3-V TO 5.5-V single-channel RS-232 line driver/receiver (Manual). Texas, U.S.A. : Texas Instruments Incorporated, 2001.
[3] 胡大可. MSP430系列超低功耗16位单片机原理与应用,北京航空航天出版社,2001。
[4] 胡大可. MSP430系列FLASH型超低功耗16位单片机,北京航空航天出版社,2001。

附录:异步串行通信的程序代码:
;------------------------------------------------------------------------------

说明:
硬件连接如图3,P1.0作为发送引脚,P1.1作为接收引脚,二者共用模块0
Tbit1 是1位时间间隔数据(T1),Tbit_5是半位时间间隔数据。(由公式1得出)
RTbuff 是接收发送缓冲字单元,存放接收和发送的数据
Counter 是收发过程中使用的计数器
;------------------------------------------------------------------------------

发送子程序

MOVTAR,CCR0; 将当前定时器值存入CCR中(T0)
ADD#Tbit1,CCR0; 将1位时间间隔加入CCR中(T0+T1)
RLARTbuff; 将带发送的字节数据左移一位,构造最低位为起始位
BIS#0200h, RTbuff; 将停止位数据放入待发送字的第10位
MOV#10,Counter; 初始化数据帧计数器为10
MOV#OUTMOD0+CCIE,CCTL0; 标记发送状态,打开中断,启动发送
RET; 返回

;------------------------------------------------------------------------------
接收准备子程序

MOV#08,Counter; 初始化接收数据计数器为8(接收一个字节数据)
MOV#SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,CCTL0;初始化捕获比较控制字,
; 设定为下降沿捕获模式,标记接收状态,打开中断,启动接收
RET; 返回

;------------------------------------------------------------------------------

捕获比较模块0的中断服务程序
;------------------------------------------------------------------------------

ADD#Tbit1,CCR0; 将1位时间间隔加入CCR0中
BIT#CCIS0,CCTL0; 判断接收、发送状态
JNZUART_RX; 是接收状态,转接收处理
UART_TXCMP#00h,Counter; 是发送状态,判断帧发送是否结束
JNETX_Next; 没有结束,转入发送
BIC#CCIE,CCTL0; 帧发送结束,关闭中断
RETI; 中断返回
TX_NextRRARTbuff; 待发送位移入进位位C
JCTX_One; 该位为1?跳转
BIS#OUTMOD2,CCTL0; 该位为0,发送0
JMPTX_nxt2; 跳转继续处理
TX_OneBIC#OUTMOD2,CCTL0; 该位为1,发送1
TX_nxt2DECCounter; 发送帧计数器减1
RETI; 中断返回
;
UART_RXBIT#CAP,CCTL0; 判断是否是捕获到起始位
JZRX_Bit; 接收的不是起始位,转入处理
RX_StartBIC#CAP,CCTL0; 捕获到起始位,将状态转为比较模式
ADD#Tbit_5,CCR0; 再增加半位时间间隔(T0+T1.5),以1.5 时间间隔
RETI; 中断返回
RX_BitBIT#SCCI,CCTL0; 将接收到的位存入进位位C
RRCRTbuff; 将接收到位,移入收发缓冲字
RX_TestDECCounter; 接收数据计数器减1
JNZRX_Next; 判断是否接收了所有数据位,没有跳转到后续处理
BIC#CCIE,CCTL0; 接收到所有数据位,关闭捕获比较中断
RX_NextRETI; 中断返回


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭