PIC单片机控制DS18B20在proteux中的测试

      单片机使用的是PIC16F877A和PIC12F609,proteux是8.0的版本!

       程序编写使用的是MPLAB X IDE 1.70,编译工具:picc-9.83。

       us定时器使用的是picc库定时器,_XTAL_FREQ 4000000UL。

       由于没有在网上发现proteux和X IDE的联调工具,只能写好这个程序,直接在Proteux中模拟,模拟了几次发现,无法读取DS18B20寄存器中的温度值。

到现在还是没有发现原因!

       最后直接在proteux中建立工程,编译工具使用一样的!最后测试通过!

       知道原因的高手,请留言!谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#define F_CPU 4000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define uchar unsigned char #define uint unsigned int #define uint32 unsigned long const uchar SEG_CODE[] ={"0123456789"}; extern void Write_LCD_Command (uchar cmd); extern void Write_LCD_Data(uchar dat); extern void Initialize_LCD(); extern void LCD_ShowString(uchar x, uchar y,char *str); void DePley(uint x,uint c) { uint a=0,b=0 ; uint32 p; a=(int)x*5000.0/1023.0; // b=(int)c*50000.0/1023.0; b=b-293; p=(long)(a*(b/10.0)); Write_LCD_Command(0x80); if ((a/1000)==0) { Write_LCD_Data(' '); } else { Write_LCD_Data(SEG_CODE[a/1000]); } Write_LCD_Data(SEG_CODE[a00/100]); Write_LCD_Data('.'); Write_LCD_Data(SEG_CODE[a0/10]); Write_LCD_Data(SEG_CODE[a]); Write_LCD_Data('V'); Write_LCD_Command(0x8a); Write_LCD_Data(SEG_CODE[b/1000]); Write_LCD_Data('.'); Write_LCD_Data(SEG_CODE[b00/100]); Write_LCD_Data(SEG_CODE[b0/10]); Write_LCD_Data(SEG_CODE[b]); Write_LCD_Data('A'); Write_LCD_Command(0xC0); if ((p000000/1000000) == 0)Write_LCD_Data(' '); else Write_LCD_Data(SEG_CODE[p000000/1000000]); if(((p00000/100000) == 0)&&((p000000/1000000) == 0)) Write_LCD_Data(' '); else Write_LCD_Data(SEG_CODE[p00000/100000]); Write_LCD_Data(SEG_CODE[p0000/10000]); Write_LCD_Data('.'); Write_LCD_Data(SEG_CODE[p000/1000]); Write_LCD_Data(SEG_CODE[p00/100]); Write_LCD_Data('W'); p=(long)((a*10)/b); Write_LCD_Command(0xCB); if ((p000/1000)>0) { Write_LCD_Data(' '); Write_LCD_Data('O'); Write_LCD_Data('L'); Write_LCD_Data(' '); } else { Write_LCD_Data(SEG_CODE[p000/1000]); Write_LCD_Data(SEG_CODE[p00/100]); Write_LCD_Data(SEG_CODE[p0/10]); Write_LCD_Data(SEG_CODE[p]); } Write_LCD_Data('R'); } uint ADC_Convert(uchar CH) { uint addata; //SFIOR =0; //连续转换模式 ADMUX=(CH); //AVCC,AREF引脚外加滤波电容 _delay_us(100); //右对齐,ADC0单端输入 //ADCSRA =0X80; //启动ADC转换 ADCSRA |=_BV(ADSC); //开始转换 _delay_us(1000); while(!(ADCSRA&(_BV(ADIF)))); //等待转换结束,ADIF置1 addata=ADCL+(ADCH<<8);//addata=(int)(ADCL+(ADCH<<8))*5000.0/1023.0; ADCSRA |=_BV(ADIF); //对ADIF写”1”,ADIF清0 //ADCSRA =0X00; //关闭ADC转换 ADCSRA &=~_BV(ADSC); return addata; }//*/ int main() { uint a=1234,b; DDRD = 0xFF;PORTD=0xFF; DDRB = 0xFF;PORTB=0xFF; DDRC = 0xFF;PORTC=0xFF; DDRA = 0x00;PORTA=0x00; Initialize_LCD(); LCD_ShowString(0,0," Hi VA p1-1 "); ADCSRA = 0xC6; _delay_ms(30000); Write_LCD_Command(0x01); while(1) { a=ADC_Convert(0); b=ADC_Convert(1); DePley(a,b); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值