📄 splc501hardware.lst
字号:
.if C_BusHighLow
.else
R1 = R1 lsr 4;
R1 = R1 lsr 4;
.endif
0000E87E 19 D3 00 70 [P_IO_Data_Data]=r1
0000E880 40 F0 CC E8 CALL F_Send_data
0000E882 02 93 R1 = R2
0000E883 59 93 R1 = R1 LSl 4;
0000E884 59 93 R1 = R1 LSl 4;
0000E885 09 B3 00 0F R1 &= 0x0F00;
0000E887 88 D2 push r1,r1 to [sp]
0000E888 11 93 00 70 r1=[P_IO_Data_Data]
// r1&=0x00ff
0000E88A 88 D4 push r2 to [sp]
0000E88B 0A 95 00 FF r2=C_DataBus
0000E88D 0A 85 FF FF r2^=0xffff
0000E88F 02 B3 r1&=r2
0000E890 88 92 pop r2 from [sp]
0000E891 19 D3 00 70 [P_IO_Data_Data]=r1
0000E893 88 90 pop r1,r1 from [sp]
0000E894 11 A3 00 70 r1|=[P_IO_Data_Data]
.if C_BusHighLow
.else
R1 = R1 lsr 4;
R1 = R1 lsr 4;
.endif
0000E896 19 D3 00 70 [P_IO_Data_Data]=r1
0000E898 40 F0 CC E8 CALL F_Send_data
0000E89A 88 94 pop r3 from [sp]
0000E89B 88 90 pop r1 from [sp]
0000E89C 90 9A RETF;
//////////////////////////////////////////////////////////////////////////////
//Filename : F_Fill_All_LCD_Value
//Function : Clear all LCD dots
//Input : Value (R3 : b0~7)
//Output : None
//Destroy : R1,R2
//////////////////////////////////////////////////////////////////////////////
.public _Fill_All_LCD_Value
.public F_Fill_All_LCD_Value
_Fill_All_LCD_Value:
F_Fill_All_LCD_Value:
0000E89D 0B B7 00 FF R3 &= 0xFF00; //Filling value
0000E89F 40 92 R1 = 0x0000; //Page No. = 0
.if C_BusHighLow
.else
R3 = R3 lsr 4;
R3 = R3 lsr 4;
.endif
L_Fill_Page_Loop:
0000E8A0 98 D6 PUSH R1,R3 TO [SP]; //Store R1 temporarily
0000E8A1 40 F0 3E E8 CALL F_Set_LCD_Page_No; //Page No. = 0
0000E8A3 40 94 R2 = 0x0000; //Column address (00H ~ 63H)
0000E8A4 40 F0 67 E8 CALL F_Set_LCD_Column_Addr; //Column Addr. = 0
0000E8A6 98 90 POP R1,R3 FROM [SP]; //Restore R1
0000E8A7 0A 95 84 00 R2 = 0x0084; //Max. column address +1
L_Fill_Column_Loop:
0000E8A9 88 D6 push r3,r3 to[sp]
0000E8AA 13 97 00 70 r3=[P_IO_Data_Data]
0000E8AC 88 D4 push r2 to [sp]
0000E8AD 0A 95 00 FF r2=C_DataBus
0000E8AF 0A 85 FF FF r2^=0xffff
0000E8B1 02 B7 r3&=r2
0000E8B2 88 92 pop r2 from [sp]
0000E8B3 1B D7 00 70 [P_IO_Data_Data]=r3
0000E8B5 88 94 pop r3,r3 from [sp]
0000E8B6 13 A7 00 70 r3|=[P_IO_Data_Data]
0000E8B8 1B D7 00 70 [P_IO_Data_Data]=r3
0000E8BA 88 D6 PUSH R3,R3 TO [SP];
0000E8BB 50 96 r3=C_AOP_Pin //0x2000
0000E8BC 13 A7 05 70 r3|=[P_IO_Control_Data]
0000E8BE 1B D7 05 70 [P_IO_Control_Data]=r3
0000E8C0 40 F0 CC E8 CALL F_Send_data ////xxxxxxxx
0000E8C2 88 94 POP R3,R3 FROM [SP]
0000E8C3 41 24 R2 -= 0x0001; //Next column address
0000E8C4 5C 4E JNZ L_Fill_Column_Loop; //End Page ?
0000E8C5 41 02 R1 += 0x0001;
0000E8C6 48 42 CMP R1,0x0008; //Next page address
0000E8C7 68 4E JNE L_Fill_Page_Loop;
0000E8C8 41 92 R1 = 0x0001;
0000E8C9 19 D3 12 70 [P_Watchdog_Clear] = R1; // reset watchdog
0000E8CB 90 9A RETF;
//////////////////////////////////////////////////////////////////////////////
//destory: r3
//////////////////////////////////////////////////////////////////////
.public _Send_data
.public F_Send_data
F_Send_data:
_Send_data: .proc
0000E8CC 13 97 05 70 r3=[P_IO_Control_Data]
0000E8CE 0B A7 40 00 r3|=C_EP_Pin //0x4000
0000E8D0 1B D7 05 70 [P_IO_Control_Data]=r3
0000E8D2 88 D2 push r1 to [sp]
0000E8D3 09 93 40 00 r1=C_EP_Pin
0000E8D5 09 83 FF FF r1^=0xffff
0000E8D7 01 B7 r3&=r1 //0xbfff
0000E8D8 88 90 pop r1 from [sp]
0000E8D9 1B D7 05 70 [P_IO_Control_Data]=r3
0000E8DB 88 D2 push r1 to [sp]
0000E8DC 50 92 r1=C_AOP_Pin
0000E8DD 09 83 FF FF r1^=0xffff
0000E8DF 01 B7 r3&=r1
0000E8E0 60 92 r1=C_RWP_Pin
0000E8E1 09 83 FF FF r1^=0xffff
0000E8E3 01 B7 r3&=r1
0000E8E4 88 90 pop r1 from [sp]
// r3&=0x1fff
0000E8E5 1B D7 05 70 [P_IO_Control_Data]=r3
0000E8E7 90 9A retf
.endp
//////////////////////////////////////////////////////////////////////////////
F_Delay_Bus_Time:
0000E8E8 90 9A RETF;
//////////////////////////////////////////////////////////////////////////////
//Filename : F_Read_Lcd_data
//Function : frist read appoint data on lcd
//Input :
//Output : r3
//Destroy : R1,r3
//////////////////////////////////////////////////////////////////////////////
.public _Read_Lcd_data
.public F_Read_Lcd_data
_Read_Lcd_data: .proc
F_Read_Lcd_data:
0000E8E9 11 93 02 70 r1=[P_IO_Data_Dir]
0000E8EB 88 D4 push r2 to [sp]
0000E8EC 0A 95 00 FF r2=C_DataBus
0000E8EE 0A 85 FF FF r2^=0xffff
0000E8F0 02 B3 r1&=r2
0000E8F1 88 92 pop r2 from [sp]
// r1&=0x00ff
0000E8F2 19 D3 02 70 [P_IO_Data_Dir]=r1
// r1=[P_IOA_Attrib]
// r1|=0xff00
// [P_IOA_Attrib]=r1
// r3=0x00fd
0000E8F4 13 97 05 70 r3=[P_IO_Control_Data]
// r3|=0xb000
0000E8F6 50 A6 r3|=C_AOP_Pin
0000E8F7 60 A6 r3|=C_RWP_Pin
0000E8F8 09 93 40 00 r1=C_EP_Pin
0000E8FA 09 83 FF FF r1^=0xffff
0000E8FC 01 B7 r3&=r1
0000E8FD 1B D7 05 70 [P_IO_Control_Data]=r3
0000E8FF 40 F0 CC E8 CALL F_Send_data //Dummy read after setting column address immediately
// r3=0x00fd
0000E901 13 97 05 70 r3=[P_IO_Control_Data]
0000E903 50 A6 r3|=C_AOP_Pin
0000E904 60 A6 r3|=C_RWP_Pin
0000E905 09 93 40 00 r1=C_EP_Pin
0000E907 09 83 FF FF r1^=0xffff
0000E909 01 B7 r3&=r1
0000E90A 1B D7 05 70 [P_IO_Control_Data]=r3
0000E90C 40 F0 CC E8 CALL F_Send_data //Read Data
0000E90E 13 97 00 70 R3 = [P_IO_Data_Data] //Get it
.if C_BusHighLow
.else
R3 = R3 lsl 4;
R3 = R3 lsl 4;
.endif
0000E910 11 93 02 70 r1=[P_IO_Data_Dir]
0000E912 09 A3 00 FF r1|=C_DataBus
0000E914 19 D3 02 70 [P_IO_Data_Dir]=r1
0000E916 90 9A retf
.endp
//////////////////////////////////////////////////////////////////////
//input: r3
//destory: r3
//////////////////////////////////////////////////////////////////////
.PUBLIC F_Display_point
//_Display_point: .proc
F_Display_point:
0000E917 00 EE nop
0000E918 00 EE nop
0000E919 88 D6 push r3,r3 to[sp]
0000E91A 13 97 00 70 r3=[P_IO_Data_Data]
0000E91C 0A 95 00 FF r2=C_DataBus
0000E91E 0A 85 FF FF r2^=0xffff
0000E920 02 B7 r3&=r2
0000E921 1B D7 00 70 [P_IO_Data_Data]=r3
0000E923 88 94 pop r3,r3 from [sp]
0000E924 5B 97 r3=r3 lsl 0x04
0000E925 5B 97 r3=r3 lsl 0x04
// R3 |= 0x00f4; //Write data
.if C_BusHighLow
.else
R3 = R3 lsr 4;
R3 = R3 lsr 4;
.endif
0000E926 13 A7 00 70 r3|=[P_IO_Data_Data]
0000E928 1B D7 00 70 [P_IO_Data_Data]=r3
0000E92A 13 97 05 70 r3=[P_IO_Control_Data]
0000E92C 50 A6 r3|=C_AOP_Pin //0x2000
0000E92D 1B D7 05 70 [P_IO_Control_Data]=r3
0000E92F 40 F0 CC E8 CALL F_Send_data
0000E931 90 9A retf
//////////////////////////////////////////////////////////////////////////////
//Filename : F_Init_IO
//Function : Intialize I/O
//Input : None
//Output : None
//Destory : R1
//////////////////////////////////////////////////////////////////////////////
.public F_Init_IO
.public _Init_IO
_Init_IO:
F_Init_IO: .proc
0000E932 11 93 02 70 r1=[P_IO_Data_Dir]
0000E934 09 A3 00 FF r1|=C_DataBus
0000E936 19 D3 02 70 [P_IO_Data_Dir]=r1
0000E938 11 93 03 70 r1=[P_IO_Data_Attrib]
0000E93A 09 A3 00 FF r1|=C_DataBus
0000E93C 19 D3 03 70 [P_IO_Data_Attrib]=r1
0000E93E 11 93 00 70 r1=[P_IO_Data_Data]
0000E940 0A 95 00 FF r2=C_DataBus
0000E942 0A 85 FF FF r2^=0xffff
0000E944 02 B3 r1&=r2
0000E945 19 D3 00 70 [P_IO_Data_Data]=r1 //Initial porta
0000E947 11 93 07 70 r1=[P_IO_Control_Dir]
0000E949 50 A2 r1|=C_AOP_Pin
0000E94A 09 A3 40 00 r1|=C_EP_Pin
0000E94C 60 A2 r1|=C_RWP_Pin
0000E94D 19 D3 07 70 [P_IO_Control_Dir]=r1
0000E94F 12 95 08 70 r2=[P_IO_Control_Attrib]
0000E951 01 A5 r2|=r1
0000E952 1A D5 08 70 [P_IO_Control_Attrib]=r2
0000E954 12 95 05 70 r2=[P_IO_Control_Data]
0000E956 09 83 FF FF r1^=0xffff
0000E958 01 B5 r2&=r1
0000E959 19 D3 05 70 [P_IO_Control_Data]=r1
0000E95B 90 9A RETF
.endp
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -