4373|4

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

真的很急,串口发送问题,在线等待!! [复制链接]

程序在下面,AD采样的电压通过串口往上位机传,但是每次串口调试助手里面只接收到
row:1 column:0
Volt = 0.31
就是说,row和column还有volt的值不会变,一直就是这个数,按道理来说应该是变化的。不知道为什么,盼望着那位高手帮我指点改改,在下先谢啦!
#include "msp430x12x2.h"
//#include "string.h"
#define NUM 10
unsigned int T;
float Result[8],volt;
unsigned char chln;
unsigned char row,column,row2,column2;
void delay(int t)
{
int i;
for(i=t;i>0;i--);
}row:1 column:0
Volt = 0.31

void init( void )
{
// i/o
P1DIR |=BIT0;
P1DIR |=BIT1;
P2DIR |=BIT4;
P2SEL |=BIT3;
P3SEL |=BIT6;
P3SEL |=BIT7;
P3SEL |=BIT0;
P2SEL |=BIT2;
P2SEL |=BIT1;
P2SEL |=BIT0;
//adc
ADC10CTL0 &= ~ENC;
ADC10CTL0 |= 0x20F0; //Vr+ = Vref+ Vr- = ××ss
//MSC = 1 2.5V ON ADC10 ON
ADC10CTL1 |= ADC10SSEL_0 + INCH_0;
ADC10DTC0 |= 0X0000;
}
//UART
void init_uart0(void)
{
UCTL0|=SWRST; //UTCTL0 = SSEL1;
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00;
UMCTL0 = 0x4A; // Modulation
UCTL0 =CHAR; //8位数据位,1位停止位,无校验
ME2 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
IE2 |= URXIE0; // Ena××e USART0 RX interrupt
UCTL0 &= ~SWRST; // Initialize USART state machine
P3SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P2.4 output direction
_EINT();
}
void set_channel(unsigned char i)
{

switch(i)
{
// p2.4 --> c
// p1.0 --> b
// p1.1 --> a
case 0: P2OUT &= ~BIT4;
P1OUT &= ~BIT0;
P1OUT &= ~BIT1;
break;
case 1: P2OUT &= ~BIT4;
P1OUT &= ~BIT0;
P1OUT |= BIT1;
break;
case 2: P2OUT &= ~BIT4;
P1OUT |= BIT0;
P1OUT &= ~BIT1;
break;
case 3: P2OUT &= ~BIT4;
P1OUT |= BIT0;
P1OUT |= BIT1;
break;
case 4: P2OUT |= BIT4;
P1OUT &= ~BIT0;
P1OUT &= ~BIT1;
break;
case 5: P2OUT |= BIT4;
P1OUT &= ~BIT0;
P1OUT |= BIT1;
break;
case 6: P2OUT |= BIT4;
P1OUT |= BIT0;
P1OUT &= ~BIT1;
break;
case 7: P2OUT |= BIT4;
P1OUT |= BIT0;
P1OUT |= BIT1;
break;
default: break;
}
}

void send_state()
{
unsigned int vbuf;
char buf[20],i=0,b1,b2,b3;
vbuf = (int)(volt*100);
b1=vbuf/100;
b2=(vbuf%100)/10;
b3=vbuf%10;
for(i=0;i<20;i++) buf[i]=0;
i=0;
sprintf(buf,"ROW:%d COLUMN:%d \n",row2,column2);
do
{
TXBUF0 = buf[i]; //发送数据
while((UTCTL0&0X01)==0);
i++;
}while(buf[i]!=0);

for(i=0;i<20;i++) buf[i]=0;
i=0;
sprintf(buf,"Volt = %d.%d%d\n\n",b1,b2,b3);
do
{
TXBUF0 =buf[i]; //发送数据
while((UTCTL0&0X01)==0);
i++;
}while(buf[i]!=0);
}
void main(void)
{
int buf;
WDTCTL=WDTPW+WDTHOLD;
delay(1000);
init();
init_uart0();
while(1)
{
for(column=0;column<8;column++) // A0 to A7 selcet
{
ADC10CTL0 &= ~ENC;
buf=column;
buf*=4096;
ADC10CTL1 &= ~0xF000; //buf是缓存器,4096是左移12位
ADC10CTL1 |= buf;
for(row=0;row<8;row++) //模拟开关1-8的通道
{
set_channel(row);
ADC10CTL0 |= ENC;
ADC10CTL0 |= ADC10SC;
while(ADC10CTL0 && ADC10IFG == 0);
ADC10CTL0 &=~ENC;
volt=((float)(ADC10MEM)/1024.0) *2.5;
row2=row;
column2=column;
send_state();
}
}
}
}

最新回复

如果我在头文件里面加上#include "string.h" 编译是会出现下面的错误, Fatal Error[Pe005]: could not open source file "(0x0001):\Program Files\IAR Systems\Embedded Workbench 4.0\430\LIB\DLIB\dl430fn.h" 在线守候您的回答。  详情 回复 发表于 2006-4-28 14:32
 
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你这个程序饶来饶去的,一时半会儿搞不清楚各变量之间的关系。
你最好在send_state()函数中的sprintf(buf,"Volt = %d.%d%d\n\n",b1,b2,b3);语句后设置一个断点,在程序停在断点处时检查buf数组的所有元素是否是你预期的值。然后再全速运行,对比助手接收的数据是否吻合buf数组的内容。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
buf里面没有变化全是0啊!这是为什么?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用:

buf里面没有变化全是0啊!这是为什么?
我也估计可能是你的sprintf(....)函数使用有问题。
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果我在头文件里面加上#include "string.h" 编译是会出现下面的错误,
Fatal Error[Pe005]: could not open source file "(0x0001):\Program Files\IAR Systems\Embedded Workbench 4.0\430\LIB\DLIB\dl430fn.h"
在线守候您的回答。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表