注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
peiyangyisheng的个人空间
https://home.eeworld.com.cn/space-uid-485689.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
新手第一次提问,真心调试了几天,有bug解决不了,求助!
已有 1827 次阅读
2013-5-31 20:23
硬件为MSP430G2553,小弟大一,还没有数电和模电基础,硬学试试。
麻烦先看看要求:
1.AD 模块的使用
使用内部ADC 模块持续测量一个外部电压(0—2.5V )
2.定时器模块的使用
用 1 中测量的电压值决定两个 LED 中一个的闪烁频率,电压越高闪烁越快,另一个暂时熄灭
3. 外部中断,按键的使用
测量电压的同时,如果按一次按键,则触发外部中断,使两个LED 交换闪烁和熄灭状态
4 .串行通信模块的使用
在 3 的中断触发后,串口发送一个小写a 到z 的英文字母,如按第一次发送一个 a,按第二次发送一个b。(发送至z后从按开始重新发送)同时用串口接收自己发送的数据。
[code]#include
unsigned int adc_value=0;
unsigned int t=0;
unsigned char re;
float voltage_value;
unsigned char flag=0;
void delay(int i) //延迟函数,用于按键软件防抖
{
while(i--);
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
//ADC配置
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + REF2_5V + REFON + SREF0; // 设置采样保持,打开ADC10,打开ADC中断,设置2.5V的参考电压
ADC10CTL1 = INCH_4 ; // 单通道输入 通道4
ADC10AE0 |= BIT5; // P1.5 输入
P1DIR |= BIT0+BIT6; // 设置P1.0为LED1输出,设置P1.6为LED2输出
ADC10CTL0 |= ENC + ADC10SC; // 开始转换
//定时器配置
TACCTL0 = CCIE; //使Timer_A能触发中断
TACCR0 = 0; //配置Timer_A倒计时初始值
TACTL = TASSEL_2 + MC_2; //选择时钟源为子系统时钟,模式控制设置为计时从0到TACCR0
//按键设置
P1DIR &= ~BIT3; //P1.3设置为输入
P1OUT |= BIT3; //P1.3处于高电位
P1REN |= BIT3; //使P1.3能上拉下拉电阻
P1IES |= BIT3; //P1.3高电位到低电位触发中断
P1IE |= BIT3; //使P1.3能申请中断
P1IFG = 0; //中断标记复位
//UART配置
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
_EINT(); //打开总中断
while(1)
{
}
}
// ADC中断函数
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
while(!(P1IN&BIT3))
_EINT();
adc_value = ADC10MEM; //将转换值存入adc_value中
voltage_value = adc_value/1024.0*2.5;
ADC10CTL0 |= ENC + ADC10SC; //开始下一次转换
}
//定时器中断函数
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
if(flag==0)
{
P1OUT &= ~BIT6;
P1OUT ^= BIT0;
}
else
{
P1OUT &=~BIT0;
P1OUT ^=BIT6;
}
CCR0 += (int)((2.5-voltage_value)/2.5*65535);
}
//按键中断函数
#pragma vector=PORT1_VECTOR
__interrupt void p1()
{
delay(2000);
if(!(P1IN&BIT3))
flag = !flag;
while(!(P1IN&BIT3));
delay(2000);
while (!(IFG2&UCA0TXIFG));
UCA0TXBUF=\'a\'+(t++)%26;
_EINT();
P1IFG = 0;
}
//UART接收中断函数
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
re = UCA0RXBUF; // TX -> RXed character
}[/code]现在出现问题有:
1.在未测量电压时,LED会无规律乱闪,当测量电压时(P1.4接GND或VCC),只能以恒定间隔闪动,不满足要求1,找不出原因;
2.貌似测电压要等一段时间才能测准确,P1.4接GND时会出各种各样的电压值;
3.控制灯频率和UART通信的时钟都是
SMCLK,这个会不会有影响?
真心谢谢帮助的人!
本文来自论坛,点击查看完整帖子内容。
收藏
邀请
举报
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
peiyangyisheng
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
错过什么也不能错过你,我的美信串口收发器~
干货 | 常见的四类恒流源电路分析及应用
瑞萨电子荣获“2019 CITE创新奖”
几张图搞懂ARM9核心板咋选型
利用可采用电子方式重新配置的 GaN 功率放大器,彻底改变雷达设计
电源管理IC “BD71850MWV”
新增数据手册
5082-K511-II400
M85049-25-157W
7207J16ZGI12
C0402C123K3NAC3810
SM30-SR-FREQ6-20G1LK
SLRM213300BDFDFS
热搜器件
1206Y2000330JCT
HWS1000-5
GTC030RV20-3P-LC
62GB57A1419PB219
U1520
442-10-236-00-593000
推荐下载
国内最畅销的C语言教程
基于GPRS的远程抄表系统设计与实现
qmail linux 环境 下 达建.
本篇文章介绍了一种简单的无线通信模块
根据3GPP25.141协议生成测试模式1下的WCDMA系统激战测试数据格式。
期刊论文:非均匀背景下的红外图像曲面拟合分割
推荐关注
明远智睿SSD2351核心板:硬件性能深度剖析
YOLOv12 训练结果如何评估?实测best.pt
明远智睿RK3588开发板助力工业机器智能化升级
YOLOv12 训练实战,train.py 常用参数介绍
简易纳安表的制作
《机器人智造的逻辑》第1、2章读后感