?? wfrequence.asm
字號:
;參考程序B WFrequence.ASM 此程序運(yùn)行前將S3的第2和第4撥碼開關(guān)撥到ON,用跳線將T0和P0.0短接,撥碼開關(guān)S1打開任一方波信號通道(2000KHZ,1000KHZ,500KHZ,250KHZ);T0作為外部計(jì)數(shù)器,T1作為定時(shí)器,T1定時(shí)在1ms范圍內(nèi)察看計(jì)數(shù)器T0所計(jì)的數(shù)。計(jì)算出被測信號的頻率并顯示在8255驅(qū)動的LED數(shù)碼管上. 在定時(shí)1ms范圍內(nèi)察看計(jì)數(shù)器T0所計(jì)的數(shù): 2000D=07D0H, 1000D=03E8H, 500D=1F4H, 250D=0FAH.
$include (c8051f020.inc) ;SFR定義
PPA EQU 8000H ;8255的端口地址
PPB EQU 8001H
PPC EQU 8002H
CWR EQU 8003H
P31 EQU P3.1
ORG 0
LJMP main
ORG 0BH
LJMP TIMER0_ISR ;T0中斷入口
ORG 1BH
LJMP TIMER1_ISR ;T1中斷入口
ORG 100H
main: MOV SP,#50H
MOV WDTCN,#0deH ;無效看門狗
MOV WDTCN,#0adH
MOV 0E3H,#40H; /*使能交叉開關(guān),弱上拉*/
MOV 0B5H,#0FFH ;/*設(shè)置P7,P6,P4,P5為推拉模式
MOV 0A3H,#2CH ;EMIF工作在地址/數(shù)據(jù)復(fù)用方式,只用外部存儲器,ALE高/
;低脈寬占1個(gè)SYSCLK周期
MOV 0A1H,#6DH ;地址建立/保持時(shí)間占1個(gè)SYSCLK周期,/WR和/RD占12個(gè)SYSCLK
;周期
LCALL SYSCLK_Init ;初始化時(shí)鐘
LCALL PORT_Init ;初始化交叉開關(guān)和IO口
LCALL Time01_Init ;初始化定時(shí)器0/1
SA: CLR P31 ;清P3.1,起動計(jì)數(shù)
SETB EA ;開總中斷
SETB TR1 ;開定時(shí)器1,計(jì)時(shí)一毫秒1ms后產(chǎn)生T1中斷
SETB TR0 ;開定時(shí)器0
SS: JNB F0,$
ACALL DISPLED
CLR F0
AJMP SA
RET
;初始化外部11.0592MHz作為系統(tǒng)時(shí)鐘
SYSCLK_Init:
MOV OSCXCN, #67h ;使能外部晶體
;震蕩在11.0592MHz
CLR A ;等待最少1ms
DJNZ acc, $ ;等待512us
DJNZ acc, $ ;等待512us
osc_wait: ;查詢XTLVLD-->1
MOV a, OSCXCN
JNB acc.7, osc_wait
ORL OSCICN, #08h ;選擇外部晶體作為系統(tǒng)時(shí)鐘
RET
;初始化I/O口
PORT_Init:
MOV XBR0,#00H
MOV XBR1,#02H ;交叉開關(guān)使能T0
MOV XBR2,#40H ;使能交叉開關(guān)和弱上拉
; ORL P3MDOUT,#0ffH ;P3口推挽輸出
RET
;定時(shí)器0/1初始化
Time01_Init:
CLR EA ;關(guān)總中斷
CLR TR0 ;關(guān)計(jì)數(shù)器T0
CLR TR1 ;關(guān)定時(shí)器 T1
MOV IE,#0AH ;允許TF1/TF0標(biāo)志位(TCON.7/TCON.5)的中斷請求
MOV TMOD,#15H ;定時(shí)器T1是16位定時(shí)器方式,T0是16為計(jì)數(shù)器方式
MOV IP,#08H ;定時(shí)器T1是高優(yōu)先級中斷
MOV CKCON,#10H ;定時(shí)器T1的時(shí)基是系統(tǒng)時(shí)鐘
MOV TH1, #0d4H ;FFFFH-D4CDH=2B23H=11059D
MOV TL1, #0cdh ;T1定時(shí):11059/11.0592MHZ=1000us=1ms
RET
;計(jì)數(shù)器T0中斷服務(wù)子程序
TIMER0_ISR:
CLR TF0 ;清中斷標(biāo)志
RETI
;定時(shí)器T1中斷服務(wù)子程序
TIMER1_ISR:
CLR TF1 ;清中斷標(biāo)志
CLR TR1 ;關(guān)定時(shí)器1
;Frequence=TH0*0x100+TL0; ;外部脈沖數(shù) 單位 KHz
CLR TR0
ACALL EXCH ;整理數(shù)據(jù)
MOV TH0,#00H
MOV TL0,#00H
MOV TH1, #0d4H ;定時(shí)器1使用系統(tǒng)時(shí)鐘的1/12分頻
MOV TL1, #0cdH
SETB TR1 ;使能定時(shí)器1
SETB TR0 ;使能定時(shí)器0
SETB F0
RETI
EXCH: MOV A,TH0 ;LED顯示7AH-7DH中的內(nèi)容
ANL A,#0FH
MOV 7BH,A
MOV A,TH0
SWAP A
ANL A,#0FH
MOV 7AH,A
MOV A,TL0
ANL A,#0FH
MOV 7DH,A
MOV A,TL0
SWAP A
ANL A,#0FH
MOV 7CH,A
MOV 7EH,#10H
RET
;顯示功能子程序
DISPLED: ACALL C8255
MOV R2,#01H ;字位選擇在R2中
MOV R5,#5 ;共顯示5個(gè)字符
MOV R0,#7AH ;顯示內(nèi)容存放在7AH,7BH,7CH,7DH,7EH中.
DSP1:MOV DPTR,#PPB ;PPB=8001H,字位選擇
MOV A,R2
MOVX @DPTR,A
MOV A,@R0
DSP2: MOV DPTR,#BCD ;查表,BCD是表頭
MOVC A,@A+DPTR ; 查出要顯示的數(shù)據(jù)
MOV DPTR,#PPC
MOVX @DPTR,A
ACALL DELY
MOV A,R2
RL A
MOV R2,A
INC R0
DJNZ R5,DSP1
RET
BCD: DB 3FH,06H,5BH,4FH ;顯示數(shù)值,0,1,2,3
DB 66H,6DH,7DH,07H ;4,5,6,7
DB 7FH,6FH,77H,7CH ;8,9,A,B
DB 39H,5EH,79H,71H ;C,D,E,F(xiàn)
DB 76H,3EH,31H,6EH ;H,U,Z,Y
DB 0FFH,00H ;8,滅
C8255: MOV A,#80H ; 設(shè)置PC口,PB口為輸出,PA口為輸入
MOV DPTR,#CWR ;#8003H為8255的控制寄存器地址
MOVX @DPTR,A
RET
DELY: MOV 08H,#0FH ;延時(shí)子程序
TM: MOV 07H,#0FFH
DJNZ 07H,$
DJNZ 08H,TM
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -