;**************************************************
__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;************************************************
PCL EQU 02H ;定义程序计数器低字节寄存器地址
STATUS EQU 03H ;定义状态寄存器地址
PORTA EQU 05H ;定义RA口数据寄存器地址
PORTC EQU 07H ;定义RC口数据寄存器地址
TRISA EQU 85H ;定义RA口方向控制寄存器
TRISC EQU 87H ;定义RC口方向控制寄存器
ADCON1 EQU 9FH ;定义ADC模块控制寄存器1的地址
;----------------------- STATUS
C EQU 0 ;定义进位标志位位地址
Z EQU 2 ;定义0标志位位地址
RP0 EQU 5 ;定义页选位RP0位地址
;-----------------------
COUNTER EQU 20H ;定义计数器寄存器
COUNT0 EQU 21H ;定义廷时变量计数器
COUNT1 EQU 22H ;定义廷时变量计数器
COUNT2 EQU 23H ;定义廷时变量计数器
PORTA_B EQU 25H ;定义数码管位选寄存器
;--------------------
ORG 0000H
NOP ;放置一条ICD必需的空操作指令
GOTO MAIN
ORG 0008H
;******************************************************
CONVERT1 ;取数码管位码
ADDWF PCL,1 ;地址偏移量加当前PC值
TABLE1
RETLW 0FDH ;第一位数码管
RETLW 0FEH ;第二位数码管
RETLW 0F7H ;第三位数码管
RETLW 0FBH ;第四位数码管
RETLW 0DFH ;第五位数码管
RETLW 0EFH ;第六位数码管
;-------------------- ----------------------------------
CONVERT ;取数码管段码
ADDWF PCL,1 ;地址偏移量加当前PC值
TABLE
RETLW 0C0H ;0
RETLW 0F9H ;1
RETLW 0A4H ;2
RETLW 0B0H ;3
RETLW 99H ;4
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 98H ;9
RETLW 7FH ;.
;*******************************************************
MAIN
CLRF PORTA ;初始化IO口
CLRF PORTC ;
BSF STATUS,RP0
MOVLW 07H
MOVWF ADCON1 ;设置RA口全部为普通数字IO口
MOVLW 00H
MOVWF TRISA ;设置RA,RC口全部为输出
MOVWF TRISC
BCF STATUS,RP0
;----------------------
LOOPA
MOVLW 0FFH ;让数码所有划先熄灭
MOVWF PORTC
MOVLW 00H
MOVWF PORTA_B ;位选寄存器送初值0,让第一位先显示
LOOP1
MOVFW PORTA_B ;取位选码
CALL CONVERT1
MOVWF PORTA ;位选码送RA口
CLRF COUNTER ;清段码寄存器,让其先显示1
CLRW
LOOP2
CALL CONVERT ;取段码
MOVWF PORTC ;段码送RC口显示
CALL DELAY ;
INCF COUNTER,1 ;段码加1直到第10位即“。”
MOVLW .11 ;
XORWF COUNTER,0 ;
BZ LOOPB ;
MOVFW COUNTER ;
GOTO LOOP2 ;
;-------------------------
LOOPB
INCF PORTA_B,0 ;位码加1直到第6位显示完又显示第一位
MOVWF PORTA_B ;
XORLW 06H ;
BTFSS STATUS,Z ;
GOTO LOOP1 ;
GOTO LOOPA ;
;---------------------------------廷时子程序------
DELAY
MOVLW .2 ;设置延时常数
MOVWF COUNT0
L1
MOVLW .255 ;
MOVWF COUNT1
L2
MOVLW .255 ;
MOVWF COUNT2
L3
DECFSZ COUNT2,1 ;递减循环
GOTO L3 ;
DECFSZ COUNT1,1 ;
GOTO L2 ;
DECFSZ COUNT0,1 ;
GOTO L1 ;
RETLW 0
;----- -----------------------------------------------
END