📄 rtc.asm
字号:
;*******************************************************************************
; http://www.zlgmcu.com
; xy-mcu@163.com
;********************************************************************************
;定义RTC定时时间。
$nomod51
$include (reg935.h)
RTCH_DATA equ 0xb
RTCL_DATA equ 0x3f //50ms @7.373MHz
;(RTCH,RTCL) = (t*f/128)-1
;t为定时时间(单位:秒)
;f为晶振频率(单位:赫兹)RC振荡为:7372800Hz
;RTC定时器初始化
;*************************RTC定时器初始化函数***************************************
RTC_INI:
ORL IEN0,#0C0H ;允许RTC中断
MOV WDCON,#0E0H ;停止看门狗运行。
MOV RTCH,#RTCH_DATA
MOV RTCL,#RTCL_DATA
MOV RTCCON,#63H ;RTC 时钟源为 CCLK,中断使能,启动RTC,
RET
;*************************RTC定时器中断服务函数***************************************
RTC_INT:
;MOV RTCCON,#63H;RTC 定时器的
MOV A,RTCCON
ANL A,#7FH
MOV RTCCON,A
;其他处理
RETI
;******************************* IO 口配置*******************************************
;PxM1.y PxM2.y
; 0 0 准双向口
; 0 1 推挽(上拉)
; 1 0 仅为输入(高阻)
; 1 1 开漏输出
; 请根据需要配置,最好不要使用“准双向”方式,他的抗干扰能力没有其他方式好。
IO_INIT:
MOV P0M1,#00000000B
MOV P0M2,#00000000B
MOV P1M1,#00000000B
MOV P1M2,#00000000B
RET
;********************************************************************
;T0 定时500ms
;T0 初始化
;5MS 定时器中断
TH0DAT EQU 0B8H ;定时5ms的初值
TL0DAT EQU 00H
DIVF EQU 100 ;100分频 5ms*100= 500ms 改变这个值可以改变定时时间。
T0_CNT EQU 55H ;定时器计数器的计数变量,根据需要设置RAM地址。
T0_INI:
ORL TMOD,#01H
MOV TAMOD,#00H
MOV TL0,#TL0DAT
MOV TH0,#TH0DAT
MOV T0_CNT,#0
SETB TR0
RET
;***********************定时器0中断************************************8
T0_INT:
MOV TL0,#TL0DAT ;定时器重载初值
MOV TH0,#TH0DAT
MOV A,T0_CNT
INC A
CJNE A,#DIVF,RETX
;100*5ms 定时到,处理一些东西。
;
;
CLR A
MOV T0_CNT,A
RETI
RETX: ;没有到5*100ms
MOV T0_CNT,A
RETI
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -