请教ADC10中的msp430 adc10dtc1该如何使用

LOL中ADC到底应该怎么玩?记好以下10点
显然ADC是团队最重要的角色,其实ADC玩的比任何一个位置都累而且要求是最高的,可能还显得比较枯燥。ADC可以在游戏的中后期有非常可怕的输出,帮助团队打赢团战,赢得胜利。10条AD
显然ADC是团队最重要的角色,其实ADC玩的比任何一个位置都累而且要求是最高的,可能还显得比较枯燥。ADC可以在游戏的中后期有非常可怕的输出,帮助团队打赢团战,赢得胜利。10条ADC的基本能力,你应该都具备。1、通过点伤对方英雄拉小兵仇恨来控制兵线一个优秀的ADC会十分注意自己和兵线的位置,利用兵线来骚扰对方ADC或抵消对方ADC的骚扰。当你击中对方英雄时,对方的小兵会自动将仇恨建立在你的身上,而反过来,当你的小兵目标已经是对方英雄时,你就可以放心大胆的去骚扰他们了。2、把握好回城时机作为一名ADC,一定要知道自己下一件装备出的是什么多少金钱,很了解什么时候回城能出什么东西,这样既少耽误回城后买装备的时间,也不会没事瞎回城,毕竟赖线也是非常重要的。3、根据对方的阵容进行出装这个也是非常重要的,很多玩ADC的小伙伴特别是低端局,总是出装套路是一样的。要知道如果对方POKER英雄多,应该先出吸血。如果脆皮多显然先出暴击。4、团战的位置其实ADC团战初期主要是保证自己不死,能打到谁打谁。然后还有个小技巧,对方CARRY追你不要总是一味的脱离队伍跑,有时候你回身到队友身边虽然可能也是死了,但是对方跑不了。然而如果一味的跑的话只会被对方抓死。团战的残局要看准输出高的脆皮出手,遏制对方的火力点非常重要,不要看肉血少,点两下都死不了。5、输出的走砍技巧走砍肯定是ADC的必备功课,如果有不会的一定要练好这个。在团中,不懂得如何在移动中进行攻击的ADC通常都是死的最早的那一个,而喜欢使用鼠标右键进行普通攻击的 ADC通常会在移动中就点到奇怪的目标身上去。如果是个新手ADC并且想要联系如何在移动中进行攻击,我推荐使用薇恩练手,毕竟她的Q只有2秒的CD,拿她来练移动中普通攻击会比较容易上手。6、扎实的基本功。一个ADC必须有扎实的基本功,走位、补刀等等,ADC是非常需要经济积累的,如果补刀都能漏一半,还怎么能carry全队?快去练基本功吧。7、ADC英雄池深。要玩好ADC,韦鲁斯、女警、赏金猎人、男枪,这些你必须都熟练掌握,知道各个英雄的出装打法,光会一个的话对面ban掉你不就傻眼了?会的多也可以根据阵容,选择最合适的ADC。8、局势有良好的判断准确有的时候打不过不可怕,可怕的是不知道自己打不过,打不过无非就是怂了不打,不知道自己打不过就会是送命。ADC对局势的判断是非常重要的,什么时候可以强杀;什么时候该一个人带线推塔,什么时候该去参团。只有做出正确的选择,出现在正确的位置上,才能发挥出最大的作用。9、快速的反应快速的反应队友ADC来说至关重要,例如一个石头人开大向你飞来,如果你反应快闪现掉,很可能就可以生存下来,疯狂输出。如果你反应慢,被大到,基本上就可以回家泡温泉了。10、合理的要求辅助辅助为ADC做任何事都是应该的,所以合理的要求辅助是必要的。ADC一定不要因为辅助帮自己干了很多事,觉得可以帮他买买眼,甚至该卖的时候不卖,显然是没有必要的,因为ADC是全队的核心,你死了游戏就没法玩了,如果辅助真的有那么重要,需要你去用生命换他的话,那其实你就是辅助,他才是核心。————————————————————想了解更多以及游戏资讯搜索我的微信号“lol_yytds”
猜你感兴趣
最新图文推荐
大家感兴趣的内容
网友热评的文章本帖子已过去太久远了,不再提供回复功能。单片机(6)
定义一个指针,让它指向内存的某个地址,然后通过指针就可以访问。如果需要访问地址为0x210的内存单元(MSP430的ram起始地址是0x200),则可以这样:
*p=90;//在地址为0x210的内存单元存入一个数字90
a= *p;//将地址为0x210的内存单元中的数字读出赋值给a其实不光是430单片机,其他各种单片也是如此操作,这是由C语言决定的,与具体CPU无关,但各种单片机内存的地址范围不同,这个需要注意。
==============以上内容引自“百度知道”==================
地址空间的0x0200为起始地址,往高地址增长是RAM占用的地址空间,RAM占用空间的大小跟具体的器件直接相关。RAM部分可以用来存储数据和指令。
MSP430F1232的ADC10转换结果存放在ADC10SA指定的起始地址中,地址是连续的,每个地址中存放多大的数据?ADC10转换结果先放在16位MEM中,那么这16位怎么放在内存中,怎么取出来?
第一个问题:每个地址中存放8位数据第二个问题:应该是MEM中的低八位放在sa指定的初始地址a0中,高八位放在下一个地址,也就是a0+1中,到底是不是这么放的,因为手册中并没有明确的写出来,也或者自己没有找到,所以最有效的方法是通过一个例程,单步调试程序,看一下a0和a0+1地址取出的数据到底是什么样的,这是最有效的方式,所以不要嫌麻烦。
个人感觉上述来自百度知道的方法应该是有效的,但是经过实验发现该内存读写代码无法实现读取内存的目的,经过查找别的资料,发现使用AD10的ADT+SA采样转换的内存读取方案:
MSP430的ADC10的DTC功能确实强大,它支持将ADC10MEM中的内容自动存放到任意地址。经过上面的学习,我们已经知道必须要设置ADC10SA来确认传送的目标地址,然后通过设置ADC10DTC1来确认传送的数据大小(字节数),另外还可以通过设置ADC10DTC0中的ADC10TB来选择传输一块或者两块数据、设置ADC10CT来选择是否连续传递数据。
因为大家现在还没有学习flash模块,为了避免覆盖flash中的重要数据(比如我们每次用到的CALBC1_16MHZ和CALDCO_16MHZ都是在flash中存放的),我们只在RAM中做文章。我们可以给定一个固定的地址,比如0x0200,但是我们如何保证这些地址不会被别的程序覆盖呢,确实很难保证。Cloud也不推荐用这种方式。那么我们能不能利用DTC直接将数据存放到我们的变量中呢?
答案是肯定的。学习过指针的同学都知道,在程序中,所有的变量都是有其地址的,通过这个思想,我们让ADC10SA指向某个变量的地址,然后再将ADC10DTC1的大小和变量长度相匹配就好了。
#include &msp430.h&
unsigned char
unsigned short
ushort temp0, temp1;
uchar temp0_L, temp0_H;
uchar temp1_L, temp1_H;
ushort array[2] = (0);
int main(void)
WDTCTL = WDTPW + WDTHOLD;
// Stop WDT
BCSCTL1 |= DIVA_2;
// ACLK = LFXT1CLK/8
ADC10CTL1 = ADC10SSEL_1 + INCH_1 + CONSEQ_1;
// A1/A0, single sequence, 选择ACLK作为时钟源
ADC10CTL0 = MSC + ADC10ON + ADC10IE + REFON + REF2_5V;
//时钟源分频+连续
ADC10DTC1 = 0x02;
// 2 conversions
ADC10AE |= 0x03;
// P2.1,0 ADC10 option select
P3SEL |= 0x30;
// P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10;
// P3.4为输出
ME2 |= UTXE0 + URXE0;
// Enabled USART0 TXD/RXD
UCTL0 |= CHAR;
// 8-bit character
UTCTL0 |= SSEL1;
// UCLK = SMCLK, 选择SMCLK作为时钟源
UBR00 = 0xD0;
// 2MHz 9600
UBR10 = 0x00;
UMCTL0 = 0x00;
// no modulation
UCTL0 &= ~SWRST;
// Initalize USART state machine
IE2 |= URXIE0;
// Enabled USART0 RX interrupt
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY);
// Wait if ADC10 core is active
ADC10SA = (short) (array);
// Data buffer start
ADC10CTL0 |= ENC + ADC10SC;
// Sampling and conversion start
__bis_SR_register(CPUOFF + GIE);
// LPM0, ADC10_ISR will force exit
//AD把两路转换完成,而且给了ADC10SA控制将长度为2的数据块放到某个地址中,那么可以从地址中取出转换完成的数据
//一个块放着两个转换完的数据,每个转换完的数据长度是2个字节,一个地址是一个字节,现在的地址是在0x200的基础上加4
//但是这个地址是个什么意思不太明白
//对于中断来说,当每次两个整个数据块都传递完成时,中断标志置1,此时产生中断,让CPU跳出低功耗状态,继续执行上面的for循环
//继续开始转换,由于AD转换独立于CPU,所以CPU又进入低功耗状态,当转换完成时再次跳出低功耗,这样不断进入跳出,实现低功耗。
//所以低功耗跳出之后,以下应该写串口传输的代码,将转换完的数字量给USART
//很简单,模数转换之后,结果自然保存到了array数组中,数组每个元素的大小是2字节,因为ADC是10位,采样结果先放在2字节的MEM寄存器中
//所以一次转换结果在内存中占用两个连续的地址,也就是2字节大小
temp0_L = array[1] & 0x00
temp0_H = (array[1]&&8) & 0x00
temp1_L = array[0] & 0x00
temp1_H = (array[0]&&8) & 0x00
//array[1]对应着A0的数字输出;array[0]对应着A1的数字输出
while (!(IFG2 & UTXIFG0));
TXBUF0 = 0xC0;
while (!(IFG2 & UTXIFG0));
TXBUF0 = temp0_H;
while (!(IFG2 & UTXIFG0));
TXBUF0 = temp0_L;
while (!(IFG2 & UTXIFG0));
TXBUF0 = temp1_H;
while (!(IFG2 & UTXIFG0));
TXBUF0 = temp1_L;
while (!(IFG2 & UTXIFG0));
TXBUF0 = '\n';
// ADC10 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
#error Compiler not supported!
__bic_SR_register_on_exit(CPUOFF);
// Clear CPUOFF bit from 0(SR)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47796次
积分:1314
积分:1314
排名:千里之外
原创:76篇
评论:14条
(1)(2)(1)(2)(1)(19)(1)(1)(1)(2)(30)(1)(1)(3)(8)(7)(1)(1)(1)后使用快捷导航没有帐号?
查看: 276|回复: 0
MSP430F1232针对ADC10(使用DTC+SA)的内存中采样结果读取
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
定义一个指针,让它指向内存的某个地址,然后通过指针就可以访问。如果需要访问地址为0x210的内存单元(MSP430的ram起始地址是0x200),则可以这样:
*p=90;//在地址为0x210的内存单元存入一个数字90
a= *p;//将地址为0x210的内存单元中的数字读出赋值给a其实不光是430单片机,其他各种单片也是如此操作,这是由C语言决定的,与具体CPU无关,但各种单片机内存的地址范围不同,这个需要注意。
==============以上内容引自“百度知道”==================地址空间的0x0200为起始地址,往高地址增长是RAM占用的地址空间,RAM占用空间的大小跟具体的器件直接相关。RAM部分可以用来存储数据和指令。MSP430F1232的ADC10转换结果存放在ADC10SA指定的起始地址中,地址是连续的,每个地址中存放多大的数据?ADC10转换结果先放在16位MEM中,那么这16位怎么放在内存中,怎么取出来?第一个问题:每个地址中存放8位数据第二个问题:应该是MEM中的低八位放在sa指定的初始地址a0中,高八位放在下一个地址,也就是a0+1中,到底是不是这么放的,因为手册中并没有明确的写出来,也或者自己没有找到,所以最有效的方法是通过一个例程,单步调试程序,看一下a0和a0+1地址取出的数据到底是什么样的,这是最有效的方式,所以不要嫌麻烦。个人感觉上述来自百度知道的方法应该是有效的,但是经过实验发现该内存读写代码无法实现读取内存的目的,经过查找别的资料,发现使用AD10的ADT+SA采样转换的内存读取方案:MSP430的ADC10的DTC功能确实强大,它支持将ADC10MEM中的内容自动存放到任意地址。经过上面的学习,我们已经知道必须要设置ADC10SA来确认传送的目标地址,然后通过设置ADC10DTC1来确认传送的数据大小(字节数),另外还可以通过设置ADC10DTC0中的ADC10TB来选择传输一块或者两块数据、设置ADC10CT来选择是否连续传递数据。因为大家现在还没有学习flash模块,为了避免覆盖flash中的重要数据(比如我们每次用到的CALBC1_16MHZ和CALDCO_16MHZ都是在flash中存放的),我们只在RAM中做文章。我们可以给定一个固定的地址,比如0x0200,但是我们如何保证这些地址不会被别的程序覆盖呢,确实很难保证。Cloud也不推荐用这种方式。那么我们能不能利用DTC直接将数据存放到我们的变量中呢?答案是肯定的。学习过指针的同学都知道,在程序中,所有的变量都是有其地址的,通过这个思想,我们让ADC10SA指向某个变量的地址,然后再将ADC10DTC1的大小和变量长度相匹配就好了。
#include &msp430.h&&&
&&
#define&&uchar& & unsigned char&&
#define&&ushort& & unsigned short&&
&&
ushort temp0, temp1;&&
uchar temp0_L, temp0_H;&&
uchar temp1_L, temp1_H;&&
ushort array[2] = (0);&&
&&
int main(void)&&
{&&
&&WDTCTL = WDTPW + WDTHOLD;& && && && && &&&// Stop WDT&&
&&BCSCTL1 |= DIVA_2;& && && && && && && && &// ACLK = LFXT1CLK/8&&
&&ADC10CTL1 = ADC10SSEL_1 + INCH_1 + CONSEQ_1;& && && && &// A1/A0, single sequence, 选择ACLK作为时钟源&&
&&ADC10CTL0 = MSC + ADC10ON + ADC10IE + REFON + REF2_5V;& &&&//时钟源分频+连续&&
&&ADC10DTC1 = 0x02;& && && && && && && && & // 2 conversions&&
&&ADC10AE |= 0x03;& && && && && && && && &&&// P2.1,0 ADC10 option select&&
&&P3SEL |= 0x30;& && && && && && && && && & // P3.4,5 = USART0 TXD/RXD&&
&&P3DIR |= 0x10;& && && && && && && && && & // P3.4为输出&&
&&ME2 |= UTXE0 + URXE0;& && && && && && && &// Enabled USART0 TXD/RXD&&
&&UCTL0 |= CHAR;& && && && && && && && && & // 8-bit character&&
&&UTCTL0 |= SSEL1;& && && && && && && && &&&// UCLK = SMCLK, 选择SMCLK作为时钟源&&
&&UBR00 = 0xD0;& && && && && && && && && &&&// 2MHz 9600&&
&&UBR10 = 0x00;& && && && && && && && && &&&//&&
&&UMCTL0 = 0x00;& && && && && && && && && & // no modulation&&
&&UCTL0 &= ~SWRST;& && && && && && && && &&&// Initalize USART state machine&&
&&IE2 |= URXIE0;& && && && && && && && && & // Enabled USART0 RX interrupt&&
& &
&&for (;;)&&
&&{&&
& & ADC10CTL0 &= ~ENC;&&
& & while (ADC10CTL1 & BUSY);& && && && && &// Wait if ADC10 core is active&&
& & ADC10SA = (short) (array);& && && && && && && && &// Data buffer start&&
& & ADC10CTL0 |= ENC + ADC10SC;& && && && & // Sampling and conversion start&&
& & __bis_SR_register(CPUOFF + GIE);& && &&&// LPM0, ADC10_ISR will force exit&&
& & //AD把两路转换完成,而且给了ADC10SA控制将长度为2的数据块放到某个地址中,那么可以从地址中取出转换完成的数据&&
& & //一个块放着两个转换完的数据,每个转换完的数据长度是2个字节,一个地址是一个字节,现在的地址是在0x200的基础上加4&&
& & //但是这个地址是个什么意思不太明白&&
& & //对于中断来说,当每次两个整个数据块都传递完成时,中断标志置1,此时产生中断,让CPU跳出低功耗状态,继续执行上面的for循环&&
& & //继续开始转换,由于AD转换独立于CPU,所以CPU又进入低功耗状态,当转换完成时再次跳出低功耗,这样不断进入跳出,实现低功耗。&&
& & //所以低功耗跳出之后,以下应该写串口传输的代码,将转换完的数字量给USART&&
& & //很简单,模数转换之后,结果自然保存到了array数组中,数组每个元素的大小是2字节,因为ADC是10位,采样结果先放在2字节的MEM寄存器中&&
& & //所以一次转换结果在内存中占用两个连续的地址,也就是2字节大小&&
& & temp0_L = array[1] & 0x00&&
& & temp0_H = (array[1]&&8) & 0x00&&
& & temp1_L = array[0] & 0x00&&
& & temp1_H = (array[0]&&8) & 0x00&&
& & //array[1]对应着A0的数字输出;array[0]对应着A1的数字输出&&
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = 0xC0;&&
& && &
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = temp0_H;&&
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = temp0_L;& &
& && &
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = temp1_H;&&
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = temp1_L;&&
& && &
& & while (!(IFG2 & UTXIFG0));& &
& & TXBUF0 = '\n';&&
& && &
&&}&&
}&&
&&
// ADC10 interrupt service routine&&
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)&&
#pragma vector=ADC10_VECTOR&&
__interrupt void ADC10_ISR (void)&&
#elif defined(__GNUC__)&&
void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)&&
#else&&
#error Compiler not supported!&&
#endif&&
{&&
& & __bic_SR_register_on_exit(CPUOFF);& && &// Clear CPUOFF bit from 0(SR)&&
}&&复制代码
Powered by
逛了这许久,何不进去瞧瞧?(luojiao520)
(我们创意互动)
(我们创意互动)
第三方登录:

我要回帖

更多关于 win10 dtc 的文章

 

随机推荐