当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言编程的while语句问题

更新:01-03 整理:39baobao.com
字体:

[汇编语言编程 X Y Z W均为带16位带符号整型变量计算Z X Y]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ASSUME CS:CC, DS:QQ QQ SEGMENT VV DW 4 WW DW +100 XX DW -100 YY DW +800 ZZ D...+阅读

你怎么判断它只执行了一次呢???

补充:首先不清楚你的芯片具体是什么型号的,从程序上看应该是PIC16或者pic18系列的。也不清楚晶振频率是多少。

我提出我的怀疑及其推论:首先我怀疑while不是没有循环,而是一直循环了,但是Vsrb_average[0]并没有被赋值超过50以上的数值。(你可以加一条语句,在wihile大括号里,但不在任何if语句内的:loop++;让一个自定义变量自加,运行一两秒后看loop的数数值肯定很大)

因此怀疑AD采集过程并不准确。而为什么AD采集不准确呢,一般设置好并开启AD后采样和保持需要时间的(PIC单片机的数据手册里也提到)但你的程序设置是T0定时溢出后在中断里执行AD采集。这时候问题来了,你的TO的option_org寄存器等于0B11001111,也就是说设置T0定时器使用内部指令周期时钟(就是用单片机晶振所输入的频率定时)但PSA=0,预分频器不用于T0,所以当你的晶振是4M的时候,定时器0从计数到溢出只需要256uS。也就是说程序从WHILE开始到采集AD信号这段时间才比256us大不了多少,这根本不符合PIC单片机规定的采集时间。所以采集到的数据很小,根本不足进入while循环内部的哪两个if语句(一个IF语句是判断[50,600]这个区间,另一个是判断大于680这个范围)。

但当你屏蔽掉T0的初始化程序后,注意,这时候0PTION_REG寄存器等于0B11111111,如果TRCKI这个引脚是有脉冲充输入的话,T0定时器是会自动计数的,当溢出之后是会自动置位T0IF的(虽然没有设置T0IE,但T0IF满足条件后是会置位的),而你的总中断开关在主函数里INTCON|=0XC0;所以当T1定时器溢出之后,程序会在中断子函数里进行对T0的操作。

还有你的程序有些逻辑错误,AD结果应该是10位的,但你接收AD结果的数组a[2]却是8位的,那就丢失了两个位了。

如果还有问题,给我留言。

本文地址:https://www.39baobao.com/show/29_22371.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

汇编语言编程 X Y Z W均为带16位带符号整型变量计算Z12345678910111213141516171819202122232425262728293031ASSUME CS:CC, DS:QQ QQ SEGMENT VV DW 4 WW DW 100 XX DW -100 YY DW 800 ZZ DW ?QQ ENDS;----------------------...

汇编语言编程计算问题;汇编语言编程;计算 S=1+2*3+3*4+4*5+……+N*(N+1),N由用户输入,将结果在屏幕显示;---------------------------ASSUME CS:CC, DS:QW;---------------------------QW SEGMENT M1...

C语言编程一个课后题#include void main() { void change(int *p); //对被调用的change函数声明 int a[5][5],*p,i,j; printf("input matrix:\n"); //提示输入一个5*5的 matrix for (i = 0; i for (...

C语言编程题编一个排序函数啊用了一个冒泡法,从小到大排序,请参考 #include <stdio.h> void Sort(int token[], int count); /*在此处做函数声明最好*/ void main() { int i,count,token[100]; printf("请输...

用lingo编写for语句怎么编i 5 6 7 8 9 10代码如下,找不到可行解,请检查模型或代码数据是否有错 sets: r/1..12/:X,Y,Z; endsets L1+L2+L3=20; M1+M2+M3=40; P1=0.66*Q1^0.51*L1; P2=0.66*(Q2+0.9*Q1)^0.51*L2; P3=0.6...

C语言编程题:定义一个长度为10的数组求最大值及下标C语言程序如下: #include <stdio.h> void fun(int a[],int n,int *k) { int i,maxxr,j; maxxr=a[0]; for(i=0;i<n;i++) { if(maxxr<a[i]) { maxxr=a[i]; } } for(i=0;i<n;i++...

C语言while语句问题这是我给你修改之后的程序(望注意编程风格,多敲点空格吧): 01 #include <stdio.h> 02 #include <stdlib.h> 03 04 int main() 05 { 06 int a, b, c; 07 float average; 08 char...

c语言问题while执行语句问题执行了n次,为什么呢?? 从基础慢慢分析吧 while(布尔值)语句 这个你应该知道的吧 意思就是如果while里的 “布尔值” 是 “真” 的时候, “语句” 就会执行 如果是 “假” while 就...

c语言while语句while(真) 表示一直循环 我们视 > 0 的数都为真 所以 这里 你写 1 ,2,3,4,5,6,6,,7,,8,,9,,。。。。。都是 无限循环下去 如果 是 sum = sum + i 你可以看下 第 1 次 循环 sum =...