📄 icc.lis
字号:
.module icc.c
.area text(rom, con, rel)
0000 .dbfile D:\sl279\test\ICCAVR\icc.c
0000 .dbfunc s receive_byte _receive_byte fI
; i -> R20
; temp -> R22
.even
0000 _receive_byte::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 14
; /************************************************************/
; /* 广州天河双龙电子有限公司 */
; /* http://www.sl.com.cn */
; /* SL279键盘与LED显示控制芯片演示程序(ICCAVR版本) */
; /* 程序作者:詹卫前 */
; /*接线方式:CS=PORTC.4 CLK=PORTC.3 DATA=PORTC.2 KEY=PORTC.1 */
; /* 处理器:AT90S8515 晶振频率:8MHZ */
; /* SL279 晶振频率:12MHZ 使用SLAVR库 */
; /************************************************************/
; #include<io8515.h>
; #include<slavr.h>
; /* 字节接收函数 */
; unsigned char receive_byte(void)
; {
0002 .dbline 15
; unsigned char i,temp=0;
0002 6627 clr R22
0004 .dbline 16
; DDRC&=0xfb;
0004 84B3 in R24,0x14
0006 8B7F andi R24,251
0008 84BB out 0x14,R24
000A .dbline 17
; delay_us(90);
000A 0AE5 ldi R16,90
000C 10E0 ldi R17,0
000E 00D0 rcall _delay_us
0010 .dbline 18
; for(i=0;i<8;i++)
0010 4427 clr R20
0012 0FC0 rjmp L5
0014 L2:
0014 .dbline 19
; {
0014 .dbline 20
; temp=temp<<1;
0014 660F lsl R22
0016 .dbline 21
; PORTC|=0x08;//clk=1
0016 AB9A sbi 0x15,3
0018 .dbline 22
; delay_us(10);
0018 0AE0 ldi R16,10
001A 10E0 ldi R17,0
001C 00D0 rcall _delay_us
001E .dbline 23
; if((PINC&0x04)!=0)
001E 9A9B sbis 0x13,2
0020 01C0 rjmp L6
0022 .dbline 24
; temp|=0x01;
0022 6160 ori R22,1
0024 L6:
0024 .dbline 25
0024 85B3 in R24,0x15
0026 877F andi R24,247
0028 85BB out 0x15,R24
002A .dbline 26
002A 0AE0 ldi R16,10
002C 10E0 ldi R17,0
002E 00D0 rcall _delay_us
0030 .dbline 27
0030 L3:
0030 .dbline 18
0030 4395 inc R20
0032 L5:
0032 .dbline 18
0032 4830 cpi R20,8
0034 78F3 brlo L2
0036 .dbline 28
; PORTC&=0xf7;//clk=0
; delay_us(10);
; }
; DDRC|=0x04;
0036 A29A sbi 0x14,2
0038 .dbline 29
; return temp;
0038 062F mov R16,R22
003A 1127 clr R17
003C .dbline -2
003C L1:
003C 00D0 rcall pop_gset2
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbsym r i 20 c
0040 .dbsym r temp 22 c
0040 .dbfunc s send_byte _send_byte fI
; i -> R20
; para -> R22
.even
0040 _send_byte::
0040 00D0 rcall push_gset2
0042 602F mov R22,R16
0044 .dbline -1
0044 .dbline 33
; }
; /* 字节发送函数 */
; void send_byte(unsigned char para)
; {
0044 .dbline 35
; unsigned char i;
; PORTC&=0xef;//cs=0
0044 85B3 in R24,0x15
0046 8F7E andi R24,239
0048 85BB out 0x15,R24
004A .dbline 36
; delay_us(90);
004A 0AE5 ldi R16,90
004C 10E0 ldi R17,0
004E 00D0 rcall _delay_us
0050 .dbline 37
; for(i=0;i<8;i++)
0050 4427 clr R20
0052 15C0 rjmp L12
0054 L9:
0054 .dbline 38
; {
0054 .dbline 39
; if((para&0x80)==0x80)
0054 862F mov R24,R22
0056 8078 andi R24,128
0058 8038 cpi R24,128
005A 11F4 brne L13
005C .dbline 40
; PORTC|=0x04;//data=1
005C AA9A sbi 0x15,2
005E 03C0 rjmp L14
0060 L13:
0060 .dbline 42
; else
; PORTC&=0xfb;//data=0
0060 85B3 in R24,0x15
0062 8B7F andi R24,251
0064 85BB out 0x15,R24
0066 L14:
0066 .dbline 43
0066 AB9A sbi 0x15,3
0068 .dbline 44
0068 0AE0 ldi R16,10
006A 10E0 ldi R17,0
006C 00D0 rcall _delay_us
006E .dbline 45
006E 85B3 in R24,0x15
0070 877F andi R24,247
0072 85BB out 0x15,R24
0074 .dbline 46
0074 0AE0 ldi R16,10
0076 10E0 ldi R17,0
0078 00D0 rcall _delay_us
007A .dbline 47
007A 660F lsl R22
007C .dbline 48
007C L10:
007C .dbline 37
007C 4395 inc R20
007E L12:
007E .dbline 37
007E 4830 cpi R20,8
0080 48F3 brlo L9
0082 .dbline -2
0082 .dbline 49
; PORTC|=0x08;//clk=1
; delay_us(10);
; PORTC&=0xf7;//clk=0
; delay_us(10);
; para=para<<1;
; }
; }
0082 L8:
0082 00D0 rcall pop_gset2
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym r i 20 c
0086 .dbsym r para 22 c
0086 .dbfunc s write279 _write279 fI
; cmd2 -> R20
; cmd1 -> R22
.even
0086 _write279::
0086 00D0 rcall push_gset2
0088 422F mov R20,R18
008A 602F mov R22,R16
008C .dbline -1
008C .dbline 52
; /* 写sl279双字节命令 */
; void write279(unsigned char cmd1, unsigned char cmd2)
; {
008C .dbline 53
; send_byte (cmd1);
008C 062F mov R16,R22
008E D8DF rcall _send_byte
0090 .dbline 54
; send_byte (cmd2);
0090 042F mov R16,R20
0092 D6DF rcall _send_byte
0094 .dbline 55
; PORTC|=0x10;
0094 AC9A sbi 0x15,4
0096 .dbline -2
0096 .dbline 56
; }
0096 L15:
0096 00D0 rcall pop_gset2
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r cmd2 20 c
009A .dbsym r cmd1 22 c
009A .dbfunc s test1 _test1 fI
; cmd -> R20
.even
009A _test1::
009A 00D0 rcall push_gset1
009C 402F mov R20,R16
009E .dbline -1
009E .dbline 58
; void test1(unsigned char cmd)
; {
009E .dbline 59
; send_byte(cmd);
009E 042F mov R16,R20
00A0 CFDF rcall _send_byte
00A2 .dbline 60
; PORTC|=0x10;
00A2 AC9A sbi 0x15,4
00A4 .dbline 61
; delay_ms(3000);
00A4 08EB ldi R16,3000
00A6 1BE0 ldi R17,11
00A8 00D0 rcall _delay_ms
00AA .dbline -2
00AA .dbline 62
; }
00AA L16:
00AA 00D0 rcall pop_gset1
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r cmd 20 c
00AE .dbfunc s mcu_init _mcu_init fI
.even
00AE _mcu_init::
00AE .dbline -1
00AE .dbline 65
; /* MCU初始化 */
; void mcu_init(void)
; {
00AE .dbline 66
; MCUCR=0x00;
00AE 2224 clr R2
00B0 25BE out 0x35,R2
00B2 .dbline 67
; DDRC=0xfd;
00B2 8DEF ldi R24,253
00B4 84BB out 0x14,R24
00B6 .dbline 68
; PORTC=0xf3;
00B6 83EF ldi R24,243
00B8 85BB out 0x15,R24
00BA .dbline -2
00BA .dbline 69
; }
00BA L17:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbfunc s main _main fI
; count -> R20
; temp -> R22
; i -> R10
.even
00BC _main::
00BC .dbline -1
00BC .dbline 72
; /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -