钻石会员 
 
主题
回帖0
积分11561
阅读权限50
注册时间2008-12-31
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
 楼主 |
发表于 2012-6-9 20:08
|
显示全部楼层
 
 
 
 本帖最后由 gw168sh 于 2012-6-9 21:24 编辑  
 
奇怪了用Proteus仿真没问题,下载到板上总是跳。 
帮看看是哪里的问题。4M晶振 
会不会是单片机或者是万能板飞线的事? 
 
刚才出去下,又重新开机稳定了,难道是USB供电的事? 
 
 
- #include <pic.h> //
 
 - #include <stdio.h> //
 
 - #include <math.h> //
 
 - #define uchar unsigned char //
 
 - #define uint unsigned int //
 
 - __CONFIG(0x3fb1); //11101100110001 4m xt
 
  
 
- #define Setbit(y,x) y|=(1<<(x)) //setb(p1,2); p12=1; 
 
 - #define Clrbit(y,x) y&=~(1<<(x)) //clrb(p1,2); p12=0; 
 
 - #define Getbit(y,x) (0x01&(y>>(x))) //获取某一位值 
 
  
- void ping(void);
 
 - void pingjun(void);
 
 - void init(void); //
 
 - void display(uchar qian,uchar bai,uchar shi,uchar ge);
 
 - void read_adc(void);
 
 - static volatile unsigned char ADRES @ 0x1E;
 
 - bit adbz;//
 
  
- bank1 uint a[12];//定义存放A/D转换结果的数组,在bank0中
 
 - uint i,j,k; //定义几个整型变量 
 
 - uint uo,bai,qian;
 
 - uchar ge,shi,temp,del; //,gewei,shiwei,baiwei,qianwei
 
  
- unsigned long V,V1,shu1,AD1,AD0;
 
 - uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}; //
 
 - /*延时函数*/
 
 - //*********************************//
 
 - void delay_10ms() //
 
 - { uint x; //
 
 - for(x=0;x<2200;x++) //
 
 - {;} //
 
 - } //
 
 - //*********************************
 
 - void delay_50us() //
 
 - { uchar x; //
 
 - for(x=0;x<20;x++) //20
 
 - {;} //
 
 - } //
 
 - //=================================
 
 - //延时最大255毫秒
 
 - //=================================
 
 - void delay_ms(uchar ms) //
 
 - {
 
 - uchar w,q; //
 
 - for(w=0;w<ms;w++) //
 
 - for(q=0;q<86;q++) //
 
 - {
 
 - #asm //
 
 - nop //
 
 - nop //
 
 - #endasm //
 
 - }
 
 - }
 
  
- void init()
 
 - {
 
 - PORTB = 0xff;//PD口输出全1 
 
 - TRISB = 0x00;//设置方向寄存器为输出 
 
  
- PORTC = 0xff;//PD口输出全1 
 
 - TRISC = 0x00;//设置方向寄存器为输出 
 
 - }
 
  
 
- //*********************************
 
 - //AD转换初始化子程序 //
 
 - //*********************************
 
  
- void read_adc()
 
 - { 
 
 - TRISA=0b00001001;//
 
  
- ADCON0=0B00000001;//fosc/8 RA1/AN1 ADON=1
 
  
- //ADCON1=0B00000010;//
 
 - ADCON1=0B00000101;//
 
 - PIE1=0; //外设中断控制寄存器全关
 
 - INTCON=0; //中断控制寄存器全关
 
 - ADIF=0; //AD转换状态标志位,0没有完成
 
 - ADRES=0; //AD值清零
 
 - delay_50us();
 
 - ADGO=1; // GODONE=1启动AD
 
 - while(ADIF==0) //AD转换状态标志位,0没有完成,如过为1则AD转换完成
 
 - {
 
 - ;
 
 - } //
 
 - AD0=ADRES; //
 
 - AD1=AD0;
 
 - }
 
 - void pingjun()
 
  
- {
 
 - uint i,j,max,min;
 
 - max=a[0];min=a[0];
 
  
- for(i=1;i<12;i++)
 
  
- {
 
  
- j=a[i]; 
 
  
- if(j>max) max=j;
 
  
- if(j<min) min=j;
 
 - }
 
  
- printf("max=%d\nmin=%d\n",max,min); //最大和最小
 
  
- shu1=max+min;
 
  
 
- }
 
  
- void ping()
 
 - {
 
 - uchar i;
 
 - for(i=0;i<=12;i++)
 
 - {
 
 - V=a[i];
 
 - V1=V1+V;
 
 - }
 
 - V=V1-shu1;
 
 - V1=0;
 
 - }
 
  
 
 
- void main(void)
 
 - {
 
  
- init();
 
 - adbz=0;
 
 - while(1)
 
 - { 
 
  
- for(i=0;i<=12;i++)
 
 - {
 
 - read_adc();//A/D转换初始化 
 
 - a[i]=AD1;//1次A/D转换的结果存入数组
 
 - delay_50us();
 
 - adbz=1;
 
 - }
 
  
- if(adbz==1)
 
 - {
 
 - adbz=0;
 
 - pingjun();
 
 - ping();
 
 - //V=V/1.0;
 
 - qian=V/1000; //
 
 - bai=V/100%10; //
 
 - shi=V/10%10; //0000001求十的倍数再求余
 
 - ge=V%10;
 
 - }
 
  
- display(qian,bai,shi,ge);
 
  
- }
 
 - }
 
  
- //显示子程序
 
 - //**********************************
 
 - void display(uchar qian,uchar bai,uchar shi,uchar ge)
 
  
- {
 
  
- PORTC=table[ge];
 
 - Clrbit(PORTB,4);//PD0清零,点亮LED 
 
 - delay_ms(6); 
 
 - Setbit(PORTB,4);//PD0置一,熄灭LED 仿真是GE 0 SHI 1 BAI 2 QIAN 3
 
  
 
- PORTC=table[shi]; //shiwei=0;
 
 - Clrbit(PORTB,5);//PD0清零,点亮LED 
 
 - delay_ms(6); 
 
 - Setbit(PORTB,5);//PD0置一,熄灭LED 
 
  
 
- PORTC=table[bai]; 
 
 - Clrbit(PORTB,6);//PD0清零,点亮LED 
 
 - delay_ms(6); 
 
 - Setbit(PORTB,6);//PD0置一,熄灭LED 
 
  
- PORTC=table[qian]; 
 
 - Clrbit(PORTB,7);//PD0清零,点亮LED 
 
 - delay_ms(6); 
 
 - Setbit(PORTB,7);//PD0置一,熄灭LED 
 
 - }
 
  
 
 
 
 
 
 
 
 
 
  复制代码 |   
 
 
 
 |