📄 icc.lst
字号:
__text_start:
__start:
000D E5CF LDI R28,0x5F
000E E0D2 LDI R29,2
000F BFCD OUT P3D,R28
0010 BFDE OUT P3E,R29
0011 51C0 SUBI R28,0x10
0012 40D0 SBCI R29,0
0013 EA0A LDI R16,0xAA
0014 8308 STD R16,0+Y
0015 2400 CLR R0
0016 E6E0 LDI R30,0x60
0017 E0F0 LDI R31,0
0018 E010 LDI R17,0
0019 36E0 CPI R30,0x60
001A 07F1 CPC R31,R17
001B F011 BEQ 0x001E
001C 9201 ST R0,Z+
001D CFFB RJMP 0x0019
001E 8300 STD R16,0+Z
001F E1EA LDI R30,0x1A
0020 E0F0 LDI R31,0
0021 E6A0 LDI R26,0x60
0022 E0B0 LDI R27,0
0023 E010 LDI R17,0
0024 31EA CPI R30,0x1A
0025 07F1 CPC R31,R17
0026 F021 BEQ 0x002B
0027 95C8 LPM
0028 9631 ADIW R30,1
0029 920D ST R0,X+
002A CFF9 RJMP 0x0024
002B D057 RCALL _main
_exit:
002C CFFF RJMP _exit
_receive_byte:
i --> R20
temp --> R22
002D D12F RCALL push_gset2
FILE: D:\sl279\test\ICCAVR\icc.c
(0000) /************************************************************/
(0001) /* 广州天河双龙电子有限公司 */
(0002) /* http://www.sl.com.cn */
(0003) /* SL279键盘与LED显示控制芯片演示程序(ICCAVR版本) */
(0004) /* 程序作者:詹卫前 */
(0005) /*接线方式:CS=PORTC.4 CLK=PORTC.3 DATA=PORTC.2 KEY=PORTC.1 */
(0006) /* 处理器:AT90S8515 晶振频率:8MHZ */
(0007) /* SL279 晶振频率:12MHZ 使用SLAVR库 */
(0008) /************************************************************/
(0009) #include<io8515.h>
(0010) #include<slavr.h>
(0011) /* 字节接收函数 */
(0012) unsigned char receive_byte(void)
(0013) {
(0014) unsigned char i,temp=0;
002E 2766 CLR R22
(0015) DDRC&=0xfb;
002F B384 IN R24,P14
0030 7F8B ANDI R24,0xFB
0031 BB84 OUT P14,R24
(0016) delay_us(90);
0032 E50A LDI R16,0x5A
0033 E010 LDI R17,0
0034 D0F1 RCALL _delay_us
(0017) for(i=0;i<8;i++)
0035 2744 CLR R20
0036 C00B RJMP 0x0042
(0018) {
(0019) temp=temp<<1;
0037 0F66 LSL R22
(0020) PORTC|=0x08;//clk=1
0038 9AAB SBI P15,3
(0021) delay_us(10);
0039 E00A LDI R16,0xA
003A E010 LDI R17,0
003B D0EA RCALL _delay_us
(0022) if((PINC&0x04)!=0)
003C 9B9A SBIS P13,2
003D C001 RJMP 0x003F
(0023) temp|=0x01;
003E 6061 ORI R22,1
(0024) PORTC&=0xf7;//clk=0
003F D128 RCALL <created procedures>
(0025) delay_us(10);
0040 D0E5 RCALL _delay_us
(0026) }
0041 9543 INC R20
0042 3048 CPI R20,0x8
0043 F398 BCS 0x0037
(0027) DDRC|=0x04;
0044 9AA2 SBI P14,2
(0028) return temp;
0045 2F06 MOV R16,R22
0046 2711 CLR R17
0047 D118 RCALL pop_gset2
0048 9508 RET
_send_byte:
i --> R20
para --> R22
0049 D113 RCALL push_gset2
004A 2F60 MOV R22,R16
(0029) }
(0030) /* 字节发送函数 */
(0031) void send_byte(unsigned char para)
(0032) {
(0033) unsigned char i;
(0034) PORTC&=0xef;//cs=0
004B B385 IN R24,P15
004C 7E8F ANDI R24,0xEF
004D BB85 OUT P15,R24
(0035) delay_us(90);
004E E50A LDI R16,0x5A
004F E010 LDI R17,0
0050 D0D5 RCALL _delay_us
(0036) for(i=0;i<8;i++)
0051 2744 CLR R20
0052 C011 RJMP 0x0064
(0037) {
(0038) if((para&0x80)==0x80)
0053 2F86 MOV R24,R22
0054 7880 ANDI R24,0x80
0055 3880 CPI R24,0x80
0056 F411 BNE 0x0059
(0039) PORTC|=0x04;//data=1
0057 9AAA SBI P15,2
0058 C003 RJMP 0x005C
(0040) else
(0041) PORTC&=0xfb;//data=0
0059 B385 IN R24,P15
005A 7F8B ANDI R24,0xFB
005B BB85 OUT P15,R24
(0042) PORTC|=0x08;//clk=1
005C 9AAB SBI P15,3
(0043) delay_us(10);
005D E00A LDI R16,0xA
005E E010 LDI R17,0
005F D0C6 RCALL _delay_us
0060 D107 RCALL <created procedures>
(0044) PORTC&=0xf7;//clk=0
(0045) delay_us(10);
0061 D0C4 RCALL _delay_us
(0046) para=para<<1;
0062 0F66 LSL R22
(0047) }
0063 9543 INC R20
0064 3048 CPI R20,0x8
0065 F368 BCS 0x0053
(0048) }
0066 D0F9 RCALL pop_gset2
0067 9508 RET
_write279:
cmd2 --> R20
cmd1 --> R22
0068 D0F4 RCALL push_gset2
0069 2F42 MOV R20,R18
006A 2F60 MOV R22,R16
(0049) /* 写sl279双字节命令 */
(0050) void write279(unsigned char cmd1, unsigned char cmd2)
(0051) {
(0052) send_byte (cmd1);
006B 2F06 MOV R16,R22
006C DFDC RCALL _send_byte
(0053) send_byte (cmd2);
006D 2F04 MOV R16,R20
006E DFDA RCALL _send_byte
(0054) PORTC|=0x10;
006F 9AAC SBI P15,4
(0055) }
0070 D0EF RCALL pop_gset2
0071 9508 RET
_test1:
cmd --> R20
0072 D0D3 RCALL push_gset1
0073 2F40 MOV R20,R16
(0056) void test1(unsigned char cmd)
(0057) {
(0058) send_byte(cmd);
0074 2F04 MOV R16,R20
0075 DFD3 RCALL _send_byte
(0059) PORTC|=0x10;
0076 9AAC SBI P15,4
(0060) delay_ms(3000);
0077 EB08 LDI R16,0xB8
0078 E01B LDI R17,0xB
0079 D0BE RCALL _delay_ms
(0061) }
007A D0CE RCALL pop_gset1
007B 9508 RET
(0062) /* MCU初始化 */
(0063) void mcu_init(void)
(0064) {
(0065) MCUCR=0x00;
_mcu_init:
007C 2422 CLR R2
007D BE25 OUT P35,R2
(0066) DDRC=0xfd;
007E EF8D LDI R24,0xFD
007F BB84 OUT P14,R24
(0067) PORTC=0xf3;
0080 EF83 LDI R24,0xF3
0081 BB85 OUT P15,R24
(0068) }
0082 9508 RET
(0069) /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -