📄 fjv14.lis
字号:
00BA .dbfunc e main _main fV
00BA ; m -> R22,R23
00BA ; temp10 -> y+6
00BA ; temp8 -> R12
00BA ; charry -> y+1
00BA ; y -> R14
00BA ; i -> R10,R11
.even
00BA _main::
00BA 2897 sbiw R28,8
00BC .dbline -1
00BC .dbline 121
00BC ; }
00BC ; /**************************************************************************/
00BC ; /**************************************************************************/
00BC ; void main( )
00BC ; {
00BC .dbline 129
00BC ;
00BC ; unsigned char charry[5];
00BC ; unsigned char y;
00BC ; unsigned char temp8;
00BC ; unsigned int temp10;//接收10位的数据,如AD等。
00BC ; unsigned int i;
00BC ; unsigned int m;
00BC ; init_devices();//初始化
00BC F2DF rcall _init_devices
00BE 79C0 rjmp L11
00C0 L10:
00C0 .dbline 131
00C0 ; while(1)
00C0 ; {
00C0 .dbline 132
00C0 ; charry[0]=0;//初始化
00C0 2224 clr R2
00C2 2982 std y+1,R2
00C4 .dbline 133
00C4 ; charry[1]=0;
00C4 2A82 std y+2,R2
00C6 .dbline 134
00C6 ; charry[2]=0;
00C6 2B82 std y+3,R2
00C8 .dbline 135
00C8 ; charry[3]=0;
00C8 2C82 std y+4,R2
00CA .dbline 136
00CA ; charry[4]=0;
00CA 2D82 std y+5,R2
00CC .dbline 137
00CC ; y=0;
00CC EE24 clr R14
00CE .dbline 138
00CE ; temp8=0;
00CE CC24 clr R12
00D0 .dbline 139
00D0 ; temp10=0;
00D0 0024 clr R0
00D2 1124 clr R1
00D4 1F82 std y+7,R1
00D6 0E82 std y+6,R0
00D8 .dbline 140
00D8 ; m=0;
00D8 6627 clr R22
00DA 7727 clr R23
00DC .dbline 142
00DC ;
00DC ; WDT_off();//等待第一个接收数据。
00DC 9EDF rcall _WDT_off
00DE .dbline 143
00DE ; y=USART_Recive();
00DE 6CD0 rcall _USART_Recive
00E0 E02E mov R14,R16
00E2 .dbline 144
00E2 ; charry[0]=y;//接收数据
00E2 E982 std y+1,R14
00E4 .dbline 145
00E4 ; watchdog_init();//打开看门狗,防止串行数据中断而无限等待。
00E4 96DF rcall _watchdog_init
00E6 .dbline 146
00E6 ; for(i=1;i<5;i++)
00E6 81E0 ldi R24,1
00E8 90E0 ldi R25,0
00EA 5C01 movw R10,R24
00EC 0BC0 rjmp L20
00EE L17:
00EE .dbline 147
00EE .dbline 148
00EE 64D0 rcall _USART_Recive
00F0 E02E mov R14,R16
00F2 .dbline 149
00F2 CE01 movw R24,R28
00F4 0196 adiw R24,1
00F6 F501 movw R30,R10
00F8 E80F add R30,R24
00FA F91F adc R31,R25
00FC E082 std z+0,R14
00FE .dbline 150
00FE L18:
00FE .dbline 146
00FE C501 movw R24,R10
0100 0196 adiw R24,1
0102 5C01 movw R10,R24
0104 L20:
0104 .dbline 146
0104 C501 movw R24,R10
0106 8530 cpi R24,5
0108 E0E0 ldi R30,0
010A 9E07 cpc R25,R30
010C 80F3 brlo L17
010E .dbline 152
010E ; {
010E ; y=USART_Recive();
010E ; charry[i]=y;//接收数据
010E ; }
010E ;
010E ; if (charry[0]==0x55)
010E 8981 ldd R24,y+1
0110 8535 cpi R24,85
0112 09F0 breq X2
0114 4EC0 rjmp L21
0116 X2:
0116 .dbline 153
0116 ; {
0116 .dbline 156
0116 ;
0116 ; //功能选择判断
0116 ; switch (charry[1])
0116 4A81 ldd R20,y+2
0118 5527 clr R21
011A 4130 cpi R20,1
011C E0E0 ldi R30,0
011E 5E07 cpc R21,R30
0120 F9F0 breq L32
0122 4230 cpi R20,2
0124 E0E0 ldi R30,0
0126 5E07 cpc R21,R30
0128 B1F0 breq L30
012A 4330 cpi R20,3
012C E0E0 ldi R30,0
012E 5E07 cpc R21,R30
0130 71F0 breq L27
0132 4130 cpi R20,1
0134 E0E0 ldi R30,0
0136 5E07 cpc R21,R30
0138 0CF4 brge X3
013A 3BC0 rjmp L24
013C X3:
013C L41:
013C 4031 cpi R20,16
013E E0E0 ldi R30,0
0140 5E07 cpc R21,R30
0142 E9F0 breq L34
0144 4131 cpi R20,17
0146 E0E0 ldi R30,0
0148 5E07 cpc R21,R30
014A F9F0 breq L38
014C 32C0 rjmp L24
014E X0:
014E .dbline 157
014E ; {
014E L27:
014E .dbline 159
014E ; case 0x03: //如果为00则启动IO输出
014E ; IO_out(charry[3],charry[2]); //确定输出数据和端口
014E 2B81 ldd R18,y+3
0150 0C81 ldd R16,y+4
0152 1DD1 rcall _IO_out
0154 .dbline 160
0154 ; break;
0154 2EC0 rjmp L24
0156 L30:
0156 .dbline 162
0156 ; case 0x02: //如果为00则启动IO输入
0156 ; temp8=IO_in(charry[2]);//启动IO转换,确定通道数。
0156 0B81 ldd R16,y+3
0158 8DD1 rcall _IO_in
015A C02E mov R12,R16
015C .dbline 163
015C ; USART_Transmit(temp8);//启动串口发送IO数据(第四位)
015C 34D0 rcall _USART_Transmit
015E .dbline 165
015E ; //USART_Transmit(0x00);//启动串口发送IO数据(第五位)
015E ; break;
015E 29C0 rjmp L24
0160 L32:
0160 .dbline 167
0160 ; case 0x01://如果为01则启动AD转换
0160 ; temp10=ADC_Value(charry[2]);//启动AD转换,确定通道数。
0160 0B81 ldd R16,y+3
0162 35D0 rcall _ADC_Value
0164 1F83 std y+7,R17
0166 0E83 std y+6,R16
0168 .dbline 168
0168 ; m=temp10;
0168 B801 movw R22,R16
016A .dbline 169
016A ; temp8=(unsigned char)(m>>8);
016A 6B01 movw R12,R22
016C CD2C mov R12,R13
016E DD24 clr R13
0170 .dbline 170
0170 ; USART_Transmit(temp8);//启动串口发送数据(高8位)
0170 0C2D mov R16,R12
0172 29D0 rcall _USART_Transmit
0174 .dbline 171
0174 ; temp8=(unsigned char)temp10;
0174 CE80 ldd R12,y+6
0176 DF80 ldd R13,y+7
0178 .dbline 172
0178 ; USART_Transmit(temp8);//启动串口发送数据(低8位)
0178 0C2D mov R16,R12
017A 25D0 rcall _USART_Transmit
017C .dbline 173
017C ; break;
017C 1AC0 rjmp L24
017E L34:
017E .dbline 175
017E ; case 0x10://如果为10则启动DA转换
017E ; DAC_5617_10(charry[3],charry[4],charry[2]); //启动DA5716
017E 2B80 ldd R2,y+3
0180 2882 std y+0,R2
0182 2D81 ldd R18,y+5
0184 0C81 ldd R16,y+4
0186 AAD0 rcall _DAC_5617_10
0188 .dbline 176
0188 ; break;
0188 14C0 rjmp L24
018A L38:
018A .dbline 178
018A ; case 0x11://如果为11则先启动DA再启动AD转换
018A ; DAC_5617_10(charry[3],charry[4],0x01); //启动DA5716
018A 81E0 ldi R24,1
018C 8883 std y+0,R24
018E 2D81 ldd R18,y+5
0190 0C81 ldd R16,y+4
0192 A4D0 rcall _DAC_5617_10
0194 .dbline 179
0194 ; asm("NOP");
0194 0000 NOP
0196 .dbline 180
0196 ; temp10=ADC_Value(0x01); //启动AD转换,AD/DA使用相同通道1。
0196 01E0 ldi R16,1
0198 1AD0 rcall _ADC_Value
019A 1F83 std y+7,R17
019C 0E83 std y+6,R16
019E .dbline 181
019E ; m=temp10;
019E B801 movw R22,R16
01A0 .dbline 182
01A0 ; temp8=(unsigned char)(m>>8);
01A0 6B01 movw R12,R22
01A2 CD2C mov R12,R13
01A4 DD24 clr R13
01A6 .dbline 183
01A6 ; USART_Transmit(temp8);//启动串口发送数据(高8位)
01A6 0C2D mov R16,R12
01A8 0ED0 rcall _USART_Transmit
01AA .dbline 184
01AA ; temp8=(unsigned char)temp10;
01AA CE80 ldd R12,y+6
01AC DF80 ldd R13,y+7
01AE .dbline 185
01AE ; USART_Transmit(temp8);//启动串口发送数据(低8位)
01AE 0C2D mov R16,R12
01B0 0AD0 rcall _USART_Transmit
01B2 .dbline 186
01B2 ; break;
01B2 .dbline 187
01B2 ; default:break;
01B2 L24:
01B2 .dbline 189
01B2 ; }
01B2 ; }
01B2 L21:
01B2 .dbline 191
01B2 L11:
01B2 .dbline 130
01B2 86CF rjmp L10
01B4 X1:
01B4 .dbline -2
01B4 L9:
01B4 2896 adiw R28,8
01B6 .dbline 0 ; func end
01B6 0895 ret
01B8 .dbsym r m 22 i
01B8 .dbsym l temp10 6 i
01B8 .dbsym r temp8 12 c
01B8 .dbsym l charry 1 A[5:5]c
01B8 .dbsym r y 14 c
01B8 .dbsym r i 10 i
01B8 .dbend
01B8 .dbfunc e USART_Recive _USART_Recive fc
01B8 ; y -> R20
.even
01B8 _USART_Recive::
01B8 00D0 rcall push_gset1
01BA .dbline -1
01BA .dbline 196
01BA ;
01BA ; }
01BA ; }
01BA ; /**************************************************************************/
01BA ; //串口接收数据
01BA ; unsigned char USART_Recive(void)
01BA ; {
01BA L43:
01BA .dbline 199
01BA L44:
01BA .dbline 199
01BA ; unsigned char y;
01BA ; //等待接收数据
01BA ; while(!(UCSRA&(1<<RXC)));
01BA 5F9B sbis 0xb,7
01BC FECF rjmp L43
01BE .dbline 200
01BE ; y=getchar(); //接收数据
01BE 00D0 rcall _getchar
01C0 402F mov R20,R16
01C2 .dbline 202
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -