新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F877A定時(shí)器的學(xué)習(xí)

        PIC16F877A定時(shí)器的學(xué)習(xí)

        作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
        由于實(shí)時(shí)數(shù)據(jù)的仿真需要用到定時(shí)器產(chǎn)生數(shù)據(jù),今天晚上完成PIC16F877A產(chǎn)生正弦波形,并將波形數(shù)據(jù)發(fā)送到上位機(jī)!

        這是一個(gè)三角波的仿真程序,并通過(guò)串口發(fā)送到上位機(jī)

        本文引用地址:http://www.104case.com/article/201611/317653.htm

        #include
        #include
        #include

        #include "main.h"
        #include "t232.h"
        #include "lcd.h"
        #include "timer.h"

        //define global variable

        bank1 uchar flag =0 ;//利用flag判斷中斷時(shí)間是否到了!
        bank1 char dat[6] ;

        bank2 char str[]="shan dong qing gong ye xue yuan" ;
        bank2 char str1[]="Starting........" ;
        bank2 char str2[]="Capturing......." ;
        bank2 char str3[]="Stop.........." ;
        //bank2 float test = 0;
        //bank2 float t1 ;
        bank2 uchar t1 =0 ;
        bank2 uchar t2=0 ;
        bank1 uchar state = READY ;//當(dāng)前狀態(tài)
        bank1 uchar frame[3] ;//幀緩沖
        bank1 uchar temp ;
        //ms級(jí)延時(shí)程序
        void DelayMS(uint ms){
        uint i;
        while(ms--){
        for(i=0;i<100;i++);
        }
        }

        //10us級(jí)延時(shí)程序
        void Delay10US(uint us){
        uchar i;
        for(i=0;i}
        void interrupt main_int()
        {
        if(RCIE&&RCIF)
        {
        RCIF=0;
        if(OERR)
        {
        CREN=0;
        CREN=1;
        }
        else//不溢出,
        {
        temp=RCREG ;
        //注意這里可以使用簡(jiǎn)單的IF語(yǔ)句,但為了擴(kuò)展幀格式,使用switch語(yǔ)句
        switch(temp)
        {
        case (:
        break ;
        case ):
        break ;
        default:
        state=temp ;
        }
        }
        }
        if(T0IF==1)
        {
        T0IF=0;//must clear zero manually
        flag=1 ;
        }
        }
        void init_all()
        {
        init_232() ;
        init_lcd() ;
        init_timer() ;
        }
        void main()
        {

        init_all() ;

        while(1)
        {
        while((t1>=-20)&&(state==CAPTURE))
        {
        t1++ ;
        sprintf(dat,"(%d)",t1) ;
        send_str(dat) ;
        if(t1==20)
        break ;
        }
        while((t1<=20)&&(state==CAPTURE))
        {
        t1-- ;
        sprintf(dat,"(%d)",t1) ;
        send_str(dat) ;
        if(t1==-20)
        break ;
        }
        switch(state)
        {
        case READY :
        sendcmd(0x01) ;
        sendcmd(0x82) ;
        printlcd(str) ;
        lcd_shift(0,6) ;
        break ;
        case WAIT:
        sendcmd(0x01) ;
        sendcmd(0x82) ;
        printlcd(str1) ;
        break ;
        case CAPTURE:
        sendcmd(0x01) ;
        sendcmd(0x82) ;
        printlcd(str2) ;
        break ;
        case END:
        sendcmd(0x01) ;
        sendcmd(0x80) ;
        printlcd(str3) ;
        delay_long() ;
        break ;
        default:
        break ;
        }
        }


        }



        關(guān)鍵詞: PIC16F877A定時(shí)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 襄垣县| 墨竹工卡县| 西和县| 怀宁县| 高台县| 虞城县| 凤山市| 济阳县| 乌兰县| 射阳县| 南华县| 蒙自县| 内丘县| 镇沅| 肥东县| 淮南市| 蕲春县| 常宁市| 深圳市| 云安县| 策勒县| 忻州市| 万荣县| 方山县| 海兴县| 河间市| 平罗县| 炎陵县| 赣榆县| 锡林郭勒盟| 宝应县| 富平县| 龙泉市| 怀来县| 天门市| 连南| 遂昌县| 崇义县| 济源市| 筠连县| 礼泉县|