📄 spiled.asm
字号:
;*************************************************
;* spiled.asm **
;*************************************************
;* 本程序为数码管显示处理模块程序
;* 占用I/O RC3,RC4,RC5
;* 使用RAM 1个字节
;* 程序包括:
;* - InitSPI 初始化SPI子程序
;* - LEDlight 送七段码显示子程序
;* 入口参数 LED_DATA
;* 出口参数 无
;*************************************************
#include p16F877.inc ;定义所用单片机的头文件
;*************************************************
;数据区
;*************************************************
LED_DATA EQU 0X21
Count EQU 0X22
Count1 EQU 0X23
Count2 EQU 0X24
#define SPITRIS TRISC ;
#define SPISDI PORTC,4
org 0x00
RESET nop
goto InitSPI
org 0X10 ;读取键值判断测试程序入口
LEDTable ;七段码调整 如果表出现PCL溢出,要调整表的位置
ADDWF PCL,F
DT 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71
;*************************************************
;InitSPI--初始化SPI
;*************************************************
InitSPI
MOVLW 0X32 ;开串行口,下降沿发送,时钟高电平为空闲状态
MOVWF SSPCON ;SPI主控方式,时钟=OCS/64
BSF STATUS,RP0
CLRF SSPSTAT
movlw 0X00 ;设置RB3,RB4,RB5为输出,硬件连接:
MOVWF SPITRIS ;RC3- CLK-SRCLK; RC4-SDI-RCLK; RC5-SDO-SER
BCF STATUS,RP0
movlw 0x30
movwf LED_DATA
nop
NOP
LEDlight
MOVLW HIGH LEDTable
MOVWF PCLATH
MOVLW 0X0F
ANDWF LED_DATA,W
CALL LEDTable ;七段码调整
MOVWF SSPBUF
CLRF PCLATH
btfss PIR1,SSPIF ;采用测试PIR1中的中断标志位
GOTO $-1 ;来判断是否发送完
BCF PIR1,SSPIF
BCF SPISDI ;
NOP
BSF SPISDI ;
call LongDelay
incf LED_DATA
goto LEDlight
;*****************************************************
LongDelay ; call指令占用2个指令周期
clrf Count ; 清 Count占用1个指令周期
clrf Count1 ; 清 Count1占用1个指令周期
movlw 0x03 ;占用1个指令周期
movwf Count2 ;占用1个指令周期
LDloop
decfsz Count,f ; 这两行指令将延时
goto LDloop ; (256 * 3) -1 个指令周期
decfsz Count1,f
goto LDloop
decfsz Count2,f
goto LDloop
return
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -