完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人最近在用MSP430F249仿真AD转换,用1602显示转换的数据,我不知道为什么,试了很多办法,总是显示不出数据,我在想是不是protues里无法仿真430的AD转换呢?请大神指点。这是我的程序和仿真图,请大神们指教。
|
|
相关推荐
18个回答
|
|
我用单通道单次转换试了
能读出来数据 Proteus7.8版读的不准但有数据 Proteus8.1版很准确 void main(void) { uchar i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT P3DIR = 0XFF;P3OUT = 0XFF; //端口配置 P4DIR = 0XFF;P4OUT = 0XFF; ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP; // Use sampling timer ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ENC; // Conversion enabled P6SEL |= 0x01; // P6.0 ADC option select Init_LCD(); for (;;) { ADC12CTL0 |= ADC12SC; // Sampling open _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit for(i=0;i<4;i++) { LCD_Wdat(a1+0x30); } } } // ADC12 interrupt service routine #pragma vector=ADC12_VECTOR __interrupt void ADC12_ISR (void) { ADC_Result=ADC12MEM0; a1[0]=(ADC_Result)/1000; a1[1]=(ADC_Result)/100%10; a1[2]=(ADC_Result)%100/10; a1[3]=(ADC_Result)%10; } 这是我的单通道设置直接显示ADC_MEM的值没有处理 后面注释不用管 |
|
|
|
|
|
|
|
非常感谢你,看了你的程序,我大概知道自己问题出在哪儿了。真的谢谢你。
|
|
|
|
我想问一下,你说的protues7.8版本仿真不准是什么情况?我把自己的程序改了,结果是这样的,这是什么情况?
|
|
|
|
|
|
|
|
|
|
|
|
没有,不知道是我protues版本7.7太低了。还是我程序有问题。给你看看我的程序吧。
#include #include "lcd_1602.h" unsigned int a1[4]; unsigned int a2[4]; unsigned int a3[4]; uchar BIM[4]={"BIM:"}; unsigned int W; unsigned int H; unsigned int B; void main(void) { uchar i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0XFF;P1OUT = 0XFF; //端口配置 P4DIR = 0XFF;P4OUT = 0XFF; ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP+CONSEQ_1; // Use sampling timer ADC12IE = 0x02; // Enable interrupt ADC12CTL0 |= ENC; // Conversion enabled P6SEL |= 0x01; // P6.0 ADC option select ADC12CTL0 |= ADC12SC; init_1602(); // Sampling open _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit zhl_1602(0x80);//在第一行第八点开始显示 shj_1602(0x57); //显示“W” shj_1602(0x3a); //显示“:” for(i=0;i<4;i++) { shj_1602(a1+0x30); } zhl_1602(0x88); //在第一行第八点开始显示 shj_1602(0x48); //显示“H” shj_1602(0x3a); //显示“:” for(i=0;i<4;i++) { shj_1602(a2+0x30); } zhl_1602(0xc0); for(i=0;i<4;i++) { shj_1602(BIM); } for(i=0;i<4;i++) { shj_1602(a3+0x30); } } // ADC12 interrupt service routine #pragma vector=ADC12_VECTOR __interrupt void ADC12_ISR (void) { W=ADC12MEM0; a1[0]=(W)/1000; a1[1]=(W)/100%10; a1[2]=(W)%100/10; a1[3]=(W)%10; H=ADC12MEM1; a2[0]=(H)/1000; a2[1]=(H)/100%10; a2[2]=(H)%100/10; a2[3]=(H)%10; B=W/(H*H); a3[0]=(B)/1000; a3[1]=(B)/100%10; a3[2]=(B)%100/10; a3[3]=(B)%10; } |
|
|
|
我的电压不管怎么变化都显示
|
|
|
|
是我程序的问题,还是protues版本太低呢?
|
|
|
|
#include
#include "lcd_1602.h" unsigned int a1[4]; unsigned int a2[4]; unsigned int a3[4]; uchar BIM[4]={"BIM:"}; unsigned int W; unsigned int H; unsigned int B; void main(void) { uchar i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0XFF;P1OUT = 0XFF; //端口配置 P4DIR = 0XFF;P4OUT = 0XFF; ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP+CONSEQ_1; // Use sampling timer ADC12IE = 0x02; // Enable interrupt ADC12CTL0 |= ENC; // Conversion enabled P6SEL |= 0x01; // P6.0 ADC option select ADC12CTL0 |= ADC12SC; init_1602(); // Sampling open _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit zhl_1602(0x80); shj_1602(0x57); shj_1602(0x3a); for(i=0;i<4;i++) { shj_1602(a1+0x30); } zhl_1602(0x88); shj_1602(0x48); shj_1602(0x3a); for(i=0;i<4;i++) { shj_1602(a2+0x30); } zhl_1602(0xc0); for(i=0;i<4;i++) { shj_1602(BIM); } for(i=0;i<4;i++) { shj_1602(a3+0x30); } } // ADC12 interrupt service routine #pragma vector=ADC12_VECTOR __interrupt void ADC12_ISR (void) { W=ADC12MEM0; a1[0]=(W)/1000; a1[1]=(W)/100%10; a1[2]=(W)%100/10; a1[3]=(W)%10; H=ADC12MEM1; a2[0]=(H)/1000; a2[1]=(H)/100%10; a2[2]=(H)%100/10; a2[3]=(H)%10; B=W/(H*H); a3[0]=(B)/1000; a3[1]=(B)/100%10; a3[2]=(B)%100/10; a3[3]=(B)%10; } |
|
|
|
等哈我把我的单通道的仿真给你发过去
|
|
|
|
#include
#include "lcd_1602.h" unsigned int a1[4]; unsigned int a2[4]; unsigned int a3[4]; uchar BIM[4]={"BIM:"}; unsigned int W; unsigned int H; unsigned int B; void main(void) { uchar i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0XFF;P1OUT = 0XFF; //端口配置 P4DIR = 0XFF;P4OUT = 0XFF; ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP+CONSEQ_1; // Use sampling timer ADC12IE = 0x02; // Enable interrupt ADC12CTL0 |= ENC; // Conversion enabled P6SEL |= 0x01; // P6.0 ADC option select ADC12CTL0 |= ADC12SC; init_1602(); // Sampling open _BIS_SR(GIE); // LPM0, ADC12_ISR will force exit zhl_1602(0x80); shj_1602(0x57); shj_1602(0x3a); for(i=0;i<4;i++) { shj_1602(a1+0x30); } zhl_1602(0x88); shj_1602(0x48); shj_1602(0x3a); for(i=0;i<4;i++) { shj_1602(a2+0x30); } zhl_1602(0xc0); for(i=0;i<4;i++) { shj_1602(BIM); } for(i=0;i<4;i++) { shj_1602(a3+0x30); } } // ADC12 interrupt service routine #pragma vector=ADC12_VECTOR __interrupt void ADC12_ISR (void) { W=ADC12MEM0; a1[0]=(W)/1000; a1[1]=(W)/100%10; a1[2]=(W)%100/10; a1[3]=(W)%10; H=ADC12MEM1; a2[0]=(H)/1000; a2[1]=(H)/100%10; a2[2]=(H)%100/10; a2[3]=(H)%10; B=W/(H*H); a3[0]=(B)/1000; a3[1]=(B)/100%10; a3[2]=(B)%100/10; a3[3]=(B)%10; } |
|
|
|
好的,谢谢你。
|
|
|
|
|
|
|
|
|
|
云汉达人
// 函数:ISR_ADC12Init() // 描述:AD12转换中断初始化 // 参数:无 // 备注: static void ISR_ADC12Init(void) { // P1SEL2 |= BIT0; P6SEL |= BIT0; // 开启AD转换功能 P6DIR &= ~BIT0; // 设置为输入 // SHT0_2:16 ADC12CLK cycles // REF2_5V:2.5V参考电压 // REFON:开基准电压 // ADC12ON:开内核 // ENC:使能AD ADC12CTL0 = SHT0_2 + REF2_5V + REFON + ADC12ON ; ADC12MCTL0 = INCH_0; // INCH_0:选择通道0 ADC12CTL0 |= ENC; // 使能AD转换 ADC12IE = BIT0; // 开中断 } // 函数:Start_AD() // 描述:启动AD12转换 // 参数:无 void Start_AD(void) { ADC12CTL0 |= ADC12SC; // 启动AD转换 while(ADC12CTL1 & ADC12BUSY); // 等待转换 ADC12CTL0 &= ~ADC12SC; // 恢复 } //函数: ISR_ADC12() //作用: AD转换中断服务 //参数: 无 #pragma vector = ADC12_VECTOR __interrupt void ISR_ADC12(void) { if((ADC12IFG & BIT0)==BIT0) { AD_Buf = ADC12MEM0; ADC12IFG = 0; } } 你先看看吧,要先去趟一趟,晚上在聊。 |
|
|
|
按你这样写,那我的电路图是不是就要早REF+上,接个2.5V的电压呢?其实我一直不太清楚REF+。VEREF+、AVcc、VEREF-这些电压的取值,芯片手册我看了,书我也看了。对于VEREF等都只有个范围,具体多大不清楚,在0~AVcc之间,我随便取?VEREF应该和转换电压有关系吧。你能举个例子,解释一下吗?谢谢了。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
671 浏览 0 评论
1095 浏览 1 评论
2461 浏览 5 评论
2790 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2625 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
643浏览 9评论
639浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
770浏览 6评论
614浏览 5评论
656浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 05:24 , Processed in 1.107042 second(s), Total 82, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号