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

📄 d12.asm

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 ASM
字号:
//============================================================================//
// 文件名:    D12.asm
// 描  述:   处理D12芯片的读、写操作
// 日  期:   2003/04/03
// 库文件:   NONE
//=============================================================================//
.include hardware.inc

.public _SP_InitWriteD12
.public _SP_InitReadD12
.public F_SP_InitWriteD12 
.public F_SP_InitReadD12 
.public _SP_ReadD12 
.PUBLIC F_SP_ReadD12
.public _SP_WriteCmdOrDataToD12
.PUBLIC F_SP_WriteCmdOrDataToD12

.CODE
//=====================================================================
// 函数:    SP_InitWriteD12
// 语法:    void _SP_InitWriteD12(void)        (for c language)
// 描述:    写数据到D12初始化
// 参数:    无
// 返回:    无
//=====================================================================
_SP_InitWriteD12:         .proc
F_SP_InitWriteD12:
		push r1,r1 to [sp]
	    R1 = 0xFFF0
        [P_IOA_Dir] = R1      // Port IOA15- IOA8: 同相高电平输出
        [P_IOA_Attrib] = R1   // 
        R1 = 0xFFF0           //
        [P_IOA_Data] = R1     // 
        R1 = 0x003f           //
        [P_IOB_Data] = R1     //     
        pop r1,r1 from [sp]
        retf 
        .endp
//=====================================================================
// 函数:    SP_InitReadD12
// 语法:    void SP_InitReadD12(void)        (for c language)
// 描述:    初始化读数据
// 参数:    无
// 返回:    无
//=====================================================================
_SP_InitReadD12:          .PROC
F_SP_InitReadD12:
		push r1,r1 to [sp]
        R1 = 0x00F0 
        [P_IOA_Dir] = R1        // Port IOA15- IOA8: 设置为悬浮式输入input(FL)
        R1 = 0xFFF0             // 
        [P_IOA_Attrib] = R1     //
        R1 = 0x00F0             // 
        [P_IOA_Data] = R1       // 
        R1 = 0x003f             //
        [P_IOB_Data] = R1       // 
        pop r1,r1 from [sp]
        retf 
        .ENDP

//=====================================================================
// 函数:    SP_ReadD12
// 语法:    void SP_ReadD12(void)        (for c language)
// 描述:    SPCE061A从D12芯片读数据
// 参数:    无
// 返回:    无
//=====================================================================

_SP_ReadD12:      .PROC
        push bp to [sp] 
        bp = sp + 1 
        r1 = [bp+3]            // D12 Address
        call	F_SP_ReadD12   // R1: return value
        pop bp from [sp] 
        retf 
        .ENDP
           
F_SP_ReadD12:
        push r2,r3 to [sp]
        R1 = R1 lsl 4           // move 02  to IOA8-IOA15
        R1 = R1 lsl 4  
        R1&=0xfff0              //add at 0406
        [P_IOA_Data] = R1       // 送偶地址到D12
        R3 = 0x007f             // set CS_N=0, ALE=IOB8=1,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
        [P_IOB_Data] = R3     
        r1=0x003f
        [P_IOB_Data] = R1       // CS_N=0,ALE=0,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
        R1=0x002f; 
        [P_IOB_Data] = R1       // CS_N=0,ALE=0,RD_N=0,WR_N=1;RESET_N=1,INT_N=1
        nop;
        R1 = [P_IOA_Data]       // Get data
        R1 = R1 lsr 4           // Prepare high 8 bits Addr. to low 8 bits
        R2 = R1 lsr 4           // Get low byte data
        R1=R2;                  // R1 save ruturn value
        R2 = 0x003f;            //  CS_N=0,ALE=0,RD_N=1,WR_N=1 ;RESET_N=1,INT_N=1
        [P_IOB_Buffer] = R2     // 
        
		pop r2,r3 from [sp]     // don't pop r1(return value)   
        retf 
       
//=====================================================================
// 函数:    SP_WriteCmdOrDataToD12
// 语法:    void SP_WriteCmdOrDataToD12(void)        (for c language)
// 描述:    SPCE061A写数据或命令到D12芯片
// 参数:    无
// 返回:    无
//=====================================================================

_SP_WriteCmdOrDataToD12: .PROC
        push bp to [sp] 
        bp = sp + 1 
        push r1,r2 to [sp]
        r1 = [bp+3]              // Address
        r2 = [bp+4]              // Data
        call	F_SP_WriteCmdOrDataToD12
        pop r1,r2 from [sp]
        pop bp from [sp] 
        retf 
        .ENDP
F_SP_WriteCmdOrDataToD12:
        push r1,r3 to [sp]
       
        R1 = R1 lsl 4;
        R1 = R1 lsl 4; 
        R2 = R2 lsl 4           // shift low 8 bits data to high 8 bits
        R2 = R2 lsl 4           //  
        R1&=0xfff0;      
        [P_IOA_Data] = R1;      // move 02 or 03 Addr to IOA8-IOA15
        
        R1=0x007f;              // CS_N=0,ALE=IOA7=1,RD_N=1,WR_N=1,RESET_N=1,INT_N=1
        [P_IOB_Data] = R1;      // ALE=1
        
        R1=0x003f;              // CS_N=0,ALE=IOA7=0,RD_N=1,WR_N=1;RESET_N=1,INT_N=1
        [P_IOB_Data] = R1;	    // 在ALE 下降沿的时候,D12锁定地址;
       
        R1=0x001f; 
        R2&=0xfff0; 
        [P_IOA_Buffer] = R2     // 准备数据写入D12
        [P_IOB_Data] = R1;      // CS_N=0,ALE=0, RD_N=1, WR_N=0;RESET_N=1,INT_N=1
        nop;
        R1=0x003f;				//CS_N=0,ALE=0, RD_N=1, WR_N=1;
        [P_IOB_Data] = R1 
        pop r1,r3 from [sp]
        retf 
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -