⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max7219_function_extra.asm

📁 max7219控制程序
💻 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 + -