|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
PIC16f87x 各種子程序(續(xù)1) |
| 作者:小村之戀 欄目:單片機(jī) |
第5章 數(shù)字濾波及控制算法 5.1 平均值濾波 程序清單如下: ;************* AD采樣中斷子程序****************** AD CALL PUSH ;調(diào)PUSH子程序保護(hù)現(xiàn)場(chǎng) BCF PIR1,ADIF ;清AD中標(biāo)志位 BTFSS TEMP,2 ;TEMP=4? GOTO AD1 ;否,采樣周期沒完,求和 CLRF ADH ;是,新的采樣周期開始,清ADH寄存器 CLRF ADL ;清ADL寄存器 MOVF ADRESHL,0 ;AD采樣結(jié)果低8位送W寄存器 ADDWF ADL ;加至ADL寄存器 BTFSC STATUS,C ;有進(jìn)位? INCF ADH ;有,加進(jìn)位位 MOVF ADRESH,0 ;加AD結(jié)果高半字節(jié) ADDWF ADH DECFSZ TEMP ;本次采樣周期結(jié)束? GOTO AD2 MOVLW 0X04 ;是,重新初始化TEMP寄存器 MOVWF TEMP BSF FLAG,1 ;置AD采樣周期結(jié)束標(biāo)志位 CALL POP ;恢復(fù)現(xiàn)場(chǎng) RETFIE ;本次采樣周期結(jié)束,返回 AD2 CALL DELAY ;調(diào)延時(shí)子程序,延時(shí)2μs BSF ADCON0,GO ;開始下一次采樣 CALL POP ;恢復(fù)現(xiàn)場(chǎng) RETFIE ;中斷返回 ;*************中斷保護(hù)現(xiàn)場(chǎng)子程序**************** PUSH MOVWF W_STACK ;暫存W寄存器 MOVF STATUS,0 ;暫存STATUS寄存器 MOVWF ST_STACK BCF STATUS,RP0 ;選擇存儲(chǔ)體0 RETURN ;子程序返回 ;**************中斷恢復(fù)現(xiàn)場(chǎng)子程序*************** POP MOVF ST_STACK,0 ;恢復(fù)STATUS寄存器值 MOVWF STATUS MOVF W_STACK,0 ;恢復(fù)W寄存器值 RETURN ;子程序返回 【例程】 ORG 0X0004 BTFSC PIR1,ADIF ;AD中斷矢量入口 GOTO AD RETFIE ORG 0X0000 MAIN MOVLW 0X01 ;初始化ADCON0寄存器 MOVWF ADCON0 BSF STATUS,RP0 ;選擇BANK1 MOVLW 0XFF ;將RA口設(shè)置成模擬輸入 MOVWF TRISA MOVLW 0XFF ;初始化ADCON1 MOVWF ADCON1 BSF PIE1,ADIE ;開AD中斷 BCF & |
| 2樓: | >>參與討論 |
| 作者: 小村之戀 于 2003/12/30 20:53:00 發(fā)布:
第6章 秒 表 6.2.2 程序清單 該源程序已在實(shí)驗(yàn)板上調(diào)試通過,讀者可直接引用,并可以利用軟件編程的靈活性,加以拓展,實(shí)現(xiàn)更為復(fù)雜的功能。 LIST P=16F877 INCLUDE "P16F877,INC" ;************此程序?qū)崿F(xiàn)計(jì)時(shí)秒表功能****************** ;時(shí)鐘顯示范圍:00.00秒-99.99秒,分辨度:0.01秒;所用的寄存器如下 S0 EQU 0X20 ;0.01 秒計(jì)時(shí)器 S1 EQU S0+1 ;0.1 秒計(jì)時(shí)器 S2 EQU S0+2 ;1 秒計(jì)時(shí)器 S3 EQU S0+3 ;10 秒計(jì)時(shí)器 SREG EQU S0+4 ;軟計(jì)數(shù)器 LEDF EQU S0+5 ;顯示的LED的位置指示寄存器 XW_TEMP EQU S0+6 ;用于中斷中保護(hù)W的值 XHOSTS EQU S0+7 ;用于中斷中保護(hù)STATUS的值 DEYH EQU S0+8 DEYL EQU S0+9 ;以上兩個(gè)寄存器用于軟件延時(shí) HOSTF EQU S0+0A ;用于中斷中保護(hù)FSR的值 ORG 0X00 GOTO MAIN ORG 0X04 GOTO CLKINT ;轉(zhuǎn)向中斷服務(wù)程序 ORG 0X10 ;**************************************** ;數(shù)字到段碼的轉(zhuǎn)換子程序(最好放在程序開頭,避免超過2 KB的空間發(fā)生跨頁讀表) CONVERT ;不帶小數(shù)點(diǎn)的共陽極碼表 …… ;詳細(xì)的程序語句見A/D應(yīng)用章節(jié)的程序清單 CONVERT2 ;帶小數(shù)點(diǎn)的共陽極碼表 …… ;詳細(xì)的程序語句見A/D應(yīng)用章節(jié)的程序清單 TRANSMIT ;SPI發(fā)送顯示子模塊 CLRF PORTA ;LACK送低電平,為鎖存做準(zhǔn)備 MOVWF SSPBUF ;啟動(dòng)發(fā)送 WAIT BANKSEL PIR1 BTFSS PIR1,SSPIF GOTO WAIT ;等待發(fā)送結(jié)束 BCF PIR1,SSPIF ;清除中斷標(biāo)志 NOP RETURN ;***********顯示子程序模塊************ DISPLAY MOVLW 0X01 MOVWF LEDF MOVLW 0XA0 MOVWF FSR AGAINXIAN MOVF LEDF,W SUBLW 0X02 BTFSS STATUS,Z GOTO XIANB MOVF INDF,W CALL CONVERT2 ;若是第二位,則查帶小數(shù)點(diǎn)的碼表 GOTO TRAN XIANB MOVF INDF,W CALL CONVERT TRAN CALL TRANSMIT ;發(fā)送一個(gè)顯示數(shù)據(jù) INCF FSR INCF LEDF MOVF LEDF,W SUBLW 0X05 BTFSS STATUS,Z GOTO AGAINXIAN MOVLW 0X01 MOVWF & |
|
| 3樓: | >>參與討論 |
| 作者: tao2000 于 2004/1/13 10:30:00 發(fā)布:
感激 感謝老大的慷慨大帖,我要頂! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |