




已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
; 以下提供幾個補充參考程序,都帶有詳細說明和指令注釋.它們是主從多機通訊程序,采;用中斷方式寫入EEPROM,直接對晶振分頻產(chǎn)生0.1秒和秒號的精確定時程序,以及RS-232/;RS-485標準轉(zhuǎn)換程序,AVR頻率計程序,串行時鍾日歷芯片DS1302讀寫,共享時基的PWM輸出、;輸入捕獲測周期程序和定時信號獲取,以及DS18B20測溫等程序.多機通訊主要用8和9位數(shù);據(jù)模式區(qū)分被選分機(9位)和其它分機(8位),達到主機只與被選分機交換數(shù)據(jù)之目的.以中;斷方式寫EEPROM的優(yōu)點是可與系統(tǒng)運行同時進行(即在線寫入),占用很少機時.;精確定時用定時/計數(shù)器1(或0)直接對MCU主頻(不設(shè)分頻)設(shè)定時間常數(shù),分頻精度可達到;1HZ.RS-232/RS-485標準轉(zhuǎn)換程序中AVR不作中轉(zhuǎn),使兩種器件相關(guān)腳位直接連接.以TCNT0;定時,以T0引腳接收RS-232數(shù)據(jù).以收到RS-232字符起始位下跳沿或結(jié)束符($03)為依據(jù),;控制切換RS-485的收發(fā)使能.(系統(tǒng)中的主AVR可兼做對通信標準之監(jiān)控轉(zhuǎn)換,即只是在完成;主要工作任務(wù)的同時附帶進行).具體過程不再細述.串行時鍾日歷芯片DS1302具體積小,;可靠性高,與單片機連接方便等優(yōu)點.; 以下程序請參看有關(guān)章節(jié)或程序中的注釋。 ;范例91 ;多機通訊主機程序/晶振4MHZ .ORG 0 ;以8/9位數(shù)據(jù)模式區(qū)分被選/未被選分機通訊.EQU DTPINT=$180 ;UBRR=12 波特率19200(REL.ERR.=0.16%).EQU DRPINT=$1C0 ;主機對1#,2#,3#,4#分機發(fā)送數(shù)據(jù)塊在$180-18F,$190-19F,$1A0-1AF)和$1B0-1BFSTRT38: RJMP RST38 ;主機從1#,2#,3#,4#分機接收數(shù)據(jù)塊在$1C0-1CF,$1D0-1DF,$1E0-1EF)和$1F0-1FF .ORG $00B ; RJMP STRT38 .ORG $00C RJMP STRT38 ;主機不設(shè)串口中斷,只以查詢接收 .ORG $011RST38: LDI R16,12 OUT UBRR,R16 ;設(shè)波特率:BAUD RATE=FCP/16(UBRR+1) CLR R15 ;初始化分機號 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#分機OUTLP: OUT UDR,R15 ;呼分機號,1:1#/2:2#/03:3#/04:4#.TSLOP: IN R16,USR SBRS R16,7 RJMP TSLOP ;分機返回機號? IN R16,UDR CP R16,R15 ;分機號正確返回? BRNE OUTLP LDI R16,$1C ;改為9位數(shù)據(jù)模式 TXB8=0 OUT UCR,R16 ;TXLOP: LD R16,X+ OUT UDR,R16 ;向分機發(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 ;等待接收分機返回數(shù)據(jù)塊 IN R16,UDR ST Y+,R16 ;存儲接收數(shù)據(jù) CPI R16,$0A ;分機數(shù)據(jù)塊發(fā)完? BRNE RXTST MOV R16,R15 CPI R16,4 ;與分機輪詢通訊完畢? BRNE NEXTNO ;未完轉(zhuǎn)對下一分機通信HH38: RJMP HH38 ;否則踏步(可改為處理分機返回的數(shù)據(jù),之后再進行下一個輪詢) .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 ;多機通訊1#分機程序/晶振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 ;清除分機被選中(R18,6)和主機數(shù)據(jù)塊接收完畢標志(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 ;主機呼號已收到(若收到,在R17中)? RJMP RXDTS OUT UDR,R17 ;返還該機號TXDON: IN R16,USR SBRS R16,5 RJMP TXDON ;該機號發(fā)送完成? LDI R16,$9C ; 允許UART中斷接收,9位數(shù)據(jù)模式,TXB8=0 OUT UCR,R16 RCVBLK: SBRS R18,7 RJMP RCVBLK ;主機發(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 ;禎錯誤(主機正與其它分機進行9位數(shù)據(jù)模式通信),不予接收 IN R14,SREG ;保存當前狀態(tài) TST R18 BREQ NUMB ;(R18)=0時收到數(shù)據(jù),只可能是機號,轉(zhuǎn)去核實 PUSH R16 ;否則為主機向本分機發(fā)來數(shù)據(jù)塊(9位模式,機號已符合) 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ù)塊標志RSCOM1: POP R27 POP R26 POP R16DRETI: OUT SREG,R14 RETINUMB: IN R17,UDR ;取出數(shù)據(jù) CPI R17,1 ;是1#分機?2#分機與$02比較/3#分機與$03比較. BRNE DRETI ;機號不符合,轉(zhuǎn)! SBR R18,$40 ;建機號符合標志 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個字符后,禁止發(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(僅對8535,8515無此功能),克服查詢方式占用過多機時的缺點, ;并可在線寫入 ;運作過程特點如下: ;(1)主程序初始化時設(shè)置EEPROM就緒(ready)中斷使能位和中斷總使能位 ;(2)在主程序中寫入第一個字節(jié),寫入完成后引起就緒中斷,其他寫入在中斷服務(wù)中完成 ;(3)本程序為一寫入特例,寫入地址為$100-$1FF,可作適當修改(如設(shè)塊長計數(shù)器等) ;(4)為防止高優(yōu)先級中斷破壞寫入過程,中斷服務(wù)中不允許中斷嵌套 ;(5)本例為簡化程序只以查詢寫入地址循環(huán)作為背景程序,實用時可改為具體的背景序 ;(6)如能確信當前系統(tǒng)沒有EEPROM正在寫入,可刪除對其進行查詢部分.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 ;當前有EEPROM寫入操作,有則等待寫入完成 RJMP WEEP0 RCALL WREEP ;寫入第一個字節(jié),($60)-$100,寫入完成后,EEWE=0時引發(fā)EEPROM就緒中斷 INC YL ;調(diào)整寫入地址指針HHWEEP: TST YL BRNE HHWEEP CPI YH,2 ;寫入地址達到$200后,寫入完成 BRNE HHWEEP CBI EECR,3 ;禁止EEPROM就緒(ready)中斷WDON: RJMP WDON ;踏步EEPRDY: IN R6,SREG PUSH R16 RCALL WREEP ;寫入一個字節(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 ;精確定時產(chǎn)生0.1秒信號 ;用定時/計數(shù)器1定時,不分頻定出0.1秒信號,由PC5腳輸出正脈沖。 ;晶體4.000119MHZ,計400012個數(shù)定出0.1秒信號 ;對定時/計數(shù)器1重裝常數(shù)進行加法補償(扣除自然計數(shù)和補償占用時間). ;加法補償若產(chǎn)生進位,將中斷次數(shù)減1 .ORG $000 ;精確定時產(chǎn)生0.1秒信號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秒號輸出(高有效) CBI PORTC,5 LDI R16,1 ;不分頻 OUT TCCR1B,R16 LDI R16,$E5 OUT TCNT1H,R16 LDI R16,$74 OUT TCNT1L,R16 ;寫入時間常數(shù)TCC LDI R16,$80 OUT TIMSK,R16 ;允許定時/計數(shù)器1溢出中斷 LDI R16,7 ;7次中斷輸出0.1秒號 MOV R6,R16 SEI ;中斷總使能HH1A: RJMP HH1A ;T1_OVFL:PUSH R16 PUSH R17 IN R7,SREG DEC R6 ;中斷次數(shù)減一 BRNE GOON10 ;0.1秒時間到? LDI R16,7 MOV R6,R16 ;重新裝入中斷次數(shù) SBI PORTC,5 ;0.1秒號輸出前沿 IN R17,TCNT1L ;* IN R16,TCNT1H ;*讀入TCNT1自然計數(shù)值 LDI R18,$7C ;*TCC=$E574 ADD R17,R18 ;*TCC+8=$E57C LDI R18,$E5 ;*8條單周期補償指令占用8個時鐘周期 ADC R16,R18 ;*修正后TCC=$E574+(TCNT1)+8 OUT TCNT1H,R16 ;* OUT TCNT1L,R17 ;*重新裝入補償修正后的TCC BRCC GOON09 DEC R6 ;加法補償若產(chǎn)生進位,將中斷次數(shù)減1GOON09: ;. ;數(shù)據(jù)處理略 ;. ;. ;. ;. RCALL ACLK1 ;0.1秒走時軟時鐘 RJMP GOON11GOON10: CBI PORTC,5 ;輸出信號后沿GOON11: POP R17 POP R16 OUT SREG,R7RETI;范例95 ;用定時/計數(shù)器1定時,不分頻定出1秒信號,由PC5腳輸出正脈沖 ;晶體4.000133MHZ,計4000133個數(shù)定出1秒信號 ;對定時/計數(shù)器1重裝常數(shù)進行加法補償(扣除自然計數(shù)和補償占用時間). ;加法補償若產(chǎn)生進位,將中斷次數(shù)減1 .ORG $000 ;精確定時產(chǎn)生秒號 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輸出秒信號(正脈沖) 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次中斷定出秒號 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 ;輸出秒信號 IN R17,TCNT1L ;* IN R16,TCNT1H ;*讀入T/C1自然計數(shù)值 LDI R18,$83 ;*TCC=$F67B ADD R17,R18 ;*TCC+8=$F683 LDI R18,$F6 ;*8條單周期補償指令占用8個時鐘周期 ADC R16,R18 ;* OUT TCNT1H,R16 ;* OUT TCNT1L,R17 ;*重新裝入補償修正后的TCC BRCC GOON19 DEC R6 ;加法補償若產(chǎn)生進位,將中斷次數(shù)減1GOON19: ;. ;數(shù)據(jù)處理略 ;. ;. ;. ;. RJMP GOON13GOON12: CBI PORTC,5 ;秒號后沿GOON13: POP R17 POP R16 OUT SREG,R7RETI ;范例96;運作特點如下:;此程序為一完整頻率測量顯示程序,所測頻率較高(2MHZ),使用4兆晶振;程序兼有啟動看門狗及對其管理功能;以TCNT0精確定時輸出秒號作為捕獲信號,用TCNT1對被測信號頻率計數(shù);用TCNT0直接對(8515)4兆晶振計數(shù)產(chǎn)生秒號,定時精度達1Hz 主常數(shù)選為256(即0);由PA0輸出精確定時產(chǎn)生的秒信號(與ICP腳相連)捕獲TCNT1計數(shù)值,相減計算頻率;將頻率轉(zhuǎn)換為十進制數(shù),裝入顯示緩存區(qū),調(diào)DSPA子程序顯示之(參考范例27和圖4-5);重裝TCC時對TCC進行修正,若修正(減法)計算不產(chǎn)生借位,將中斷次數(shù)n減1;被測頻率可近2兆,故須設(shè)1字節(jié)擴展計數(shù)器,以tcnt1溢出中斷對其計數(shù)(共3字節(jié)計數(shù)器);在TCNT1捕獲中斷服務(wù)中,以3字節(jié)減法計算頻率,并置位T標志;若TCNT1溢出標志置位;必須提前增1擴展計數(shù)器,并將TCNT1溢出標志清除(不再增1擴展計數(shù)器),再計算頻率.;TCNT1溢出中斷優(yōu)先級高于TCNT0,故TCNT1中斷服務(wù)可能影響秒號精度,導(dǎo)致測量誤差;可以排隊法剔除壞值,即將幾個連續(xù)采樣按大小順序排隊,掐頭去尾只留中間再作平均.;也可以監(jiān)視LED顯示,連續(xù)3秒穩(wěn)定顯示(高頻測量允許有2Hz誤差)即為所測頻率正確值.;若晶振采用12兆,被測信號頻率(暫空比1:1或接近1:1)可接近6兆. .ORG $000 STRT26: RJMP RST26 ;實測8515晶振頻率4.000167MHZ 計4000167個數(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ù)值 CBI PORTA,0 ;初始為低 CLR R22 CLR R21 CLR R20 ;R20,R21,R22為頻率量瞬時計數(shù)采樣 CLR R2 WDR LDI R16,$0D ;啟動看門狗,溢出時間為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為定時器,不分頻 OUT TCCR0,R16 LDI R16,89 ; OUT TCNT0,R16 ;寫TCC到TCNT0 LDI R16,$C6 ;上升沿捕獲,允許噪音濾除,外部脈沖計數(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 ;翻為十進制數(shù)(R12R13R14R15252 253 254 255 | 0 1 2 3 4 5.加法計數(shù)方向-GOON13: POP R16 ; | | | | | | | | | | | OUT SREG,R8 ;| RETIT1_OVRF:IN R18,SREG ;TCNT1溢出中斷服務(wù) INC R3 ;R3為TCNT1擴展字節(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ù)先對擴展字節(jié)計數(shù) LDI R16,$80 ;并將溢出標志清除,(中斷返回后不再計數(shù)) OUT TIFR,R16 ;清除TIFR,7T1CP1: MOV R16,R20 MOV R20,R3 SBC R3,R16 ;采集頻率量在R3,R4,R5 SET ;建采集頻率量標志 POP R16 OUT SREG,R6 RETI;范例97 ; 本時基資源共享式綜合測量系統(tǒng),具有精確定時PWM輸出、輸入捕獲測外部信號;周期、獲取TCNT1溢出中斷信號等多種功能。特點是TCNT1啟動之后即不停運行。; 時基資源共享式PWM的特點在于裝入比較匹配寄存器之數(shù)據(jù)方式,它不是在比較;匹配達到時清除定時/計數(shù)器,再裝入高(或低)電平時間常數(shù):而是當比較匹配;達到時以定時/計數(shù)器當前值加上時間常數(shù)后將和裝入比較匹配寄存器,二者效果;是相同的??煞Q前者為靜態(tài)設(shè)置,后者為動態(tài)設(shè)置。后者因不停運行定時/計數(shù)器;,其資源可同時用于輸出比較匹配A及B、輸入捕獲、定時信號輸出等等。; 本程序使用晶體標稱值4MHZ實測為4,000,236HZ。使用定時/計數(shù)器1直接;對主頻精確定時設(shè)定PWM高低電平的維持時間。以ICP腳輸入被測周期脈沖信號。; 本程序PWM之暫空比與范例51相同,為5毫秒(高):10毫秒。故維持;高電平的時間常數(shù)為4,000,236200=20,001,維持低電平的時間常數(shù)為;4,000,236100=40,002。此即輸出比較匹配A達到時交替寫入比較匹配寄;存器OCR1A之對TCNT1當前內(nèi)容的超前值。; 因以TCNT1直接對主頻計數(shù),頻率高周期短,輸入捕獲的外部信號周期不能;大于655364,000,236=0.01638(秒)即16.38毫秒(但也不能太小,對頻率;較高的脈沖信號應(yīng)改為測頻率)。以相鄰兩次捕獲值相減之差除以主頻得到被測信;號之周期(單位為秒)。; 為避免小數(shù)除法運算,可將相鄰兩次捕獲值相減之差先乘以1,000,再將乘積;除以主頻,將得到以毫秒為單位的周期值;考慮到除法子程序DIV16只實現(xiàn)整數(shù);除法,且除數(shù)不能大于65535,可將主頻縮小100倍,即以40,002作除數(shù),故;除得之商擴大了100倍。這樣將整數(shù)商二翻十后,其末兩位皆為小數(shù)。本程序采用;這種計算方法。并在主循環(huán)程序中調(diào)DSPA子程序顯示所測周期值。; 若將以上算法中乘以1,000改為乘以10,000,并增加對商的萬位轉(zhuǎn)換,;其余保留不變,則所得商數(shù)末3位皆為小數(shù)位。本算法精度高于上一種方法,如有;提高測量精度之必要,應(yīng)采用后種算法。; 若擴大測量信號周期,應(yīng)對TCNT1溢出信號計數(shù),做3字節(jié)減法(見范例96);后再計算被測信號周期(除以4,000,236)。所測信號周期可達4.194秒。; 本示例定時精度可與范例51做如下比較:本例中高低電平分別對主頻計數(shù);20,001個和40,002個。范例51中高低電平分別對主頻計數(shù)19,968個和;40,000個。本示例定時精度明顯高于范例51。; 本示例TCNT1產(chǎn)生溢出中斷之周期為16.38毫秒,其頻率約為61HZ。在TCNT1;溢出中斷服務(wù)子程序中由PA3以正脈沖形式輸出該信號。 .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達到時,清除輸出腳OC1A OUT TCCR1A,R16 LDI R16,$41 ;不分頻,比較匹配達到不清TCNT1;上升沿捕獲/禁止噪音濾除 OUT TCCR1B,R16 SBI DDRD,5 SBI PORTD,5 ;PD5(OC1A)初始化輸出為高 SBI DDRA,3 ;PA3為TCNT1溢出中斷信號輸出 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 ;背景程序:顯示捕獲頻率信號之周期,單位:毫秒 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,得到被測脈沖周期之單位為毫秒,且含因子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ù)點(百位實為個位) 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 ;減去十進制數(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 ;當前輸出低電平,轉(zhuǎn) IN R24,OCR1AL IN R25,OCR1AH SUBI R24,$DF ;LOW(-20001) SBCI R25,$B1 ;HIGH(-20001)/$B1DF為20,001之補碼 OUT OCR1AH,R25 OUT OCR1AL,R24 ;寫入高電平維持時間超前值 LDI R24,$80 ;比較匹配A達到時,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之補碼 OUT OCR1AH,R25 ; OUT OCR1AL,R24 ;寫入低電平維持時間超前值 LDI R24,$C0 ;比較匹配A達到時,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 ;建采集頻率量標 OUT S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程教育認證自評報告撰寫指南(2024版)
- 苗木農(nóng)業(yè)合作合同
- 車位租賃合同時的合同保留
- 小學(xué)三年級數(shù)學(xué)因數(shù)中間或末尾有零的乘法綜合作業(yè)練習(xí)題
- 防水施工付款方式協(xié)議
- 配電箱控制設(shè)備采購合同
- 離職后職業(yè)約定書
- 北盤江流域水風(fēng)光多能互補系統(tǒng)容量配比優(yōu)化研究
- 基于深度學(xué)習(xí)的工業(yè)零部件的異常檢測關(guān)鍵技術(shù)研究及應(yīng)用
- 論非法吸收公眾存款罪的限縮適用
- 跨學(xué)科視域下道德與法治與心理健康教育融合的探究
- 智能在線問卷調(diào)查系統(tǒng)開發(fā)合同
- 2025公需課《人工智能賦能制造業(yè)高質(zhì)量發(fā)展》試題及答案
- 汽車4S店展廳布局設(shè)計
- 旅游公司的財務(wù)崗位職責(zé)
- 《結(jié)腸憩室》課件
- 2025年廣東省珠海市香洲區(qū)5月中考模擬化學(xué)試題(含答案)
- 2025年江蘇省無錫市惠山區(qū)中考一模英語試題(含答案)
- 2024-2025湘科版小學(xué)科學(xué)五年級下冊期末考試卷附答案(三套)
- CRRT的操作流程及護理要點
- 老年髖部骨折圍術(shù)期護理臨床實踐專家共識2024版解讀
評論
0/150
提交評論