⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wfrequence.asm

📁 C8051F系列单片机外围电路功能模块程序
💻 ASM
字号:
;参考程序B   WFrequence.ASM   此程序运行前将S3的第2和第4拨码开关拨到ON,用跳线将T0和P0.0短接,拨码开关S1打开任一方波信号通道(2000KHZ,1000KHZ,500KHZ,250KHZ);T0作为外部计数器,T1作为定时器,T1定时在1ms范围内察看计数器T0所计的数。计算出被测信号的频率并显示在8255驱动的LED数码管上.	在定时1ms范围内察看计数器T0所计的数: 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;          /*使能交叉开关,弱上拉*/
      MOV   0B5H,#0FFH          ;/*设置P7,P6,P4,P5为推拉模式
      MOV   0A3H,#2CH ;EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/
;低脉宽占1个SYSCLK周期
      MOV   0A1H,#6DH ;地址建立/保持时间占1个SYSCLK周期,/WR和/RD占12个SYSCLK
;周期
	 LCALL	SYSCLK_Init					;初始化时钟
	 LCALL	PORT_Init           ;初始化交叉开关和IO口
	 LCALL	Time01_Init					;初始化定时器0/1
SA: CLR		P31							;清P3.1,起动计数
	SETB	EA							;开总中断
	SETB	TR1							;开定时器1,计时一毫秒1ms后产生T1中断
	SETB	TR0							;开定时器0
SS: JNB  F0,$
    ACALL   DISPLED
	CLR   F0
	AJMP   SA
    RET
;初始化外部11.0592MHz作为系统时钟
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            	;选择外部晶体作为系统时钟 
        RET
;初始化I/O口
PORT_Init:
	MOV		XBR0,#00H
	MOV		XBR1,#02H					;交叉开关使能T0
	MOV		XBR2,#40H					;使能交叉开关和弱上拉
;	ORL		P3MDOUT,#0ffH				;P3口推挽输出
	RET
;定时器0/1初始化
Time01_Init:
	CLR		EA					;关总中断
	CLR		TR0					;关计数器T0
	CLR		TR1					;关定时器	T1
MOV		IE,#0AH	;允许TF1/TF0标志位(TCON.7/TCON.5)的中断请求
	MOV		TMOD,#15H		;定时器T1是16位定时器方式,T0是16为计数器方式
	MOV		IP,#08H			;定时器T1是高优先级中断
	MOV		CKCON,#10H		;定时器T1的时基是系统时钟
    MOV		TH1, #0d4H		 ;FFFFH-D4CDH=2B23H=11059D
 	MOV   	TL1, #0cdh       ;T1定时:11059/11.0592MHZ=1000us=1ms
	RET
;计数器T0中断服务子程序
TIMER0_ISR:
	CLR		TF0							;清中断标志
	RETI
;定时器T1中断服务子程序
TIMER1_ISR:
	CLR		TF1							;清中断标志
	CLR		TR1							;关定时器1
	;Frequence=TH0*0x100+TL0;			;外部脉冲数 单位 KHz
	CLR		TR0
    ACALL  EXCH         ;整理数据
	MOV		TH0,#00H
	MOV		TL0,#00H
    MOV		TH1, #0d4H		;定时器1使用系统时钟的1/12分频
    MOV   TL1, #0cdH
    SETB	TR1							;使能定时器1
	SETB	TR0							;使能定时器0
	SETB  F0
	RETI
EXCH:   MOV  A,TH0   ;LED显示7AH-7DH中的内容
	    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个字符
	MOV	R0,#7AH   ;显示内容存放在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  ; 查出要显示的数据
        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 ;显示数值,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
	      DB 	76H,3EH,31H,6EH           ;H,U,Z,Y
	      DB      0FFH,00H                  ;8,灭     
C8255:	MOV	A,#80H      ; 设置PC口,PB口为输出,PA口为输入
      	MOV 	DPTR,#CWR       ;#8003H为8255的控制寄存器地址
      	MOVX	@DPTR,A
      	RET
DELY:   MOV 08H,#0FH    ;延时子程序
TM:     MOV 07H,#0FFH
        DJNZ 07H,$
        DJNZ 08H,TM
        RET
      	END		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -