INT_END
MOVR1 , PCH_TEMP
MOVPCH, R1
SWAPR R1 , PSW_TEMP
MOV PSW, R1
IRET
;;;;;;;;;;;;;;中断部分结
束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;入口函数,主程
序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
CALL INIT_ALL ;初始化寄存器
CALL INIT_RAM ;初始化RAM
LOOP
INC UNIT ;个位数字的递增
MOV R0 ,UNIT
XOR R0 ,#0X0A
JB PSW ,Z
JMP C_DIS
CLR UNIT
INC DECADE ;十位数字的递增
MOV R0 ,DECADE
XOR R0 ,#0X0A
JB PSW ,Z
JMP C_DIS
CLR DECADE
INC HUNDRED ;百位数字的递增
MOV R0 ,HUNDRED
XOR R0 ,#0X0A
JB PSW ,Z
JMP C_DIS
CLR HUNDRED
INC THOUSAND ;千位数字的递增
MOV R0 ,THOUSAND
XOR R0 ,#0X0A
JB PSW ,Z
JMP C_DIS
CLR THOUSAND
C_DIS
MOV R0,#0x33
MOV DIS_DEL,R0 ;DIS_DEL是用来延时数值的递增用的,数值越
大,那么递增的速度就越慢
CALL LED_DISPLAY ;数码管显示当前数值
DECJZ DIS_DEL
JMP $‐2 ;调整地址以当前地址减2的位置
JMP LOOP
CRET
;*************************************************************
*****************
;* 函 数 名: INIT_ALL
;* 函数功能: 初始化函数,对各种寄存器的初始化
;* 入口参数: 无
;* 返 回: 无
;*************************************************************
*****************
INIT_ALL
;调入校准信息到控制寄存器
CALL #0xFFF
MOV OSCCAL0, R0 ;晶振校准0
NOP
NOP
CALL #0xFFE
MOV OSCCAL1, R0 ;晶振校准1
NOP
NOP
;选择工作频率
MOV R0 ,#0x60
MOV OSCCTL, R0 ;设置为8M
;端口初始化
;***端口初始化********
MOV R0 ,#0x08
MOV TR0, R0 ;设置P0端口为输入
MOV R0 ,#0x00
MOV TR1, R0 ;设置P1端口为输出
MOV R0 ,#0X00
MOV TR2, R0 ;设置P2端口为输出
CLR P0
CLR P1
MOV R0 ,#0XF0 ;关闭数码管位选端
MOV P2, R0
CRET
;*************************************************************
*****************
;* 函 数 名: LED_DISPLAY
;* 函数功能: 数码管显示函数,由4个8位LED灯显示
;* 入口参数: THOUSAND 千位 ,HUNDRED 百位 ,SMQ_S 十位, UNIT 个位 ,
每个数的范围 0~f
;* 返 回: 无
;*************************************************************
*****************
LED_DISPLAY
MOV R0 , #0XE0
MOV P2 , R0 ;打开数码管的 个位
MOV R2 , UNIT
CALL DIG_DATA
MOV P1 , R0
CALL DELAY
CLR P1 ;消隐
MOV R0 ,#0XF0
MOV P2 , R0
MOV R0 ,#0XD0
MOV P2 , R0 ;打开数码管的 十位
MOV R2 , DECADE
CALL DIG_DATA
MOV P1 , R0
CALL DELAY
CLR P1 ;消隐
MOV R0 ,#0XF0
MOV P2 , R0
MOV R0 , #0XB0
MOV P2 , R0 ;打开数码管的 百位
MOV R2 , HUNDRED
CALL DIG_DATA
MOV P1 , R0
CALL DELAY
CLR P1 ;消隐
MOV R0 ,#0XF0
MOV P2 , R0
MOV R0 , #0X70
MOV P2 , R0 ;打开数码管的 千位
MOV R2 , THOUSAND
CALL DIG_DATA
MOV P1 , R0
CALL DELAY
CLR P1 ;消隐
MOV R0 ,#0XF0
MOV P2 , R0
CRET
;*************************************************************
*****************
;* 函 数 名: DELAY
;* 函数功能: 延时函数,时间为1ms
;* 入口参数: 无
;* 返 回: 无
;*************************************************************
*****************
DELAY
MOV R0,#0x12
MOV DELAY_NUM1, R0
LP0
MOV R0,#0X12
MOV DELAY_NUM2, R0
LP1
DECJZ DELAY_NUM2 ;DELAY_NUM2自减1,若为0,则跳过
JMP LP1
DECJZ DELAY_NUM1 ;DELAY_NUM1自减1,若为0,则跳过
JMP LP0
CRET ;子程序返回
;/************************************************************
******************
;* 函 数 名: init_RAM
;* 函数功能: 初始化RAM
;* 入口参数: 无
;* 返 回: 无
;*************************************************************
*****************/
INIT_RAM
CLR R2 ;传递默认RAM值
; CLR RAM SET 0 BANK0
CLR PSW ,RP0
MOV R0 ,#0X80 ;起始地址0x80
MOV R1 ,#0X20 ;操作个数
CALL INIT_RAM_0
; CLR RAM SET 0 BANK1
SET PSW ,RP0
MOV R0 ,#0X80 ;起始地址0x80
MOV R1 ,#0X01 ;操作个数
CALL INIT_RAM_0
; 默认工作区域设定 BANK0
CLR PSW ,RP0
; 其他变量的数值操作
CRET
;;;;;;;;;;;;;;;;;;执行默认数值装载到RAM区
INIT_RAM_0
ST [R0],R2
INC R0
DECJZ R1
JMP INIT_RAM_0
CRET
.end