• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    技術(shù)熱線: 4007-888-234
    設(shè)計(jì)開(kāi)發(fā)

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    開(kāi)發(fā)工具

    提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

    技術(shù)支持

    從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

    新聞中心

    提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

    PIC16F877 單片機(jī)AD轉(zhuǎn)化的C源程序

    更新時(shí)間: 2019-03-23
    閱讀量:2832

    十年專注單片機(jī)方案開(kāi)發(fā)的方案公司英銳恩,分享PIC16F877 單片機(jī)A/D轉(zhuǎn)化的C的源程序。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類運(yùn)算放大器等。

    6.1  A/D轉(zhuǎn)換的應(yīng)用

    例6.1  A/D轉(zhuǎn)換初始化程序

    //A/D轉(zhuǎn)換初始化子程序

    void        adinitial( )

    {

           ADCON0 = 0x51;        //選擇A/D通道為RA2,打開(kāi)A/D轉(zhuǎn)換器

                                                    //在工作狀態(tài),且使AD轉(zhuǎn)換時(shí)鐘為8tosc

           ADCON1 = 0X80;              //轉(zhuǎn)換結(jié)果右移,及ADRESH寄存器的高6位為"0"

                                          //且把RA2口設(shè)置為模擬量輸入方式

           PIE1 = 0X00;

           PIE2 = 0X00;

           ADIE = 1;                       //A/D轉(zhuǎn)換中斷允許

           PEIE = 1;                            //外圍中斷允許

     TRISA2=1;                       //設(shè)置RA2為輸入方式

    }

     

    6.1.2  程序清單

    下面給出一個(gè)調(diào)試通過(guò)的例程,可作為讀者編制程序的參考。該程序中用共用體的方式把A/D轉(zhuǎn)換的10位結(jié)果組合在一起。有關(guān)共用體的詳細(xì)資料請(qǐng)參考本書相關(guān)章節(jié)。

    # include       

    union             adres

    {int         y1;

    unsigned  char  adre[2];

    }adresult;                                 //定義一個(gè)共用體,用于存放A/D轉(zhuǎn)換的結(jié)果

    unsigned   char i;

    unsigned   int       j;

    //系統(tǒng)各I/O口初始化子程序

    void        initial()

    {

           TRISD=0X00;                   //D口為輸出

           i=0x00;

    }

    //A/D轉(zhuǎn)化初始化子程序

    void        adinitial()

    {

           ADCON0=0x51;                //選擇A/D通道為RA2,打開(kāi)A/D轉(zhuǎn)換器

                                                   //在工作狀態(tài),且使A/D轉(zhuǎn)換時(shí)鐘為8tosc

     ADCON1=0X80;               //轉(zhuǎn)換結(jié)果右移,及ADRESH寄存器的高6位為"0"

                                          //且把RA2口設(shè)置為模擬量輸入方式

           PIE1=0X00;

           PIE2=0X00;

           ADIE=1;                            //A/D轉(zhuǎn)換中斷允許

           PEIE=1;                            //外圍中斷允許

           TRISA2=1;                       //設(shè)置RA2為輸入方式

    }

    //延時(shí)子程序

    void        delay()

    {

           for(j=5535;--j;)       continue;

    }

    //報(bào)警子程序

    void        alarm()

    {

           i=i^0xFF;                            //通過(guò)異或方式每次把i的各位值取反   

           PORTD=i;                         //D口輸出i的值

    }

    //中斷服務(wù)程序

    void        interrupt         adint(void)

    {

           ADIF=0;                            //清除中斷標(biāo)志

     adresult.adre[0]=ADRESL;

           adresult.adre[1]=ADRESH;       //讀取并存儲(chǔ)A/D轉(zhuǎn)換結(jié)果,A/D轉(zhuǎn)換的結(jié)果通過(guò)共

    //用體的形式放入了變量y1中  

           if(adresult.y1>0x200)

           {

           alarm();                                   //如果輸入的模擬量大于2.5V(對(duì)應(yīng)數(shù)字量

                                                     //0X200h),則調(diào)用報(bào)警子程序

           delay();                             //調(diào)用延時(shí)子程序,使電壓檢測(cè)不要過(guò)于頻繁

           }

    else       PORTD=0XF0      ;           //如果輸入的模擬量小于2.5V,則與D口相連的

                                                     //8個(gè)發(fā)光二極管的低4個(gè)發(fā)亮,表示系統(tǒng)正常

           ADGO=1;                         //啟動(dòng)下一次A/D轉(zhuǎn)換

    //主程序

    main()

    {

           adinitial();                            //A/D轉(zhuǎn)換初始化

           initial();                             //系統(tǒng)各I/O口初始化 

           ei();                                  //總中斷允許

           ADGO=1;                         //啟動(dòng)A/D轉(zhuǎn)換

    while(1)

           {

                  ;

           }                                        //等待中斷,在中斷中循環(huán)檢測(cè)外部電壓

    }

     

    6.2.2  I2C總線工作方式相關(guān)子程序

    1.C語(yǔ)言編寫的I2C總線工作方式的初始化子程序

    //I2C初始化子程序

    void        i2cint()

    {

           SSPCON = 0X08;                     //初始化SSPCON寄存器

           TRISC3 =1;                            //設(shè)置SCL為輸入口

           TRISC4 =1;                            //設(shè)置SDA為輸入口

           TRISA4 = 0;

           SSPSTAT=0X80;               //初始化SSPSTAT寄存器

           SSPADD=0X02;               //設(shè)定I2C時(shí)鐘頻率

           SSPCON2=0X00;                    //初始化SSPCON2寄存器

           di();                                  //關(guān)閉總中斷

           SSPIF=0;                         //清SSP中斷標(biāo)志

           RA4=0;                             //關(guān)掉74HC165的移位時(shí)鐘使能,以免74HC165移位

    //數(shù)據(jù)輸出與I2C總線的數(shù)據(jù)線發(fā)生沖突(此操作與該

    //實(shí)驗(yàn)板的特殊結(jié)構(gòu)有關(guān),不是通用的)

           SSPEN=1;                       //SSP模塊使能

    }

     

    2.C語(yǔ)言編寫的I2C總線工作方式傳輸數(shù)據(jù)子程序

    需要發(fā)送的數(shù)據(jù)在寄存器j中。

    //I2C總線輸出數(shù)據(jù)子程序

    i2cout()

    {

           SEN=1;                                   //產(chǎn)生I2C啟動(dòng)信號(hào)

           for(n=0x02;--n;)       continue;//給予一定的延時(shí),保證啟動(dòng)

    do    {

                  RSEN=1;                  //產(chǎn)生I2C重啟動(dòng)信號(hào)

        }while(SSPIF==0);            //等待數(shù)據(jù)發(fā)送完畢

           SSPIF=0;                            //SSPIF標(biāo)志清0

           PEN=1;                                   //產(chǎn)生停止條件

    do    {

                  ;

           }while(SSPIF==0);            //等待停止條件產(chǎn)生

           SSPIF=0;                            //SSPIF標(biāo)志清0

    }

    //主程序

    main ()

    {

           i2cint();                                   //I2C初始化

    while(1){

                  for(i=0x00;i<=127;++i)

                  {    

                         j=table[i];              //從數(shù)組中得到需要傳輸?shù)臄?shù)據(jù)量

                         i2cout();              //利用I2C總線方式送出數(shù)據(jù)

                  }

           }

    }

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>