📄 frequence.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 + -