单片机脉宽测量C语言,单片机脉宽测量的程序
DATL EQU 30H ;計數低位
DATH EQU 31H ;計數高位
DATC EQU 32H ;計數進位
LEDBuf EQU 33H ;顯示緩存
ORG 0000H
JMP MAIN
ORG 0003H
AJMP INT_0
ORG 0050H
MAIN:AJMP START
;*************************************
;顯示子程序
LEDMAP: ; 八段管顯示碼
DB 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
DB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
LED:
MOV R0 ,#LEDBuf
MOV R1 ,#6 ; 共6個八段管
MOV R2 ,#00100000b ; 從左邊開始顯示
Loop:
MOV DPTR ,#8002H
MOV A ,#0
MOVX @DPTR,A ; 關所有八段管
MOV A ,@R0
MOV DPTR ,#8004H
MOVX @DPTR,A
MOV DPTR ,#8002H
MOV A ,R2
MOVX @DPTR,A ; 顯示一位八段管
MOV R6 ,#1
MOV R7 ,#0
L:
DJNZ R7 ,L
DJNZ R6 ,L
MOV A ,R2 ; 顯示下一位
RR A
MOV R2, A
INC R0
DJNZ R1 ,Loop
RET
;*******************************************
;中斷服務子程序 (啟動定時功能)
INT_0:
CLR EX0 ;關中斷
MOV DATC ,#00H
MOV TH1 ,#00H
MOV TL1 ,#00H
JB P3。
3
SETB TR1 ;啟動定時器1,但不計數
JNB P3。3 ,$ ;等待脈沖由低電平變為高電平 ;等待正脈沖
CH0: JNB TF1 ,CH1 ;計數沒溢出,跳轉
INC DATC
CLR TF1
MOV TH1 ,#00H ;裝入初值
MOV TL1 ,#00H
SETB TR1 ;啟動定時器
CH1: JB P3。
3 ,CH0 ;判斷正脈沖是否結束
CLR TR1 ;停止計數
MOV A ,TL1
MOV DATL ,A
MOV A ,TH1
MOV DATH ,A
;************************************
; 計數值*機器周期(6MHz 為2us)
CLR C ;帶進位左移等同乘2
MOV A ,DATL
RLC A
MOV DATL ,A
MOV A ,DATH
RLC A
MOV DATH ,A
MOV A ,DATC
RLC A
MOV DATC ,A
;*********************************
;數制轉換
CLR A
MOV R3 ,A
MOV R4 ,A
MOV R5 ,A
MOV R7 ,#24
HB0:
MOV A ,DATL ;**********************
RLC A ;依次移出高位
MOV DATL ,A ;
MOV A ,DATH
RLC A
MOV DATH ,A
MOV A ,DATC
RLC A
MOV DATC ,A
MOV A ,R3 ;將累加器自身帶進位相加(與*2等效)
ADDC A ,R3 ;累加器依次從低位開始
DA A
MOV R3 ,A
MOV A ,R4
ADDC A ,R4
DA A
MOV R4 ,A
MOV A ,R5
ADDC A ,R5
DA A
MOV R5 ,A
DJNZ R7 ,HB0 ;判斷24位是否處理完
;****************************************
;壓縮BCD碼轉換成非壓縮BCD碼
MOV DPTR ,#LEDMAP
MOV A ,R5
SWAP A
ANL A ,#0FH ;屏蔽高位
MOVC A ,@A+DPTR
MOV LEDBuF,A ;分離出第6位
MOV A ,R5
ANL A ,#0FH
MOVC A ,@A+DPTR
MOV LEDBuf+1,A ;分離出第5位
MOV A ,R4
SWAP A
ANL A ,#0FH ;屏蔽高位
MOVC A ,@A+DPTR
MOV LEDBuF+2,A ;分離出第4位
MOV A ,R4
ANL A ,#0FH
MOVC A ,@A+DPTR
MOV LEDBuf+3,A ;分離出第3位
MOV A ,R3
SWAP A
ANL A ,#0FH ;屏蔽高位
MOVC A ,@A+DPTR
MOV LEDBuF+4,A ;分離出第2位
MOV A ,R3
ANL A ,#0FH
MOVC A ,@A+DPTR
MOV LEDBuf+5,A ;分離出第1位
SETB EX0 ;開中斷
RETI
;**********************************************
;主程序開始
START:
MOV SP ,#50H
MOV TMOD ,#90H ;設置定時器1的工作方式為1,GEAE置1
MOV TH1 ,#00H
MOV TL1 ,#00H ;定時器時間初值置零
MOV IE ,#81H ;開外部中斷0
CALL LED ; 調顯示
LJMP MAIN
END
。
全部
總結
以上是生活随笔為你收集整理的单片机脉宽测量C语言,单片机脉宽测量的程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1060显卡玩吃鸡卡吗
- 下一篇: 如龙0啤酒在哪买(在线新华字典)