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

📄 frequence.asm

📁 这是一个有关C8051F020单片机的实验教学材料,相信对于单片机的研究人员会有很大的帮助.
💻 ASM
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
//文件名:	Frequence.ASM
//
//编写人:	LC
//
//编写时间:2005/03/10
//
//目标器件: C8051F02x
//
//编译工具: Silicon Laboratories IDE
//
//程序说明:	此程序运行前将S3的第2和第4拨码开关拨到ON,用跳线将T0和P00短接,拨码开
//			关S1打开任一通道;定时器0作为外部计数器,定时器1作为定时器,在定时1ms
//			范围内察看计数器0所计的数。			
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

$include (c8051f020.inc)             	;SFR定义

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
SYSCLK		EQU		11059200          	;外部晶振频率
TIME1ms		EQU		(SYSCLK/12)/1000	;定时1ms
P31			EQU		P3.1


	ORG		0
	LJMP	main
	ORG		0BH
	LJMP	TIMER0_ISR
	ORG		1BH
	LJMP	TIMER1_ISR
	ORG		100H

;延时子程序
Delay:
    MOV   R7, #16h			
Delay1:
    MOV   R6, #80h
Delay0:
    MOV   R5, #00h
    DJNZ  R5, $
    DJNZ  R6, Delay0
    DJNZ  R7, Delay1
	RET

//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
main:
	MOV		WDTCN,#0deH					;无效看门狗
	MOV		WDTCN,#0adH
	LCALL	SYSCLK_Init					;初始化时钟
	LCALL	PORT_Init           		;初始化交叉开关和IO口
	LCALL	Time01_Init					;初始化定时器0/1
	CLR		P31							;清P3.1
	LCALL	Delay
	SETB	EA							;开总中断
	SETB	TR1							;开定时器1
	SETB	TR0							;开定时器0
   	SJMP	$
    RET

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
;初始化外部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

//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
;初始化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							;关定时器0
	CLR		TR1							;关定时器1
	MOV		IE,#0AH						;允许TF1/TF0标志位(TCON.7/TCON.5)的中断请求
										;定时器1/0发生溢出
	MOV		TMOD,#15H					;定时器1是16位定时器方式,定时器0是16为计数器(T0脚)方式
	MOV		IP,#08H						;定时器1是高优先级中断
	MOV		CKCON,#00H					;定时器1的时基是系统的1/12
    MOV		TH1, #0FCH					;定时器1使用系统时钟的1/12分频
   	MOV   	TL1, #66
	RET

;定时器0中断服务子程序
TIMER0_ISR:
	//TR0=0;
	CLR		TF0							;清中断标志
	//TR0=1;
	RETI

;定时器1中断服务子程序
TIMER1_ISR:
	CLR		TF1							;清中断标志
	CLR		TR1							;关定时器1
	;Frequence=TH0*0x100+TL0;			;外部脉冲数 单位 KHz
	CLR		TR0
	MOV		TH0,#00H
	MOV		TL0,#00H
    MOV		TH1, #0FCH					;定时器1使用系统时钟的1/12分频
   	MOV   	TL1, #66H
   	SETB	TR1							;使能定时器1
	SETB	TR0							;使能定时器0
	RETI
	END

⌨️ 快捷键说明

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