历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | MSP430 - G2553之串口操作
2020-01-16 来源:eefocus
#include void delay1s(void) { int t = 1000; while (t--) __delay_cycles(1000); } #define UART_TXD 0x02 // TXD on P1.1 (Timer0_A.OUT0) #define UART_TBIT (1000000 / 9600) // 9600 Baud, SMCLK = 1MHz // Globals for transmit UART communication unsigned int txData; // UART internal variable for TX void TimerA_UART_tx(unsigned char byte); // Function prototypes void TimerA_UART_print(char *string); void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer DCOCTL = 0x00; // Set DCOCLK to 1MHz BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1OUT = UART_TXD; // Initialize P1.1 P1SEL = UART_TXD; // Timer function for TXD pin P1DIR = UART_TXD; // Set TXD pin to output // Timer_A for transmit UART operation TA0CCTL0 = OUT; // Set TXD Idle as Mark = '1' TA0CCTL1 = SCS + CM1 + CAP; // Sync, Neg Edge, Capture TA0CTL = TASSEL_2 + MC_2; // SMCLK, start in continuous mode P2DIR |= (BIT3 | BIT4); //Set P1.0 and P1.6 to outputs _BIS_SR(GIE); // Enable CPU interrupts while (1) { TimerA_UART_print("G2553 TimerA UARTrn"); // Send test message TimerA_UART_print("READY.rn"); P2OUT ^= 0x18; delay1s(); } } void TimerA_UART_tx(unsigned char byte) // Outputs one byte using the Timer_A UART { while (TACCTL0 & CCIE); // Ensure last char got TX'd TA0CCR0 = TAR; // Current state of TA counter TA0CCR0 += UART_TBIT; // One bit time till first bit txData = byte; // Load transmit data, e.g. 'A'=01000001 txData |= 0x100; // Add mark stop bit, e.g. 101000001 txData <<= 1; // Add space start bit, e.g. 1010000010 TA0CCTL0 = OUTMOD0 + CCIE; // Set TXD on, enable counter interrupt } void TimerA_UART_print(char *string) { // Prints a string using the Timer_A UART while (*string) TimerA_UART_tx(*string++); } #pragma vector = TIMER0_A0_VECTOR // Timer_A UART - Transmit ISR __interrupt void Timer_A0_ISR(void) { static unsigned char txBitCnt = 10; TA0CCR0 += UART_TBIT; // Add Offset to CCRx if (txBitCnt == 0) { // All bits TXed? TA0CCTL0 &= ~CCIE; // All bits TXed, disable interrupt txBitCnt = 10; // Re-load bit counter } else { if (txData & 0x01) TA0CCTL0 &= ~OUTMOD2; // TX Mark '1' else TA0CCTL0 |= OUTMOD2; // TX Space '0' } txData >>= 1; // Shift right 1 bit (low bits TX'ed first) txBitCnt--; }
史海拾趣
|
一、引言 信息技术的飞速发展,引起了自动化系统结构的变革,逐步形成了以网络集成自动化系统为基础的企业信息系统。现场总线就是顺应这一形势发展起来的新技术。现场总线是应用在生产现场,在微机化测量控制设备(称为现场总线仪表)之间实 ...… 查看全部问答> |
|
掌握了一下的硬件和软件知识,基本上就可以成为一个合格的电子工程师: 第一部分:硬件知识 一、 数字信号 1、 TTL和带缓冲的TTL信号 2、 RS232和定义 3、 RS485/422(平衡信号) 4、 干接点信号 二、 模拟信号视频 1、 非平衡信号 ...… 查看全部问答> |
|
各位大侠,我在VxWorks下写了一个程序,在shell中敲入入口函数运行一段时间,就会出现问题,Shell中显示的错误是这样的: Error while polling for events WTX Error 0x100d2(AGENT_GOPHER_TRUNCATED) 有哪位大侠知道这是什么错误啊?多谢了。… 查看全部问答> |
|
ST发布基于STM8的TouchSensingLibrary,支持按键、滑轮 ST刚刚发布基于STM8系列MCU的电容触摸感应固件库,相信基于STM32的库也很快就会提供。下载地址:http://www.st.com/mcu/files/mcu/1234113356.exe================================================================================ &nb ...… 查看全部问答> |




