?? max7219_function_extra.asm
字號(hào):
.include hardware.inc
.define P_SIO_Data 0x701A
.define LOAD 0x0004 //iob2
.define CLK 0x0001 //iob0
.define DIN 0x0002 //iob1
//.define LOAD 0x0002 //iob1,檢測(cè)用
//.define CLK 0x0004 //iob2,檢測(cè)用
//.define DIN 0x0001 //iob0,檢測(cè)用
.code
//===================================================================================================
//函數(shù):Init_SIO()
//功能:初始化串行輸出
//===================================================================================================
.public _Init_SIO
_Init_SIO:.PROC
R1=0x00d9; //設(shè)置為輸出端口
[P_SIO_Ctrl]=r1; //B0,B1分別為sclk,sdata引腳,串行地址無(wú)
RETF
.ENDP
//======================================================================================================
//函數(shù):void sent_LED( unsigned int n )
//功能:輸出16位數(shù)據(jù)到MAX7219
//輸入:16位數(shù)據(jù)
//======================================================================================================
.public _sent_LED_Bake
_sent_LED_Bake:.proc
INT OFF //關(guān)中斷
PUSH bp TO [sp]; //彈出入口參數(shù)共兩個(gè)入口參數(shù)
bp = sp + 1
r2 = [bp+3] //取出第一個(gè)入口參數(shù)
r3=[P_IOB_Data] //LOAD置低
r4=LOAD^0xffff
r3=r3&r4
[P_IOB_Data] =r3
// R1=0x00d9; //設(shè)置為輸出端口
// [P_SIO_Ctrl]=r1; //B0,B1分別為sclk,sdata引腳,串行地址無(wú)
r3=r2;
r3=r3 LSR 4; //高8位
r3=r3 LSR 4;
r2=r2&0x00ff; //低8位
r1=0x0000 //寫入串行輸入輸出啟動(dòng)端口
[P_SIO_Start]=r1;
//高8位傳輸
[P_SIO_Data]=r3; //寫入傳送數(shù)據(jù)
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 //讀出占用標(biāo)志位busy
test r1,[P_SIO_Start] //忙,沒(méi)有寫完
jnz ?L_busy //繼續(xù)檢測(cè)
[P_SIO_Stop]=r1; //寫入任意一個(gè)值,停止
retf
.endp
//=============================================================================================
//相關(guān)LOAD ,CLK, DIN位改變函數(shù):
//=============================================================================================
.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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -