




已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
; 以下提供幾個(gè)補(bǔ)充參考程序,都帶有詳細(xì)說明和指令注釋.它們是主從多機(jī)通訊程序,采;用中斷方式寫入EEPROM,直接對(duì)晶振分頻產(chǎn)生0.1秒和秒號(hào)的精確定時(shí)程序,以及RS-232/;RS-485標(biāo)準(zhǔn)轉(zhuǎn)換程序,AVR頻率計(jì)程序,串行時(shí)鍾日歷芯片DS1302讀寫,共享時(shí)基的PWM輸出、;輸入捕獲測(cè)周期程序和定時(shí)信號(hào)獲取,以及DS18B20測(cè)溫等程序.多機(jī)通訊主要用8和9位數(shù);據(jù)模式區(qū)分被選分機(jī)(9位)和其它分機(jī)(8位),達(dá)到主機(jī)只與被選分機(jī)交換數(shù)據(jù)之目的.以中;斷方式寫EEPROM的優(yōu)點(diǎn)是可與系統(tǒng)運(yùn)行同時(shí)進(jìn)行(即在線寫入),占用很少機(jī)時(shí).;精確定時(shí)用定時(shí)/計(jì)數(shù)器1(或0)直接對(duì)MCU主頻(不設(shè)分頻)設(shè)定時(shí)間常數(shù),分頻精度可達(dá)到;1HZ.RS-232/RS-485標(biāo)準(zhǔn)轉(zhuǎn)換程序中AVR不作中轉(zhuǎn),使兩種器件相關(guān)腳位直接連接.以TCNT0;定時(shí),以T0引腳接收RS-232數(shù)據(jù).以收到RS-232字符起始位下跳沿或結(jié)束符($03)為依據(jù),;控制切換RS-485的收發(fā)使能.(系統(tǒng)中的主AVR可兼做對(duì)通信標(biāo)準(zhǔn)之監(jiān)控轉(zhuǎn)換,即只是在完成;主要工作任務(wù)的同時(shí)附帶進(jìn)行).具體過程不再細(xì)述.串行時(shí)鍾日歷芯片DS1302具體積小,;可靠性高,與單片機(jī)連接方便等優(yōu)點(diǎn).; 以下程序請(qǐng)參看有關(guān)章節(jié)或程序中的注釋。 ;范例91 ;多機(jī)通訊主機(jī)程序/晶振4MHZ .ORG 0 ;以8/9位數(shù)據(jù)模式區(qū)分被選/未被選分機(jī)通訊.EQU DTPINT=$180 ;UBRR=12 波特率19200(REL.ERR.=0.16%).EQU DRPINT=$1C0 ;主機(jī)對(duì)1#,2#,3#,4#分機(jī)發(fā)送數(shù)據(jù)塊在$180-18F,$190-19F,$1A0-1AF)和$1B0-1BFSTRT38: RJMP RST38 ;主機(jī)從1#,2#,3#,4#分機(jī)接收數(shù)據(jù)塊在$1C0-1CF,$1D0-1DF,$1E0-1EF)和$1F0-1FF .ORG $00B ; RJMP STRT38 .ORG $00C RJMP STRT38 ;主機(jī)不設(shè)串口中斷,只以查詢接收 .ORG $011RST38: LDI R16,12 OUT UBRR,R16 ;設(shè)波特率:BAUD RATE=FCP/16(UBRR+1) CLR R15 ;初始化分機(jī)號(hào) LDI R27,HIGH(DTPINT) LDI R26,LOW(DTPINT);發(fā)送數(shù)據(jù)指針(首指$180) LDI R29,HIGH(DRPINT) LDI R28,LOW(DRPINT);接收數(shù)據(jù)指針(首指$1C0)NEXTNO: LDI R16,$18 OUT UCR,R16 ;允許UART接收和發(fā)送,8位數(shù)據(jù)模式 INC R15 ;指向1#分機(jī)OUTLP: OUT UDR,R15 ;呼分機(jī)號(hào),1:1#/2:2#/03:3#/04:4#.TSLOP: IN R16,USR SBRS R16,7 RJMP TSLOP ;分機(jī)返回機(jī)號(hào)? IN R16,UDR CP R16,R15 ;分機(jī)號(hào)正確返回? BRNE OUTLP LDI R16,$1C ;改為9位數(shù)據(jù)模式 TXB8=0 OUT UCR,R16 ;TXLOP: LD R16,X+ OUT UDR,R16 ;向分機(jī)發(fā)送數(shù)據(jù)塊TESTL: IN R17,USR SBRS R17,5 RJMP TESTL ;等待發(fā)送完成 CPI R16,$0A BRNE TXLOP ;RXTST: IN R17,USR SBRS R17,7 ;RXC=1 收到數(shù)據(jù) RJMP RXTST ;等待接收分機(jī)返回?cái)?shù)據(jù)塊 IN R16,UDR ST Y+,R16 ;存儲(chǔ)接收數(shù)據(jù) CPI R16,$0A ;分機(jī)數(shù)據(jù)塊發(fā)完? BRNE RXTST MOV R16,R15 CPI R16,4 ;與分機(jī)輪詢通訊完畢? BRNE NEXTNO ;未完轉(zhuǎn)對(duì)下一分機(jī)通信HH38: RJMP HH38 ;否則踏步(可改為處理分機(jī)返回的數(shù)據(jù),之后再進(jìn)行下一個(gè)輪詢) .DSEG .ORG $180DTPINT:.BYTE $40 ;$41 $45 $65 $73 $46 $42 $40 $6F $33 $44 $66 $5C $4D $4B $0D $0A ;$42 $4F $66 $78 $47 $45 $44 $63 $32 $48 $60 $7C $6D $45 $0D $0A ;$43 $56 $55 $53 $4D $4F $40 $2E $31 $42 $67 $4C $47 $4A $0D $0A ;$45 $54 $59 $63 $3D $4B $48 $2F $35 $48 $69 $3C $77 $43 $0D $0A .ORG $1C0DRPINT:.BYTE $40;范例92 .ORG 0 ;多機(jī)通訊1#分機(jī)程序/晶振4MHZ.EQU DTPIT1=$180 ;(UBRR)=12 波特率為19200(REL.ERR.=0.16%).EQU DRPNT1=$1C0STRT39: RJMP RST39 .ORG $00B RJMP UARXC ;8535UART接收完成中斷 .ORG $00C RJMP UATXC ;UART發(fā)送完成中斷 .ORG $011RST39: CLR R18 ;清除分機(jī)被選中(R18,6)和主機(jī)數(shù)據(jù)塊接收完畢標(biāo)志(R18,7) LDI R16,12 OUT UBRR,R16 ;設(shè)波特率BAUD RATE=4000000/16*(12+1)=19200 LDI R16,HIGH(DRPNT1) MOV R8,R16 LDI R16,LOW(DRPNT1) MOV R9,R16 ;r8,r9:接收數(shù)據(jù)指針(FIRST POINT TO $1C0) LDI R16,$98 ;允許UART中斷接收,8位數(shù)據(jù)模式 OUT UCR,R16 SEIRXDTS: SBRS R18,6 ;主機(jī)呼號(hào)已收到(若收到,在R17中)? RJMP RXDTS OUT UDR,R17 ;返還該機(jī)號(hào)TXDON: IN R16,USR SBRS R16,5 RJMP TXDON ;該機(jī)號(hào)發(fā)送完成? LDI R16,$9C ; 允許UART中斷接收,9位數(shù)據(jù)模式,TXB8=0 OUT UCR,R16 RCVBLK: SBRS R18,7 RJMP RCVBLK ;主機(jī)發(fā)來數(shù)據(jù)塊已接收完畢? LDI R16,HIGH(DTPIT1) MOV R6,R16 LDI R16,LOW(DTPIT1) MOV R7,R16 ;設(shè)發(fā)送數(shù)據(jù)指針r6r7,首指$180 LDI R16,$3C ;允許UART中斷發(fā)送,9位數(shù)據(jù)模式,TXB8=0 OUT UCR,R16TXDN: SBIC UCR,5 RJMP TXDN ;發(fā)送完畢? RJMP RST39 ; :UART中斷接收程序UARXC: SBIC USR,4 RETI ;禎錯(cuò)誤(主機(jī)正與其它分機(jī)進(jìn)行9位數(shù)據(jù)模式通信),不予接收 IN R14,SREG ;保存當(dāng)前狀態(tài) TST R18 BREQ NUMB ;(R18)=0時(shí)收到數(shù)據(jù),只可能是機(jī)號(hào),轉(zhuǎn)去核實(shí) PUSH R16 ;否則為主機(jī)向本分機(jī)發(fā)來數(shù)據(jù)塊(9位模式,機(jī)號(hào)已符合) PUSH R26 PUSH R27 IN R17,UDR ;接收數(shù)據(jù) MOV XH,R8 MOV XL,R9 ;取接收數(shù)據(jù)指針 ST X+,R17 ;轉(zhuǎn)入RAM MOV R8,XH MOV R9,XL ;存數(shù)據(jù)指針 CPI R17,$0A ;是數(shù)據(jù)塊結(jié)束符LF? BRNE RSCOM1 SBR R18,$80 ;收到完整數(shù)據(jù)塊標(biāo)志RSCOM1: POP R27 POP R26 POP R16DRETI: OUT SREG,R14 RETINUMB: IN R17,UDR ;取出數(shù)據(jù) CPI R17,1 ;是1#分機(jī)?2#分機(jī)與$02比較/3#分機(jī)與$03比較. BRNE DRETI ;機(jī)號(hào)不符合,轉(zhuǎn)! SBR R18,$40 ;建機(jī)號(hào)符合標(biāo)志 RJMP DRETI; UART中斷發(fā)送程序UATXC: PUSH R16 ;r6 r7:發(fā)送數(shù)據(jù)指針,首指$180 IN R16,SREG PUSH R16 PUSH R26 PUSH R27 MOV XH,R6 MOV XL,R7 ;取出發(fā)送指針 LD R16,X+ ;取數(shù)據(jù),調(diào)指針 MOV R6,XH MOV R7,XL OUT UDR,R16 ;送入發(fā)送寄存器 CPI R16,$0A BRNE SDCOM CBI UCR,5 ;發(fā)送最后1個(gè)字符后,禁止發(fā)送寄存器空中斷(CLR UDRIE) LDI R16,HIGH(DRPINT) MOV R8,R16 LDI R16,LOW(DRPINT) MOV R9,R16 ;接收數(shù)據(jù)指針初始化(POINT TO $1C0)SDCOM: POP R27 POP R26 POP R16 OUT SREG,R16 POP R16 RETI .DSEG .ORG $180DTPIT1:.BYTE $40 .ORG $1C0DRPNT1:.BYTE $10 ;$41 $45 $65 $73 $46 $42 $40 $6F $33 $44 $66 $5C $4D $4B $0D $0A;范例93 ;以中斷方式寫入EEPROM(僅對(duì)8535,8515無此功能),克服查詢方式占用過多機(jī)時(shí)的缺點(diǎn), ;并可在線寫入 ;運(yùn)作過程特點(diǎn)如下: ;(1)主程序初始化時(shí)設(shè)置EEPROM就緒(ready)中斷使能位和中斷總使能位 ;(2)在主程序中寫入第一個(gè)字節(jié),寫入完成后引起就緒中斷,其他寫入在中斷服務(wù)中完成 ;(3)本程序?yàn)橐粚懭胩乩瑢懭氲刂窞?100-$1FF,可作適當(dāng)修改(如設(shè)塊長計(jì)數(shù)器等) ;(4)為防止高優(yōu)先級(jí)中斷破壞寫入過程,中斷服務(wù)中不允許中斷嵌套 ;(5)本例為簡化程序只以查詢寫入地址循環(huán)作為背景程序,實(shí)用時(shí)可改為具體的背景序 ;(6)如能確信當(dāng)前系統(tǒng)沒有EEPROM正在寫入,可刪除對(duì)其進(jìn)行查詢部分.STWEEP: LDI R16,HIGH(ramend) OUT SPH,R16 LDI R16,LOW(ramend) OUT SPL,R16 SBI EECR,3 ;設(shè)置EEPROM就緒(ready)中斷使能位 SEI ;中斷總使能 RJMP SRTW .ORG $00F RJMP EEPRDY ;8535 EEPROM就緒(ready)中斷向量SRTW: LDI YH,1 LDI YL 0 ;EEPROM 寫入首地址:$100 LDI XL,$60 ;欲寫入數(shù)據(jù)塊首地址:$60 CLR XHWEEP0: SBIC EECR,1 ;當(dāng)前有EEPROM寫入操作,有則等待寫入完成 RJMP WEEP0 RCALL WREEP ;寫入第一個(gè)字節(jié),($60)-$100,寫入完成后,EEWE=0時(shí)引發(fā)EEPROM就緒中斷 INC YL ;調(diào)整寫入地址指針HHWEEP: TST YL BRNE HHWEEP CPI YH,2 ;寫入地址達(dá)到$200后,寫入完成 BRNE HHWEEP CBI EECR,3 ;禁止EEPROM就緒(ready)中斷WDON: RJMP WDON ;踏步EEPRDY: IN R6,SREG PUSH R16 RCALL WREEP ;寫入一個(gè)字節(jié) INC YL BRNE WRETI INC YH ;EEPROM末地址為$1FFWRETI: POP R16 OUT SREG,R6 RETIWREEP: OUT EEARH,YH ; OUT EEARL,YL ;寫入地址送入EEAR LD R16,X+ ;取數(shù)據(jù),調(diào)指針 OUT EEDR,R16 ;數(shù)據(jù)寫入EEPROM數(shù)據(jù)寄存器 SBI EECR,2 ;設(shè)置EEPROM寫入總使能位EEMWE SBI EECR,1 ;設(shè)置EEPROM寫入使能位EEWE RET;范例94 ;精確定時(shí)產(chǎn)生0.1秒信號(hào) ;用定時(shí)/計(jì)數(shù)器1定時(shí),不分頻定出0.1秒信號(hào),由PC5腳輸出正脈沖。 ;晶體4.000119MHZ,計(jì)400012個(gè)數(shù)定出0.1秒信號(hào) ;對(duì)定時(shí)/計(jì)數(shù)器1重裝常數(shù)進(jìn)行加法補(bǔ)償(扣除自然計(jì)數(shù)和補(bǔ)償占用時(shí)間). ;加法補(bǔ)償若產(chǎn)生進(jìn)位,將中斷次數(shù)減1 .ORG $000 ;精確定時(shí)產(chǎn)生0.1秒信號(hào)STRT24: RJMP RST24 .ORG $006 ;8515 t1 overflow vector RJMP T1_OVFL ;400012=65536*7-58740=7*$10000-$E574/故TCC=$E574 .ORG $00D RST24: LDI R16,HIGH(ramend) OUT SPH,R16 LDI R16,LOW(ramend) OUT SPL,R16 SBI DDRC,5 ;PC5,0.1秒號(hào)輸出(高有效) CBI PORTC,5 LDI R16,1 ;不分頻 OUT TCCR1B,R16 LDI R16,$E5 OUT TCNT1H,R16 LDI R16,$74 OUT TCNT1L,R16 ;寫入時(shí)間常數(shù)TCC LDI R16,$80 OUT TIMSK,R16 ;允許定時(shí)/計(jì)數(shù)器1溢出中斷 LDI R16,7 ;7次中斷輸出0.1秒號(hào) MOV R6,R16 SEI ;中斷總使能HH1A: RJMP HH1A ;T1_OVFL:PUSH R16 PUSH R17 IN R7,SREG DEC R6 ;中斷次數(shù)減一 BRNE GOON10 ;0.1秒時(shí)間到? LDI R16,7 MOV R6,R16 ;重新裝入中斷次數(shù) SBI PORTC,5 ;0.1秒號(hào)輸出前沿 IN R17,TCNT1L ;* IN R16,TCNT1H ;*讀入TCNT1自然計(jì)數(shù)值 LDI R18,$7C ;*TCC=$E574 ADD R17,R18 ;*TCC+8=$E57C LDI R18,$E5 ;*8條單周期補(bǔ)償指令占用8個(gè)時(shí)鐘周期 ADC R16,R18 ;*修正后TCC=$E574+(TCNT1)+8 OUT TCNT1H,R16 ;* OUT TCNT1L,R17 ;*重新裝入補(bǔ)償修正后的TCC BRCC GOON09 DEC R6 ;加法補(bǔ)償若產(chǎn)生進(jìn)位,將中斷次數(shù)減1GOON09: ;. ;數(shù)據(jù)處理略 ;. ;. ;. ;. RCALL ACLK1 ;0.1秒走時(shí)軟時(shí)鐘 RJMP GOON11GOON10: CBI PORTC,5 ;輸出信號(hào)后沿GOON11: POP R17 POP R16 OUT SREG,R7RETI;范例95 ;用定時(shí)/計(jì)數(shù)器1定時(shí),不分頻定出1秒信號(hào),由PC5腳輸出正脈沖 ;晶體4.000133MHZ,計(jì)4000133個(gè)數(shù)定出1秒信號(hào) ;對(duì)定時(shí)/計(jì)數(shù)器1重裝常數(shù)進(jìn)行加法補(bǔ)償(扣除自然計(jì)數(shù)和補(bǔ)償占用時(shí)間). ;加法補(bǔ)償若產(chǎn)生進(jìn)位,將中斷次數(shù)減1 .ORG $000 ;精確定時(shí)產(chǎn)生秒號(hào) STRT25: RJMP RST25 .ORG $006 RJMP T1_OVFB ;4000133=62*65536-63099=62*$10000-$F67B/故TCC=$F67B .ORG $00D RST25: LDI R16,HIGH(ramend) OUT SPH,R16 LDI R16,LOW(ramend) OUT SPL,R16 SBI DDRC,5 ;PC5輸出秒信號(hào)(正脈沖) CBI PORTC,5 LDI R16,1 ;不分頻 OUT TCCR1B,R16 LDI R16,$F6 ; OUT TCNT1H,R16 ;寫入TCC高8位 LDI R16,$7B ; OUT TCNT1L,R16 ;寫入TCC低8位 LDI R16,$80 ; OUT TIMSK,R16 ;允許T/C1溢出中斷 LDI R16,62 ;62次中斷定出秒號(hào) MOV R6,R16 SEI ;HH1B: RJMP HH1B ;等待中斷T1_OVFB:PUSH R16 PUSH R17 IN R7,SREG DEC R6 ;到62次中斷? BRNE GOON12 LDI R17,62 MOV R6,R17 ;重裝中斷次數(shù) SBI PORTC,5 ;輸出秒信號(hào) IN R17,TCNT1L ;* IN R16,TCNT1H ;*讀入T/C1自然計(jì)數(shù)值 LDI R18,$83 ;*TCC=$F67B ADD R17,R18 ;*TCC+8=$F683 LDI R18,$F6 ;*8條單周期補(bǔ)償指令占用8個(gè)時(shí)鐘周期 ADC R16,R18 ;* OUT TCNT1H,R16 ;* OUT TCNT1L,R17 ;*重新裝入補(bǔ)償修正后的TCC BRCC GOON19 DEC R6 ;加法補(bǔ)償若產(chǎn)生進(jìn)位,將中斷次數(shù)減1GOON19: ;. ;數(shù)據(jù)處理略 ;. ;. ;. ;. RJMP GOON13GOON12: CBI PORTC,5 ;秒號(hào)后沿GOON13: POP R17 POP R16 OUT SREG,R7RETI ;范例96;運(yùn)作特點(diǎn)如下:;此程序?yàn)橐煌暾l率測(cè)量顯示程序,所測(cè)頻率較高(2MHZ),使用4兆晶振;程序兼有啟動(dòng)看門狗及對(duì)其管理功能;以TCNT0精確定時(shí)輸出秒號(hào)作為捕獲信號(hào),用TCNT1對(duì)被測(cè)信號(hào)頻率計(jì)數(shù);用TCNT0直接對(duì)(8515)4兆晶振計(jì)數(shù)產(chǎn)生秒號(hào),定時(shí)精度達(dá)1Hz 主常數(shù)選為256(即0);由PA0輸出精確定時(shí)產(chǎn)生的秒信號(hào)(與ICP腳相連)捕獲TCNT1計(jì)數(shù)值,相減計(jì)算頻率;將頻率轉(zhuǎn)換為十進(jìn)制數(shù),裝入顯示緩存區(qū),調(diào)DSPA子程序顯示之(參考范例27和圖4-5);重裝TCC時(shí)對(duì)TCC進(jìn)行修正,若修正(減法)計(jì)算不產(chǎn)生借位,將中斷次數(shù)n減1;被測(cè)頻率可近2兆,故須設(shè)1字節(jié)擴(kuò)展計(jì)數(shù)器,以tcnt1溢出中斷對(duì)其計(jì)數(shù)(共3字節(jié)計(jì)數(shù)器);在TCNT1捕獲中斷服務(wù)中,以3字節(jié)減法計(jì)算頻率,并置位T標(biāo)志;若TCNT1溢出標(biāo)志置位;必須提前增1擴(kuò)展計(jì)數(shù)器,并將TCNT1溢出標(biāo)志清除(不再增1擴(kuò)展計(jì)數(shù)器),再計(jì)算頻率.;TCNT1溢出中斷優(yōu)先級(jí)高于TCNT0,故TCNT1中斷服務(wù)可能影響秒號(hào)精度,導(dǎo)致測(cè)量誤差;可以排隊(duì)法剔除壞值,即將幾個(gè)連續(xù)采樣按大小順序排隊(duì),掐頭去尾只留中間再作平均.;也可以監(jiān)視LED顯示,連續(xù)3秒穩(wěn)定顯示(高頻測(cè)量允許有2Hz誤差)即為所測(cè)頻率正確值.;若晶振采用12兆,被測(cè)信號(hào)頻率(暫空比1:1或接近1:1)可接近6兆. .ORG $000 STRT26: RJMP RST26 ;實(shí)測(cè)8515晶振頻率4.000167MHZ 計(jì)4000167個(gè)數(shù)為1秒 .ORG $003 RJMP T1_CAPT ;T/C1捕獲中斷 .ORG $006 RJMP T1_OVRF ;T/C1溢出中斷 .ORG $007 RJMP T0_OVFB ;T/C0溢出中斷 .ORG $00D ;4000167=256*15626-89=256*$3D0A-89/故TCC=89 n=15626RST26: LDI R16,HIGH(ramend) OUT SPH,R16 LDI R16,LOW(ramend) OUT SPL,R16 SBI DDRA,0 ;PA0輸出秒定時(shí)信號(hào),捕獲頻率計(jì)數(shù)值 CBI PORTA,0 ;初始為低 CLR R22 CLR R21 CLR R20 ;R20,R21,R22為頻率量瞬時(shí)計(jì)數(shù)采樣 CLR R2 WDR LDI R16,$0D ;啟動(dòng)看門狗,溢出時(shí)間為0.49 OUT WDTCR,R16 ;寫入看門狗控制寄存器 CLR XH LDI XL,$6C ;set the display buffer pointerT26LP: ST X+,R2 CPI R26,$74 BRNE T26LP ;清除$6C-$73 LDI R16,$01 ;T/C0為定時(shí)器,不分頻 OUT TCCR0,R16 LDI R16,89 ; OUT TCNT0,R16 ;寫TCC到TCNT0 LDI R16,$C6 ;上升沿捕獲,允許噪音濾除,外部脈沖計(jì)數(shù) OUT TCCR1B,R16 LDI R16,$8A ;允許T/C1捕獲,溢出以及T/C0溢出中斷 OUT TIMSK,R16 ; LDI R16,$3E ;設(shè)15626(=$3D0A)次中斷(高位字節(jié)已增1) MOV R1,R16 ; MOV R19,$0A ; SEI ;HH1C: BRTS HH2C ;已采集到頻率? RCALL DSPA ;仍顯示原數(shù)據(jù) RJMP HH1C HH2C: CLT ;頻率量已在R3,R4,R5 MOV R9,R3 MOV R10,R4 MOV R11,R5 RCALL CONV1 ;翻為十進(jìn)制數(shù)(R12R13R14R15252 253 254 255 | 0 1 2 3 4 5.加法計(jì)數(shù)方向-GOON13: POP R16 ; | | | | | | | | | | | OUT SREG,R8 ;| RETIT1_OVRF:IN R18,SREG ;TCNT1溢出中斷服務(wù) INC R3 ;R3為TCNT1擴(kuò)展字節(jié) OUT SREG,R18 RETIT1_CAPT:IN R6,SREG ;T/C1捕獲中斷 PUSH R16 IN R5,ICR1L IN R4,ICR1H MOV R16,R22 MOV R22,R5 SUB R5,R16 MOV R16,R21 MOV R21,R4 ;與上一次采集的頻率量相減,得到頻率值 SBC R4,R16 IN R16,TIFR SBRS R16,7 RJMP T1CP1 INC R3 ;8515TCNT1溢出中斷,預(yù)先對(duì)擴(kuò)展字節(jié)計(jì)數(shù) LDI R16,$80 ;并將溢出標(biāo)志清除,(中斷返回后不再計(jì)數(shù)) OUT TIFR,R16 ;清除TIFR,7T1CP1: MOV R16,R20 MOV R20,R3 SBC R3,R16 ;采集頻率量在R3,R4,R5 SET ;建采集頻率量標(biāo)志 POP R16 OUT SREG,R6 RETI;范例97 ; 本時(shí)基資源共享式綜合測(cè)量系統(tǒng),具有精確定時(shí)PWM輸出、輸入捕獲測(cè)外部信號(hào);周期、獲取TCNT1溢出中斷信號(hào)等多種功能。特點(diǎn)是TCNT1啟動(dòng)之后即不停運(yùn)行。; 時(shí)基資源共享式PWM的特點(diǎn)在于裝入比較匹配寄存器之?dāng)?shù)據(jù)方式,它不是在比較;匹配達(dá)到時(shí)清除定時(shí)/計(jì)數(shù)器,再裝入高(或低)電平時(shí)間常數(shù):而是當(dāng)比較匹配;達(dá)到時(shí)以定時(shí)/計(jì)數(shù)器當(dāng)前值加上時(shí)間常數(shù)后將和裝入比較匹配寄存器,二者效果;是相同的。可稱前者為靜態(tài)設(shè)置,后者為動(dòng)態(tài)設(shè)置。后者因不停運(yùn)行定時(shí)/計(jì)數(shù)器;,其資源可同時(shí)用于輸出比較匹配A及B、輸入捕獲、定時(shí)信號(hào)輸出等等。; 本程序使用晶體標(biāo)稱值4MHZ實(shí)測(cè)為4,000,236HZ。使用定時(shí)/計(jì)數(shù)器1直接;對(duì)主頻精確定時(shí)設(shè)定PWM高低電平的維持時(shí)間。以ICP腳輸入被測(cè)周期脈沖信號(hào)。; 本程序PWM之暫空比與范例51相同,為5毫秒(高):10毫秒。故維持;高電平的時(shí)間常數(shù)為4,000,236200=20,001,維持低電平的時(shí)間常數(shù)為;4,000,236100=40,002。此即輸出比較匹配A達(dá)到時(shí)交替寫入比較匹配寄;存器OCR1A之對(duì)TCNT1當(dāng)前內(nèi)容的超前值。; 因以TCNT1直接對(duì)主頻計(jì)數(shù),頻率高周期短,輸入捕獲的外部信號(hào)周期不能;大于655364,000,236=0.01638(秒)即16.38毫秒(但也不能太小,對(duì)頻率;較高的脈沖信號(hào)應(yīng)改為測(cè)頻率)。以相鄰兩次捕獲值相減之差除以主頻得到被測(cè)信;號(hào)之周期(單位為秒)。; 為避免小數(shù)除法運(yùn)算,可將相鄰兩次捕獲值相減之差先乘以1,000,再將乘積;除以主頻,將得到以毫秒為單位的周期值;考慮到除法子程序DIV16只實(shí)現(xiàn)整數(shù);除法,且除數(shù)不能大于65535,可將主頻縮小100倍,即以40,002作除數(shù),故;除得之商擴(kuò)大了100倍。這樣將整數(shù)商二翻十后,其末兩位皆為小數(shù)。本程序采用;這種計(jì)算方法。并在主循環(huán)程序中調(diào)DSPA子程序顯示所測(cè)周期值。; 若將以上算法中乘以1,000改為乘以10,000,并增加對(duì)商的萬位轉(zhuǎn)換,;其余保留不變,則所得商數(shù)末3位皆為小數(shù)位。本算法精度高于上一種方法,如有;提高測(cè)量精度之必要,應(yīng)采用后種算法。; 若擴(kuò)大測(cè)量信號(hào)周期,應(yīng)對(duì)TCNT1溢出信號(hào)計(jì)數(shù),做3字節(jié)減法(見范例96);后再計(jì)算被測(cè)信號(hào)周期(除以4,000,236)。所測(cè)信號(hào)周期可達(dá)4.194秒。; 本示例定時(shí)精度可與范例51做如下比較:本例中高低電平分別對(duì)主頻計(jì)數(shù);20,001個(gè)和40,002個(gè)。范例51中高低電平分別對(duì)主頻計(jì)數(shù)19,968個(gè)和;40,000個(gè)。本示例定時(shí)精度明顯高于范例51。; 本示例TCNT1產(chǎn)生溢出中斷之周期為16.38毫秒,其頻率約為61HZ。在TCNT1;溢出中斷服務(wù)子程序中由PA3以正脈沖形式輸出該信號(hào)。 .ORG $000 ;USE 8535STRT43: RJMP RST43 ;5.0000MS(高):9.9999MS(低) 晶振4,OOO,236HZ .ORG $005 RJMP T1_CP43 ;T/C1輸入捕獲中斷 .ORG $006 RJMP T1_CA43 ;T/C1輸出比較匹配A中斷 .ORG $008 RJMP T1_OV43 ;TCNT1溢出中斷 .ORG $011RST43: LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16 LDI R16,$80 ;T/C1比較匹配A達(dá)到時(shí),清除輸出腳OC1A OUT TCCR1A,R16 LDI R16,$41 ;不分頻,比較匹配達(dá)到不清TCNT1;上升沿捕獲/禁止噪音濾除 OUT TCCR1B,R16 SBI DDRD,5 SBI PORTD,5 ;PD5(OC1A)初始化輸出為高 SBI DDRA,3 ;PA3為TCNT1溢出中斷信號(hào)輸出 CBI PORTA,3 ;PA3輸出為低 LDI R16,$4E OUT OCR1AH,R16 LDI R16,$21 ;寫比較匹配寄存器($4E21=20001脈寬5毫秒) OUT OCR1AL,R16 LDI R16,$34 ;允許輸入捕獲/輸出比較匹配A/TCNT1溢出中斷 OUT TIMSK,R16 CLR R21 CLR R20 ;捕獲值暫存單元 CLR XH LDI XL,$6CCLR43: ST X+,R20 CPI XL,$74 BRNE CLR43 ;清除顯示區(qū)$6C-$73 SEIHH43: RCALL DSPA ;背景程序:顯示捕獲頻率信號(hào)之周期,單位:毫秒 BRTC HH43 RCALL FIL2 ;T=1,已捕獲到數(shù)據(jù)在R4,R5/先關(guān)顯示 CLT MOV R14,R4 MOV R15,R5 LDI R16,3 MOV R12,R16 LDI R16,$E8 ;取立即數(shù)1000(=$3E8) MOV R13,R16 RCALL MUL16 ;乘以1000 LDI R16,$9C ;使周期單位為毫秒 MOV R10,R16 LDI R16,$42 ;$9C42=40002 MOV R11,R16 RCALL DIV16 ;除以立即數(shù)40002,得到被測(cè)脈沖周期之單位為毫秒,且含因子100 MOV R16,R14 MOV R17,R15 LDI R18,3 LDI R19,$E8 RCALL CONVT ;二翻十,得千位 STS $70,R11 ;送入顯示區(qū) CLR R18 LDI R19,$64 RCALL CONVT ;二翻十,得百位 LDI R19,-$29 ;在百位處加小數(shù)點(diǎn)(百位實(shí)為個(gè)位) SUB R11,R19 STS $71,R11 ;送入顯示區(qū) LDI R19,10 RCALL CONVT ;二翻十,得十位 STS $72,R11 STS $73,R17 ;小數(shù)送入顯示區(qū) RJMP HH43 ;轉(zhuǎn)去顯示新采樣數(shù)據(jù)CONVT: CLR R11COVLOP:SUB R17,R19 SBC R16,R18 ;減去十進(jìn)制數(shù)某位之權(quán) BRCS CONVCM INC R11 ;夠減,增權(quán) RJMP COVLOPCONVCM:ADD R17,R19 ;否則恢復(fù)余數(shù) ADC R16,R18 RETT1_CA43:SEI IN R1,SREG IN R24,TCCR1A SBRS R24,6 RJMP OUTLW ;當(dāng)前輸出低電平,轉(zhuǎn) IN R24,OCR1AL IN R25,OCR1AH SUBI R24,$DF ;LOW(-20001) SBCI R25,$B1 ;HIGH(-20001)/$B1DF為20,001之補(bǔ)碼 OUT OCR1AH,R25 OUT OCR1AL,R24 ;寫入高電平維持時(shí)間超前值 LDI R24,$80 ;比較匹配A達(dá)到時(shí),OC1A輸出為低 OUT TCCR1A,R24 OUT SREG,R1 RETIOUTLW: IN R24,OCR1AL IN R25,OCR1AH SUBI R24,$BE ;LOW(-40002) SBCI R25,$63 ;HIGH(-40002)/$63BE為40,002之補(bǔ)碼 OUT OCR1AH,R25 ; OUT OCR1AL,R24 ;寫入低電平維持時(shí)間超前值 LDI R24,$C0 ;比較匹配A達(dá)到時(shí),OC1A輸出為高 OUT TCCR1A,R24 OUT SREG,R1 RETIT1_CP43:IN R3,SREG ;T/C1捕獲中斷 IN R5,ICR1L IN R4,ICR1H MOV R17,R21 MOV R21,R5 SUB R5,R17 MOV R17,R20 MOV R20,R4 ;與上一次采集的頻率量相減,得到頻率值 SBC R4,R17 ;在R4,R5中 SET ;建采集頻
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軟件設(shè)計(jì)師考試態(tài)度與方法試題及答案
- 未來職場需求軟件設(shè)計(jì)師考試試題及答案
- 風(fēng)險(xiǎn)管理中的溝通策略及其優(yōu)化試題及答案
- 如何高效準(zhǔn)備法學(xué)概論考試試題及答案
- 2025年計(jì)算機(jī)考試的題型演練試題及答案
- 網(wǎng)絡(luò)安全防護(hù)技術(shù)試題及答案
- 法學(xué)概論的法律文化價(jià)值觀及試題及答案探尋
- 法學(xué)概論重要概念的理解與運(yùn)用試題及答案
- 法學(xué)概論與性別平等的法律探討試題及答案
- 2025年環(huán)境變化與戰(zhàn)略應(yīng)變?cè)囶}及答案
- DCF-現(xiàn)金流貼現(xiàn)模型-Excel模版(dcf-估值模型)
- 甘肅敦煌莫高窟簡介
- 鐵皮石斛的抗氧化、保濕功效研究和應(yīng)用現(xiàn)狀
- GB/Z 18620.4-2008圓柱齒輪檢驗(yàn)實(shí)施規(guī)范第4部分:表面結(jié)構(gòu)和輪齒接觸斑點(diǎn)的檢驗(yàn)
- GB/T 1839-2008鋼產(chǎn)品鍍鋅層質(zhì)量試驗(yàn)方法
- 制冷空調(diào)管件的焊接與質(zhì)量控制
- 公路工程工作總結(jié)范文
- 課件:第七章 社會(huì)工作項(xiàng)目結(jié)項(xiàng)(《社會(huì)工作項(xiàng)目策劃與評(píng)估》課程)
- 大型火力發(fā)電廠汽輪機(jī)知識(shí)資料培訓(xùn)課件
- 陜旅版六年級(jí)下冊(cè)英語知識(shí)點(diǎn)總結(jié)V
- 中債收益率曲線和中債估值的編制與應(yīng)用課件
評(píng)論
0/150
提交評(píng)論