📄 7289prog.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 52C8 SUBI R28,0x28
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E010C CALL _main
_exit:
004A CFFF RJMP _exit
_SETB:
k --> R20
004B 940E018C CALL push_gset1
004D 2F40 MOV R20,R16
FILE: F:\单片机编程\ICCAVR\7289prog\Test.c
(0001) #include <iom16v.h>
(0002) #define CS 0
(0003) #define CLK 1
(0004) #define DIO 2
(0005) #define KEY 3
(0006)
(0007) void SETB(unsigned char k)
(0008) {//这里的PORTB根据自己的程序修改
(0009) PORTB=PORTB|(1<<k);
004E E001 LDI R16,1
004F 2F14 MOV R17,R20
0050 940E01B3 CALL lsl8
0052 B228 IN R2,0x18
0053 2A20 OR R2,R16
0054 BA28 OUT 0x18,R2
0055 940E018F CALL pop_gset1
0057 9508 RET
_CLRS:
l --> R20
0058 940E018C CALL push_gset1
005A 2F40 MOV R20,R16
(0010) }
(0011)
(0012) void CLRS(unsigned char l)
(0013) {//这里的PORTB根据自己的程序修改
(0014) PORTB=PORTB&~(1<<l);
005B E001 LDI R16,1
005C 2F14 MOV R17,R20
005D 940E01B3 CALL lsl8
005F 2E20 MOV R2,R16
0060 9420 COM R2
0061 B238 IN R3,0x18
0062 2032 AND R3,R2
0063 BA38 OUT 0x18,R3
0064 940E018F CALL pop_gset1
0066 9508 RET
_Display:
DataPos --> Y+1
datanum --> R14
cToDIO --> R20
iToDIO --> R10
num --> Y+0
transdata --> R22
wait --> R12
position --> Y+14
Data --> Y+12
0067 940E0184 CALL push_arg4
0069 940E01AF CALL push_gset5
006B 9722 SBIW R28,2
(0015) }
(0016)
(0017) //初始化显示时Data=0xA4,position=0xFF
(0018) //Data为显示数据,position为数据显示位置
(0019) //Data为10进制或16进制数,只能一位一位发送
(0020) //position为1-8的数字
(0021) void Display(unsigned char Data,unsigned char position)
(0022) {
(0023) unsigned char DataPos=~0;
006C EF8F LDI R24,0xFF
006D 8389 STD Y+1,R24
(0024) unsigned char num=~0;
006E 8388 STD Y+0,R24
(0025) unsigned char wait=~0;
006F 2EC8 MOV R12,R24
(0026) unsigned char datanum=~0;
(0027) unsigned int transdata=~0;
0070 EF6F LDI R22,0xFF
0071 EF7F LDI R23,0xFF
(0028) unsigned int iToDIO=~0;
0072 EF8F LDI R24,0xFF
0073 EF9F LDI R25,0xFF
0074 015C MOVW R10,R24
(0029) unsigned char cToDIO=~0;
0075 EF4F LDI R20,0xFF
(0030) DDRB=0xFF;
0076 BAA7 OUT 0x17,R10
(0031) SETB(KEY);
0077 E003 LDI R16,3
0078 DFD2 RCALL _SETB
(0032) SETB(CS);
0079 2700 CLR R16
007A DFD0 RCALL _SETB
(0033) SETB(DIO);
007B E002 LDI R16,2
007C DFCE RCALL _SETB
(0034) datanum=2;
007D E082 LDI R24,2
007E 2EE8 MOV R14,R24
(0035) CLRS(CS);
007F 2700 CLR R16
0080 DFD7 RCALL _CLRS
(0036) if(Data!=0xA4)
0081 858C LDD R24,Y+12
0082 3A84 CPI R24,0xA4
0083 F409 BNE 0x0085
0084 C04C RJMP 0x00D1
(0037) {
(0038) DataPos=0xC8+position-1;
0085 858E LDD R24,Y+14
0086 5388 SUBI R24,0x38
0087 5081 SUBI R24,1
0088 8389 STD Y+1,R24
(0039) transdata=DataPos;
0089 2F68 MOV R22,R24
008A 2777 CLR R23
(0040) transdata=transdata<<8;
008B 2F76 MOV R23,R22
008C 2766 CLR R22
(0041) transdata=transdata+Data;
008D 842C LDD R2,Y+12
008E 2433 CLR R3
008F 0D62 ADD R22,R2
0090 1D73 ADC R23,R3
0091 C036 RJMP 0x00C8
(0042) while(datanum--)
(0043) {
(0044) wait=25;
0092 E189 LDI R24,0x19
0093 2EC8 MOV R12,R24
(0045) while(wait--)
0094 2C2C MOV R2,R12
0095 2433 CLR R3
0096 2D82 MOV R24,R2
0097 5081 SUBI R24,1
0098 2EC8 MOV R12,R24
0099 2022 TST R2
009A F7C9 BNE 0x0094
(0046) {;}
(0047) for(num=0;num<8;num++)
009B 2400 CLR R0
009C 8208 STD Y+0,R0
009D C027 RJMP 0x00C5
(0048) {
(0049) iToDIO=transdata&0x8000;
009E 01CB MOVW R24,R22
009F 7080 ANDI R24,0
00A0 7890 ANDI R25,0x80
00A1 015C MOVW R10,R24
(0050) transdata=transdata<<1;
00A2 0F66 LSL R22
00A3 1F77 ROL R23
(0051) if(iToDIO==0x0000)
00A4 3080 CPI R24,0
00A5 0789 CPC R24,R25
00A6 F419 BNE 0x00AA
(0052) {
(0053) CLRS(DIO);
00A7 E002 LDI R16,2
00A8 DFAF RCALL _CLRS
(0054) }
00A9 C002 RJMP 0x00AC
(0055) else
(0056) {
(0057) SETB(DIO);
00AA E002 LDI R16,2
00AB DF9F RCALL _SETB
(0058) }
(0059) SETB(CLK);
00AC E001 LDI R16,1
00AD DF9D RCALL _SETB
(0060) wait=4;
00AE E084 LDI R24,4
00AF 2EC8 MOV R12,R24
(0061) while(wait--)
00B0 2C2C MOV R2,R12
00B1 2433 CLR R3
00B2 2D82 MOV R24,R2
00B3 5081 SUBI R24,1
00B4 2EC8 MOV R12,R24
00B5 2022 TST R2
00B6 F7C9 BNE 0x00B0
(0062) {;}
(0063) CLRS(CLK);
00B7 E001 LDI R16,1
00B8 DF9F RCALL _CLRS
(0064) wait=4;
00B9 E084 LDI R24,4
00BA 2EC8 MOV R12,R24
(0065) while(wait--)
00BB 2C2C MOV R2,R12
00BC 2433 CLR R3
00BD 2D82 MOV R24,R2
00BE 5081 SUBI R24,1
00BF 2EC8 MOV R12,R24
00C0 2022 TST R2
00C1 F7C9 BNE 0x00BB
00C2 8008 LDD R0,Y+0
00C3 9403 INC R0
00C4 8208 STD Y+0,R0
00C5 8188 LDD R24,Y+0
00C6 3088 CPI R24,0x8
00C7 F2B0 BCS 0x009E
00C8 2C2E MOV R2,R14
00C9 2433 CLR R3
00CA 2D82 MOV R24,R2
00CB 5081 SUBI R24,1
00CC 2EE8 MOV R14,R24
00CD 2022 TST R2
00CE F009 BEQ 0x00D0
00CF CFC2 RJMP 0x0092
(0066) {;}
(0067) }
(0068) }
(0069) }
00D0 C034 RJMP 0x0105
(0070) else
(0071) {
(0072) wait=25;
00D1 E189 LDI R24,0x19
00D2 2EC8 MOV R12,R24
(0073) while(wait--);
00D3 2C2C MOV R2,R12
00D4 2433 CLR R3
00D5 2D82 MOV R24,R2
00D6 5081 SUBI R24,1
00D7 2EC8 MOV R12,R24
00D8 2022 TST R2
00D9 F7C9 BNE 0x00D3
(0074) for(num=0;num<8;num++)
00DA 2400 CLR R0
00DB 8208 STD Y+0,R0
00DC C025 RJMP 0x0102
(0075) {
(0076) cToDIO=Data&0x80;
00DD 854C LDD R20,Y+12
00DE 7840 ANDI R20,0x80
(0077) Data=Data<<1;
00DF 842C LDD R2,Y+12
00E0 0C22 LSL R2
00E1 862C STD Y+12,R2
(0078) if(cToDIO==0x00)
00E2 2344 TST R20
00E3 F419 BNE 0x00E7
(0079) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -