📄 max7219_function_extra.asm
字号:
.include hardware.inc
.define P_SIO_Data 0x701A
.define LOAD 0x0004 //iob2
.define CLK 0x0001 //iob0
.define DIN 0x0002 //iob1
//.define LOAD 0x0002 //iob1,检测用
//.define CLK 0x0004 //iob2,检测用
//.define DIN 0x0001 //iob0,检测用
.code
//===================================================================================================
//函数:Init_SIO()
//功能:初始化串行输出
//===================================================================================================
.public _Init_SIO
_Init_SIO:.PROC
R1=0x00d9; //设置为输出端口
[P_SIO_Ctrl]=r1; //B0,B1分别为sclk,sdata引脚,串行地址无
RETF
.ENDP
//======================================================================================================
//函数:void sent_LED( unsigned int n )
//功能:输出16位数据到MAX7219
//输入:16位数据
//======================================================================================================
.public _sent_LED_Bake
_sent_LED_Bake:.proc
INT OFF //关中断
PUSH bp TO [sp]; //弹出入口参数共两个入口参数
bp = sp + 1
r2 = [bp+3] //取出第一个入口参数
r3=[P_IOB_Data] //LOAD置低
r4=LOAD^0xffff
r3=r3&r4
[P_IOB_Data] =r3
// R1=0x00d9; //设置为输出端口
// [P_SIO_Ctrl]=r1; //B0,B1分别为sclk,sdata引脚,串行地址无
r3=r2;
r3=r3 LSR 4; //高8位
r3=r3 LSR 4;
r2=r2&0x00ff; //低8位
r1=0x0000 //写入串行输入输出启动端口
[P_SIO_Start]=r1;
//高8位传输
[P_SIO_Data]=r3; //写入传送数据
call L_busy //忙否?处理
//低8位传输
[P_SIO_Data]=r2;
call L_busy //忙否?处理
r3=[P_IOB_Data] //LOAD置高
r3=r3|LOAD
[P_IOB_Data] =r3
INT IRQ,FIQ //开中断
POP bp FROM [sp]
retf
.endp
.public L_busy
L_busy:.proc
?L_busy:
r1=0x0080 //读出占用标志位busy
test r1,[P_SIO_Start] //忙,没有写完
jnz ?L_busy //继续检测
[P_SIO_Stop]=r1; //写入任意一个值,停止
retf
.endp
//=============================================================================================
//相关LOAD ,CLK, DIN位改变函数:
//=============================================================================================
.public _Set_LOAD_Low
_Set_LOAD_Low:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //LOAD置低
r4=LOAD^0xffff
r3=r3&r4
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf;
.endp
.public _Set_LOAD_High
_Set_LOAD_High:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //LOAD置高
r3=r3|LOAD
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf
.endp
.public _Set_CLK_Low
_Set_CLK_Low:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //CLK置低
r4=CLK^0xffff
r3=r3&r4
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf;
.endp
.public _Set_CLK_High
_Set_CLK_High:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //CLK置高
r3=r3|CLK
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf
.endp
.public _Set_DIN_Low
_Set_DIN_Low:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //DIN置低
r4=DIN^0xffff
r3=r3&r4
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf;
.endp
.public _Set_DIN_High
_Set_DIN_High:.proc
push r3,r4 to [sp]
r3=[P_IOB_Data] //DIN置高
r3=r3|DIN
[P_IOB_Data] =r3
pop r3,r4 from [sp]
retf
.endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -