PIC16F873 C程序(PICC9.8写)

发布者:梦中的额吉最新更新时间:2019-11-23 来源: 51hei关键字:PIC16F873  C程序  PICC9  8写 手机看文章 扫描二维码
随时随地手机看文章

#include

unsigned int i,max,X11=0,X12=0,X13=0,X14=0,X15=0,t=2;

unsigned long  AD_vasule[2],ADOUT,ADOUT_2;

unsigned long timer[5]; //11-15脚输出计数器

unsigned long delay11=0 ;    //模拟输入延时

unsigned long  TIMEALL  ; 

unsigned long   DELAY;

#define  TIME   2        //设置时间1秒

void up_on(void) //I/O配置函数

 {

   INTCON=0x00; //关闭所有中断

   ADCON1=0X04; //A/D模块设置AN0 AN1 AN3为模拟输入;其他引脚为数字输出

   TRISC=0XE0;  //设置11-15脚为输出

   RBPU=0;      //RB设置弱上拉

 }

///////////////////

void AD(void)   //A/D配置函数

 {

   ADCS1=1;  //FOSC/32 A/D转换时钟

   ADCS0=0;

   CHS2=0;   //设置AN1为模拟输入

   CHS1=0;

   CHS0=1;

   ADIE=1; //A/D转换中断允许

   PEIE=1; //外围中断允许

   TRISA1=1; //设置RA1 为输入方式

   ADON=1;    //A/D模块开始工作

 }

////////////

void tmint0(void)  //timer0初始化函数

  {

    T0CS=0; //TMR0工作于定时器方式

    PSA=0;  //TMR0用分频

    PS2=0;  //TMR0输入16分频

    PS1=1;

    PS0=1; 

    T0IF=0; //清除TMR0 的中断标志

    T0IE=1; //TMR0中断允许

  }


/////////

//////////

void interrupt AD_timer(void)   //A/D和timer中断函数

{

  

    if(T0IF)     //判断timer0是否发生中断

    {

        

         T0IF=0;        //清除中断标志

         if(!RB4&&RB5&&RB6) {max=0; timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL; timer[4]=TIMEALL; t=4;}  //控制方式1

         else if(RB4&&!RB5&&RB6){ max=1; timer[2]=TIMEALL;timer[3]=TIMEALL; timer[4]=TIMEALL;  

                                  if(X12!=1){X11=0;X12=1;X13=0;X14=0;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL; }

                                   t=2;

                                  }//控制方式2

         else if(!RB4&&!RB5&&RB6){ max=2; timer[3]=TIMEALL; timer[4]=TIMEALL; 

                                   if(X13!=1){X11=0;X12=0;X13=1;X14=0;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL; }

                                  t=3; }  //控制方式3

         else if(RB4&&RB5&&!RB6) {max=3; timer[4]=TIMEALL; 

                                   if(X14!=1){X11=0;X12=0;X13=0;X14=1;X15=0; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL; } 

                                   t=4; }  //控制方式4

         else if(!RB4&&RB5&&!RB6) {max=4 ;    //控制方式5

                                    if(X15!=1){X11=0;X12=0;X13=0;X14=0;X15=1; i=0; timer[0]=0;timer[1]=TIMEALL;timer[2]=TIMEALL;timer[3]=TIMEALL;timer[4]=TIMEALL; }

                                   t=5; }                          

         else max=5;

            

       if(timer[0]          

       if (timer[1]                

       if (timer[2]                

       if (timer[3]                 

       if (timer[4]                 

       if(delay11       else {

                 delay11=0;

                 if(max==0) {i=0;timer[0]=0;}

                 else {

                        if (i                        else   i=0;

                        if(max<5) timer=0;

                      } 

                

             

            }    

     }

   

    if(ADIF)    //判断AD是否发生中断

    { 

    

     AD_vasule[0]=ADRESL; //保存AD转换结果低8位

     AD_vasule[1]=ADRESH; //保存AD转换结果高2位

     AD_vasule[1]=AD_vasule[1]<<2;  //A/D结果高2位左移2位

     AD_vasule[0]=AD_vasule[0]>>6;

     ADOUT=AD_vasule[1]+AD_vasule[0];  //转换成10位结果保存

     ADIF=0; //清除中断标志

     ADGO=1; //开始下次转换

     

   }

  

  

}

///////////////////////

//////////////////////

void OUT_DELAY(void)////计算延时

{

      ADOUT_2=ADOUT;

      if(ADOUT_2<10) ADOUT_2=10;

      if(ADOUT_2>=818) ADOUT_2=1024;

      if(max==0) DELAY=TIMEALL*1024*4/(5*ADOUT_2); //控制方式1延时

      else  DELAY= TIMEALL*1024/(t*ADOUT_2);

            

}


////////////////////

void key5(void)     //控制方式1-5

{  

   

   

     

             OUT_DELAY();//计算延时

       

                  

             if((i==0)&&(timer[0]               {

                 RC0=1;

               }  

             if(((i!=0)&&(timer[0]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[0]>=TIMEALL)))

              {

                RC0=0;

              } 

///////////////////////////////////

               if((i==1)&&(timer[1]               {

                 RC1=1;

               }  

             if(((i!=1)&&(timer[1]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[1]>=TIMEALL)))

               {

                 RC1=0;

               } 

//////////////////////////////////////

///////////////////////////////////

               if((i==2)&&(timer[2]               {

                 RC2=1;

               }  

             if(((i!=2)&&(timer[2]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[2]>=TIMEALL)))

               {

                 RC2=0;

               } 

//////////////////////////////////////

///////////////////////////////////

               if((i==3)&&(timer[3]               {

                 RC3=1;

               }  

             if(((i!=3)&&(timer[3]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[3]>=TIMEALL)))

               {

                 RC3=0;

               } 

//////////////////////////////////////   

///////////////////////////////////

               if((i==4)&&(timer[4]               {

                 RC4=1;

               }  

             if(((i!=4)&&(timer[4]>=TIMEALL)&&(DELAY<=TIMEALL))||((DELAY>TIMEALL)&&(timer[4]>=TIMEALL)))

               {

                 RC4=0;

               }

[1] [2]
关键字:PIC16F873  C程序  PICC9  8写 引用地址:PIC16F873 C程序(PICC9.8写)

上一篇:Micrichip 单片机 I /O引脚使用注意事项
下一篇:pic单片机驱动CAN接口收发数据C语言程序,11位标准标识符

推荐阅读最新更新时间:2024-11-08 20:01

AVR-GCC程序存储器api
程序存储器 如果要将数据(如常量,字符串,等等)放在FLASH里,用户需要指明数据类型__ATTR_PROGMEM__。为了方便使用,AVR-GCC定义了一些更直观的符号,如下表所示。 类型数据定义 typedef void PROGMEM prog_void typedef char PROGMEM prog_char typedef unsigned char PROGMEM prog_uchar typedef int8_t PROGMEM prog_int8_t typedef uint8_t PROGMEM prog_uint8_t typedef int16_t PROGMEM prog_int16_t t
[单片机]
图解在keil中的c程序加入汇编语句
  在C51编程中,有时控制一些器件时,需要较强实时性,这时有必要在其中嵌入ASM语句,关于嵌入的方法众多,网上也可以找到相关说明,不过说得并不详细,这里结合本人调试18B20测温程序来说说如何在C中嵌入ASM语句。(题外话:18B20完全用C来写也可以的,这里仅只是作个示范) 看下图,在我们一般建立好的项目文件里,加上C51S.LIB文件。   此主题相关图片如下:   然后,点选我们写好的C程序,点右键,按下面操作进行。   此主题相关图片如下:   此主题相关图片如下:   跟着,我们在程序中建一个函数,里面嵌入ASM语句,在开始和结束,加上这两行,这样中间就可以写ASM语句。   此主题相关图片如下:
[单片机]
图解在keil中的<font color='red'>c程序</font>加入汇编语句
ATMEGA8单片机驱动4线步进机C程序
#include avr/io.h #include avr/delay.h #define uchar unsigned char #define uint unsigned int uchar np; //步进电机运行数据表 const uchar motortb ={0x11,0x99,0x88,0xCC,0x44,0x66,0x22,0x33}; void delay_nms(uint ms)// 每步延时de子程序 { uint i; for(i=0;i ms;i++) _delay_loop_2(8*250); } void a_step(uchar d,uchar t) //步进电机走一步d=0
[单片机]
电气高手写PLC程序的技巧
对于PLC程序的编写,我认为无须天马行空的标新立异,也无须花枝招展的炫弄技巧。只要在内容和质量这两方面把好关,具有正确性、可靠性、方便性、简洁性和可读性就是很好的程序! 一 PLC程序的内容 PLC应用程序应最大限度地满足被控对象的控制要求,在构思程序主体的框架后,要以它为主线,逐一编写实现各控制功能或各子任务的程序。经过不断的调整和完善。使程序能完成所要求的控制功能。另外,PLC应用程序通常还应包括以下几个方面的内容: 1、初始化程序在PLC上电后,一般都要做一些初始化的操作。其作用是为启动作必要的准备,并避免系统发生误动作。初始化程序的主要内容为:将某些数据区、计数器进行清零;使某些数据区恢复所需数据;对某些输出量置位或复
[嵌入式]
电气高手写PL<font color='red'>C程序</font>的技巧
DMX512 C程序
#include reg51.h sfr T2CON =0XC8; sfr T2MOD =0XC9; sfr RCAPL2=0XCA; sfr RCAPH2=0XCB; sfr TH2 =0X CC ; sfr TL2 =0XCD; sbit GREEN = P1^0; sbit BLUK = P1^1; sbit YELLOW= P1^2; sbit RED = P1^3; sbit LED = P1^5; bit revfg; unsigned char start,ribit; unsigned char cdata ; void init UART (void) { T2CON=0X34; TH2=0XFF;
[单片机]
51单片机驱动TEA5767调频收音机芯片C程序
完整的源代码下载地址: http://www.51hei.com/bbs/dpj-19294-1.html 下面是程序的主要部分: /*----------- TEA5767 驱动-----------*/ /*------ 外部 晶振 为 12MHz-------*/ /*--------最后修改2011.02.26-------*/ #include STC12C5620AD.H #include IIC.H #include delay.h #include Radio.H #include Channel_Handle.H #define Max_Fre
[单片机]
51单片机驱动TEA5767调频收音机芯片<font color='red'>C程序</font>
PIC16F630流水灯测试C程序
//实验目的:RC0-RC5口的流水灯,熟悉PIC16F630的I/O口的操作 #include PIC.h __CONFIG(0x31b4); //看门狗关;内部RC振荡,RA4/RA5做I/O,MCLR脚做复位 //------------------------------------ //延时函数 void delay() { int i; //定义循环变量 for(i=5000;i 0;i--) //循环次数控制 { NOP(); //消耗一个指令周期时间 NOP(); } } //------------------------------
[单片机]
51单片机ADC0832电压测量液晶1602显示的C程序与proteus仿真
很早对AD转换感兴趣,也想自己业余做块单片机开发板,让广大的电子设计爱好者学习使用单片机。 今天通过搜索,整理了proteus 7可以仿真通过的基于51单片机+ADC0832电压采集并通过液晶1602显示电压的C程序及电路连接图,希望对大家有所帮助。 程序是谁写的谁修改的并不主要,主要的是学会并使用单片机AD转换,这才是王道。 电路连接图如下: C程序如下: #include reg52.h #include intrins.h #include math.h /**********************************8/ /**********LCD1602接口程序*********
[单片机]
51单片机ADC0832电压测量液晶1602显示的<font color='red'>C程序</font>与proteus仿真
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved