完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用触摸屏(tjc4024k032_011r 这款)用uart串口通信给430传送数据来控制430产生扫频正弦波(用DAC实现),下面是我写的代码,正弦波用16MHz,但是屏幕的数据单片机没反应,求助。
#include #include "stdint.h" static uint16_t interval =0 ; static uint16_t l = 0; static uint16_t k = 0; unsigned char UartGetchar(); static unsigned char temp1=0; const uint16_t temp[32]={ 0x7F,0x98,0xB0,0xC6,0xD9,0xE9,0xF5,0xFC,0xFE,0xFC,0xF5,0xE9,0xD9,0xC6,0xB0,0x98 ,0x7F,0x66,0x4E,0x38,0x25,0x15,0x09,0x02,0x00,0x02,0x09,0x15,0x25,0x38,0x4E,0x66}; const uint16_t inter[200]={ 49999, 24999, 16666, 12499, 9999, 8332, 7142, 6249, 5555, 4999, 4544, 4166, 3845, 3570, 3332, 3124, 2940, 2777, 2631, 2499, 2380, 2272, 2173, 2082, 1999, 1922, 1851, 1785, 1723, 1666, 1612, 1562, 1514, 1470, 1428, 1388, 1350, 1315, 1281, 1249, 1219, 1189, 1162, 1135, 1110, 1086, 1063, 1041, 1019, 999, 979, 961, 942, 925, 908, 892, 876, 861, 846, 832, 819, 805, 793, 780, 768, 757, 745, 734, 724, 713, 703, 693, 684, 675, 666, 657, 648, 640, 632, 624, 616, 609, 601, 594, 587, 580, 574, 567, 561, 555, 548, 542, 537, 531, 525, 520, 514, 509, 504, 499, 494, 489, 484, 480, 475, 471, 466, 462, 458, 454, 449, 445, 441, 438, 434, 430, 426, 423, 419, 416, 412, 409, 406, 402, 399, 396, 393, 390, 387, 384, 381, 378, 375, 372, 369, 367, 364, 361, 359, 356, 354, 351, 349, 346, 344, 341, 339, 337, 335, 332, 330, 328, 326, 324, 322, 320, 317, 315, 313, 312, 310, 308, 306, 304, 302, 300, 298, 297, 295, 293, 291, 290, 288, 286, 285, 283, 281, 280, 278, 277, 275, 274, 272, 271, 269, 268, 266, 265, 264, 262, 261, 259, 258, 257, 255, 254, 253, 252, 250, 249, }; void main( void ) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_16MHZ; // Set DCO DCOCTL = CALDCO_16MHZ; BCSCTL2 &= ~SELS; UCA0CTL1 |= UCSSEL1; // 选择时钟SMCLK UCA0BR0 = 0x82; // 1MHz 9600 UCA0BR1 = 0x06; // 1MHz 9600 UCA0MCTL = 0x0C; // 波特率=BRCLK/(UBR+(M7+...0)/8) P1SEL = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD P1SEL2 = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE; IFG2 &= ~UCA0RXIFG; interval = interval ; //interval = (uint16_t)(4000000 / (f * 256) - 1) ; interval = inter[l] ; // interval = 7999; P2DIR |= 0xFF ; TA1CTL |= TASSEL_2; TA1CTL |= MC_1; TA1CCR0 = 49999; TA1CTL |= TAIE; __bis_SR_register(GIE); while(1) { } } /**********************************扫频中断*************************/ #pragma vector=TIMER1_A1_VECTOR __interrupt void Timer1_A1(void) { if(UartGetchar()== 0x01) { switch(TA1IV) //判断是哪个标志源产生了中断 { case 0x02: break; case 0x04: break; case 0x0A: //f=f+10; //l=l+1; //interval = inter[l]; //interval = (uint16_t)(8000000 / (f * 256) - 1) ; /* P1OUT=temp[k]; k++; if(k >= 200) { l++; TA1CCR0 = inter[l]; k=0; }*/ P1OUT=temp[k]; k++; if(l<199 && k>= 32 ) { l++; //interval = (uint16_t)(2000000 / (l * 200) - 1) ; TA1CCR0 = inter[l]; //TA1CCR0 = inter[l]; k = 0; } if(l>= 199 && k>=32 ) { l = 0; //interval = (uint16_t)(2000000 / (l * 200) - 1) ; TA1CCR0 = inter[l]; //TA1CCR0 = inter[l]; k = 0; } break; default: break; } } } /**********************************UART接收中断*************************/ #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { while (!(IFG2&UCA0TXIFG)); UCA0TXBUF = UCA0RXBUF; temp1=UCA0RXBUF; } /*********************************UART接收字节数据******************/ unsigned char UartGetchar() { unsigned char c; while(!(IFG2 & UCA0RXIFG)); c=UCA0RXBUF; IFG2 &=~UCA0TXIFG; return c; } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2630个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
1588 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2167 浏览 1 评论
4562 浏览 1 评论
2365 浏览 1 评论
1705 浏览 1 评论
706浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
1610浏览 2评论
930浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 10:55 , Processed in 1.279910 second(s), Total 93, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号