📄 readswitch.lis
字号:
.module ReadSwitch.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ReadSwitch.c
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ReadSwitch.c
0000 L3:
0000 .blkb 2
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ReadSwitch.c
0000 .dbfunc e ReadHC165Switch _ReadHC165Switch fV
0000 .dbstruct 0 3 ReadHC165Switch
0000 .dbfield 0 Device_Address c
0000 .dbfield 1 HC165Switch A[2:2]c
0000 .dbend
0000 .dbsym s Read_buffer L3 pc
0000 ; Readwitch -> R16,R17
0000 ; i -> R18
0000 ; j -> R20
0000 ; ret -> R16
.even
0000 _ReadHC165Switch::
0000 4A93 st -y,R20
0002 .dbline -1
0002 .dbline 22
0002 ;
0002 ; #include"include.h"
0002 ;
0002 ; #define CLK 7
0002 ; #define SH_LD 5
0002 ;
0002 ;
0002 ; #define SER_SL_HI() DDRB |= (1<<SH_LD)
0002 ; #define SER_SL_LO() DDRB &= ~(1<<SH_LD) //SH/LD 接PB5
0002 ;
0002 ; #define SER_CK_HI() DDRB |= (1<<CLK)
0002 ; #define SER_CK_LO() DDRB &= ~(1<<CLK) //SCK 接 PB7
0002 ;
0002 ; #define CLK_EN_HI() DDRB |= (1<<4)
0002 ; #define CLK_EN_LO() DDRB &= (1<<4)
0002 ;
0002 ; #define HC165Switch_Port() (PINB&(1<<6)) //输入 QH 接PB6
0002 ;
0002 ; //------------------------------------------------------------------------------
0002 ; //读AVR控制器地址码和扩展口的按键
0002 ; void ReadHC165Switch(void)
0002 ; {
0002 .dbline 25
0002 ; static unsigned char *Read_buffer;
0002 ; struct ReadHC165Switch *Readwitch;
0002 ; unsigned char i,j,ret = 0xff;
0002 0FEF ldi R16,255
0004 .dbline 26
0004 ; Read_buffer = Read74HC165Switch;
0004 80E0 ldi R24,<_Read74HC165Switch
0006 90E0 ldi R25,>_Read74HC165Switch
0008 90930100 sts L3+1,R25
000C 80930000 sts L3,R24
0010 .dbline 27
0010 ; CLK_EN_LO();
0010 87B3 in R24,0x17
0012 8071 andi R24,16
0014 87BB out 0x17,R24
0016 .dbline 29
0016 ; //数据锁存,在shift/load输入一脉冲
0016 ; SER_CK_LO();
0016 BF98 cbi 0x17,7
0018 .dbline 30
0018 ; SER_SL_HI();
0018 BD9A sbi 0x17,5
001A .dbline 31
001A ; asm("nop");
001A 0000 nop
001C .dbline 32
001C ; SER_SL_LO();
001C BD98 cbi 0x17,5
001E .dbline 33
001E ; asm("nop");
001E 0000 nop
0020 .dbline 34
0020 ; SER_SL_HI();
0020 BD9A sbi 0x17,5
0022 .dbline 35
0022 ; asm("nop");
0022 0000 nop
0024 .dbline 36
0024 ; asm("nop");
0024 0000 nop
0026 .dbline 38
0026 ; //读数据
0026 ; for(i=0;i<sizeof(struct ReadHC165Switch);i++)
0026 2227 clr R18
0028 1CC0 xjmp L7
002A L4:
002A .dbline 39
002A ; {
002A .dbline 40
002A ; for(j=0;j<8;j++)
002A 4427 clr R20
002C 0EC0 xjmp L11
002E L8:
002E .dbline 41
002E ; {
002E .dbline 42
002E ; SER_CK_HI();
002E BF9A sbi 0x17,7
0030 .dbline 43
0030 ; if(HC165Switch_Port()==0)
0030 B699 sbic 0x16,6
0032 03C0 rjmp L12
0034 X0:
0034 .dbline 44
0034 ; {
0034 .dbline 45
0034 ; ret <<= 1;
0034 000F lsl R16
0036 .dbline 46
0036 ; ret &= ~0x01;
0036 0E7F andi R16,254
0038 .dbline 47
0038 ; }
0038 02C0 xjmp L13
003A L12:
003A .dbline 49
003A ; else
003A ; {
003A .dbline 50
003A ; ret <<= 1;
003A 000F lsl R16
003C .dbline 51
003C ; ret |= 0x01;
003C 0160 ori R16,1
003E .dbline 52
003E ; }
003E L13:
003E .dbline 53
003E ; asm("nop");
003E 0000 nop
0040 .dbline 54
0040 ; asm("nop");
0040 0000 nop
0042 .dbline 55
0042 ; SER_CK_LO();
0042 BF98 cbi 0x17,7
0044 .dbline 56
0044 ; asm("nop");
0044 0000 nop
0046 .dbline 57
0046 ; asm("nop");
0046 0000 nop
0048 .dbline 58
0048 ; }
0048 L9:
0048 .dbline 40
0048 4395 inc R20
004A L11:
004A .dbline 40
004A 4830 cpi R20,8
004C 80F3 brlo L8
004E X1:
004E .dbline 59
004E ; *Read_buffer++ = ret;
004E E0910000 lds R30,L3
0052 F0910100 lds R31,L3+1
0056 0193 st Z+,R16
0058 F0930100 sts L3+1,R31
005C E0930000 sts L3,R30
0060 .dbline 60
0060 ; }
0060 L5:
0060 .dbline 38
0060 2395 inc R18
0062 L7:
0062 .dbline 38
0062 2330 cpi R18,3
0064 10F3 brlo L4
0066 X2:
0066 .dbline 61
0066 ; Readwitch = (struct ReadHC165Switch *)Read74HC165Switch;
0066 00E0 ldi R16,<_Read74HC165Switch
0068 10E0 ldi R17,>_Read74HC165Switch
006A .dbline -2
006A L2:
006A .dbline 0 ; func end
006A 4991 ld R20,y+
006C 0895 ret
006E .dbsym r Readwitch 16 pS[ReadHC165Switch]
006E .dbsym r i 18 c
006E .dbsym r j 20 c
006E .dbsym r ret 16 c
006E .dbend
006E .dbfunc e ReadSwitch _ReadSwitch fV
006E ; i -> R16
.even
006E _ReadSwitch::
006E .dbline -1
006E .dbline 66
006E ; }
006E ; //------------------------------------------------------------------------------
006E ; //扫描按键 PA,PC端口
006E ; void ReadSwitch(void)
006E ; {
006E .dbline 68
006E ; unsigned char i;
006E ; ReadSwitchPINA = 0;
006E 2224 clr R2
0070 20920000 sts _ReadSwitchPINA,R2
0074 .dbline 69
0074 ; ReadSwitchPINC = 0;
0074 20920000 sts _ReadSwitchPINC,R2
0078 .dbline 70
0078 ; for(i=0; i<40; i++);
0078 0027 clr R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -