;************************************************** __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
|