钻石会员
主题
回帖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
- }
复制代码 |
|