?? splc501driver_io.asm
字號:
//***************************************************************************//
//文件描述:SPLC501底層驅(qū)動(dòng)程序,主要包括對液晶的IO口初始化、寫指令、寫數(shù)據(jù)、
//讀數(shù)據(jù),以及西文ASCII表數(shù)據(jù)
//聲明: 小丑 20050518 Sunnorth Mz Design
//
//
//***************************************************************************//
.include SPLC501Driver_IO.inc
.ram
.code
//***************************************************************************//
//程序:F_SPLC501_Initial_IO()
//描述:SPLC501接口的初始化程序 C語言調(diào)用,匯編語言調(diào)用
//參數(shù):無
//聲明:小丑 20050518 sunnorth Mz Design
//注意:破壞R1寄存器,保護(hù)R1
//***************************************************************************//
.public _F_SPLC501_Initial_IO
_F_SPLC501_Initial_IO:
F_SPLC501_Initial_IO:
push r1 to [sp]
r1 = [P_IO_Data_Di]
r1 |= M_IO_DATA_MASK
[P_IO_Data_Di] = r1
r1 = [P_IO_Data_A]
r1 |= M_IO_DATA_MASK
[P_IO_Data_A] = r1
r1 = [P_IO_Data_B]
r1 |= M_IO_DATA_MASK
[P_IO_Data_D] = r1
r1 = [P_IO_Ctrl_Di]
r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
[P_IO_Ctrl_Di] = r1
r1 = [P_IO_Ctrl_A]
r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
[P_IO_Ctrl_A] = r1
r1 = [P_IO_Ctrl_B]
r1 &= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
[P_IO_Ctrl_D] = r1
pop r1 from [sp]
retf
//***************************************************************************//
//程序:F_SPLC501_Write_Com()
//描述:往SPLC501里寫一個(gè)字節(jié)指令 C語言調(diào)用,匯編語言調(diào)用
//參數(shù):r1送入要傳送的指令
//聲明:小丑 20050518 sunnorth Mz Design
//注意:破壞R1寄存器,保護(hù)R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Com
_F_SPLC501_Write_Com:
F_SPLC501_Write_Com:
push r2,r3 to [sp]
push r5 to [sp]
r2 = [P_IO_Ctrl_B] //得到IOB口的狀態(tài)
r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Edit by xinqiang
[P_IO_Ctrl_B] = r2 //EP Low
r2 = [P_IO_Ctrl_B]
r2 &= ~(M_IO_AO+M_IO_RW)
[P_IO_Ctrl_B] = r2 //AO RW Low
.ifdef DATA_PORT_HIGHT
r1 = r1 lsl 4
r1 = r1 lsl 4
.endif
r3 = [P_IO_Data_B]
r3 &= ~M_IO_DATA_MASK
r1 &= M_IO_DATA_MASK //Get Low Data Command
r1 = r1+r3
[P_IO_Data] = r1 //往數(shù)據(jù)口送數(shù)據(jù)
nop
r2 |= M_IO_EP //EP to Hight
[P_IO_Ctrl] = r2
nop
r2 &= ~M_IO_EP //EP to Low
r2 |= M_IO_CS //CS to hight 20050613 Edit by xinqiang
[P_IO_Ctrl] = r2
pop r5 from [sp]
pop r2,r3 from [sp]
retf
//***************************************************************************//
//程序:F_SPLC501_Write_Data()
//描述:往SPLC501里寫一個(gè)字節(jié)數(shù)據(jù) C語言調(diào)用,匯編語言調(diào)用
//參數(shù):r1送入要傳送的數(shù)據(jù)
//聲明:小丑 20050518 sunnorth Mz Design
//注意:破壞R1寄存器,保護(hù)R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Data
_F_SPLC501_Write_Data:
F_SPLC501_Write_Data:
push r2 to [sp]
r2 = [P_IO_Ctrl_B] //得到IOB口的狀態(tài)
r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
[P_IO_Ctrl_B] = r2 //EP Low
r2 = [P_IO_Ctrl_B]
r2 |= M_IO_AO
r2 &= ~(M_IO_RW)
[P_IO_Ctrl_B] = r2 //AO Hight, RW Low
.ifdef DATA_PORT_HIGHT
r1 = r1 lsl 4
r1 = r1 lsl 4
.endif
r3 = [P_IO_Data_B]
r3 &= ~M_IO_DATA_MASK
r1 &= M_IO_DATA_MASK //Get Low Data Command
r1 = r1+r3
[P_IO_Data] = r1 //往數(shù)據(jù)口送數(shù)據(jù)
nop
r2 |= M_IO_EP //EP to Hight
[P_IO_Ctrl] = r2
nop
r2 &= ~M_IO_EP //EP to Low
r2 |= M_IO_CS //CS to Hight 20050613 Editby xinqiag
[P_IO_Ctrl] = r2
pop r2 from [sp]
retf
//***************************************************************************//
//程序:F_SPLC501_Read_Data()
//描述:從SPLC501里讀一個(gè)字節(jié)數(shù)據(jù) C語言調(diào)用,匯編語言調(diào)用
//參數(shù):r1輸出傳送的數(shù)據(jù)
//聲明:小丑 20050518 sunnorth Mz Design
//注意:破壞R1寄存器,保護(hù)R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Read_Data
.public F_SPLC501_Read_Data
_F_SPLC501_Read_Data:
F_SPLC501_Read_Data:
call F_SPLC501_Read_Data1
call F_SPLC501_Read_Data1
retf
F_SPLC501_Read_Data1:
push r2 to [sp]
r2 = [P_IO_Data_Di] //設(shè)置數(shù)據(jù)口為輸入
r2 &= ~M_IO_DATA_MASK
[P_IO_Data_Di] = r2
r2 = [P_IO_Ctrl_B] //得到IOB口的狀態(tài)
r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
[P_IO_Ctrl_B] = r2 //EP Low
r2 |= (M_IO_AO+M_IO_RW)
[P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
nop
r2 |= M_IO_EP
[P_IO_Ctrl_B] = r2 //產(chǎn)生EP高電平,
nop
r2 &= ~M_IO_EP //EP to Low
[P_IO_Ctrl] = r2
r1 = [P_IO_Data]
r1 &= M_IO_DATA_MASK
r2 |= M_IO_CS
[P_IO_Ctrl] = r2
r2 = [P_IO_Data_Di] //恢復(fù)數(shù)據(jù)口為輸出狀態(tài)
r2 |= M_IO_DATA_MASK
[P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
r1 = r1 lsr 4
r1 = r1 lsr 4
.endif
pop r2 from [sp]
retf
//***************************************************************************//
//程序:F_SPLC501_Read_Status()
//描述:從SPLC501里讀狀態(tài)字?jǐn)?shù)據(jù) C語言調(diào)用,匯編語言調(diào)用
//參數(shù):r1輸出傳送的數(shù)據(jù)
//聲明:小丑 20050518 sunnorth Mz Design
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -