串口编程介绍.pdf
http:/www.Microcontrol.cn 微控设计网 基于模拟前端信号处理与控制技术的专业论坛、网站. MSP430 单片机入门应用系列例程单片机入门应用系列例程 MSP430 的的 RS232 与与 RS485 范例程序范例程序 策划:微控设计网DC 最近在微控技术论坛上有较多的初学者发出较多的 RS485 例程求助,总想找到一个很 符合自己的 RS485 通讯例子程序。所以我今晚特此简单地写调了一个 MSP430 的 RS232 与 RS485 接口程序出来供给初学者参考。以简单的程序图文形式表达出来,希望对微控论坛 初学者有一定的入门帮助。 关于 RS232、RS485 的协议或更多的系统应用,请参考相关的技术文章。同时,也可 以到微控技术论坛上的器件通讯专区查看有关的器件接口通讯文章。 描述:描述:本范例由 MSP430 单片机作为 RS485 总线上的从机,PC 为主机。功能是由 PC 主机 发送一个字符到从机, 从机接收后再发回主机的一个收发过程。 另外, 此程可以改为 RS232 接收方式,除了硬件电路不同外,其就是在软件和控制上有所差别。采用 RS485 时,单片 机的引脚要比 RS232 多了一个引脚,主要用来控制接收与发送之用;在软件中只需多加了 一个 IO 的方向控制,在此要注意方向。 本程序已在我的开发工具上调试运行通过;如果你是一位初学者,你可以参考以下程 序创建项目来验证你的硬件是否问题。当然本程序当然还有一些不足之处,这就需要改进 你的改正了。 下图是实验室图片 http:/www.Microcontrol.cn 微控设计网 基于模拟前端信号处理与控制技术的专业论坛、网站. RS232 接口电平转换电路图,本次实验未采用的是 MAX232 芯片,MSP430 的 RXD 端 可用电阻分压以作最简单的电平转换,可以参考本文的 RS485 电路。 RS485 接口电平转换电路图,注意 RXD 端为电阻式电平转换。而 TXD 不需要,因为 SN75176B 能接收 3.3V 的高电平输入。 本次纯属是实验,并没有用到全 3V 工作的器件,请读者明白。 http:/www.Microcontrol.cn 微控设计网 基于模拟前端信号处理与控制技术的专业论坛、网站. MSP430 电路简图如下: 在上次机采用了,一个串口常用调试软件作串口调试。各位读者如要下载此工具软件可到 微控论坛上下。软件如下图: 程序:程序: / ACLK = UCLK0 = LFXT1 = 32768, MCLK = SMCLK = DCO 800k / 波特率在32768hz XTAL 9600 = 32768Hz/9600 = 3.41 (0003h 4Ah ) / 软件:IAR Embedded Workbench Version: 3.4A #include void delay (void); /串口时,无此延时 void main(void) WDTCTL = WDTPW + WDTHOLD; / 停止看门 P5DIR |= 0x80; / P5.7 为输出,RS485 控制端 P5OUT / 使 SN75176B 为接收状态 http:/www.Microcontrol.cn 微控设计网 基于模拟前端信号处理与控制技术的专业论坛、网站. P1DIR |= 0x02; / 设 LED 指示 P1OUT /以下是串口设置 P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; / 使能 USART0 模块 TXD/RXD UCTL0 |= CHAR; / 8 位字符格式 UTCTL0 |= SSEL0; / 串口模块时时钟 UCLK = ACLK UBR00 = 0x03; / 设置波特率控制寄存器 UBR10 = 0x00; / 32k/9600 - 3.41(ACLK) UMCTL0 = 0x4A; / 波特率调整寄存器设置 UCTL0 / 初始化 USART 状态机 IE1 |= URXIE0; / 使能 USART0 接收中断 / Mainloop for (;) _BIS_SR(LPM3_bits + GIE); / 进入 LPM3 模式/允许总中断 while (!(IFG1 / USART0 发送缓冲器是否准备? P5OUT |= 0x80; / 使 SN75176B 为发送 TXBUF0 = RXBUF0; / 从接收缓冲器写入发送缓冲器 delay (); P5OUT / 使 SN75176B 为接收 P1OUT = 0x02; /LED / UART0 接收中断将从 LPM3 模式退出 #pragma vector=UART0RX_VECTOR _interrupt void usart0_rx (void) _BIC_SR_IRQ(LPM3_bits); / 退出 LPM3 void delay (void) unsigned i=180; while(i!=0) i- - ; 参考文献参考文献 1 Texas Instruments Incorporated MSP430F14X C code Example 2 Texas Instruments Incorporated MSP430x1xx Family slau049e.pdf 3 Texas Instruments Incorporated MSP430F149 Datasheet 4 沈建华 杨艳琴 骁曙 清华大学出版社