📄 adc.lst
字号:
0225 940E05F5 CALL sub32f
0227 940E0548 CALL fp2int
0229 01C8 MOVW R24,R16
022A 5080 SUBI R24,0
022B 4890 SBCI R25,0x80
022C 015C MOVW R10,R24
022D C00B RJMP 0x0239
022E 9120012D LDS R18,adc_result+2
0230 9130012E LDS R19,adc_result+3
0232 9100012B LDS R16,adc_result
0234 9110012C LDS R17,adc_result+1
0236 940E0548 CALL fp2int
0238 0158 MOVW R10,R16
0239 E02A LDI R18,0xA
023A E030 LDI R19,0
023B 0185 MOVW R16,R10
023C 940E045E CALL mod16u
023E 01C8 MOVW R24,R16
023F 96C0 ADIW R24,0x30
0240 01FA MOVW R30,R20
0241 A385 STD Z+37,R24
(0055)
(0056) Com_putstring (adc_str,41,&RTbuf_UART0);
0242 E28F LDI R24,0x2F
0243 E091 LDI R25,1
0244 8399 STD Y+1,R25
0245 8388 STD Y+0,R24
0246 E229 LDI R18,0x29
0247 018A MOVW R16,R20
0248 940E02D2 CALL _Com_putstring
(0057) i++;
024A 9563 INC R22
(0058) if(i>1) i=0;
024B E081 LDI R24,1
024C 1786 CP R24,R22
024D F408 BCC 0x024F
024E 2766 CLR R22
(0059)
(0060) delay_nms(300);
024F E20C LDI R16,0x2C
0250 E011 LDI R17,1
0251 940E0271 CALL _delay_nms
0253 CEA9 RJMP 0x00FD
0254 9622 ADIW R28,2
0255 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) void delay_1us(void) //1us延时函数
(0011) {
(0012) asm("nop");
_delay_1us:
0256 0000 NOP
0257 9508 RET
_delay_nus:
i --> R20
n --> R22
0258 940E0512 CALL push_gset2
025A 01B8 MOVW R22,R16
(0013) }
(0014)
(0015) void delay_nus(unsigned int n) //N us延时函数
(0016) {
(0017) unsigned int i=0;
025B 2744 CLR R20
025C 2755 CLR R21
(0018) for (i=0;i<n;i++)
025D C003 RJMP 0x0261
(0019) delay_1us();
025E DFF7 RCALL _delay_1us
025F 5F4F SUBI R20,0xFF
0260 4F5F SBCI R21,0xFF
0261 1746 CP R20,R22
0262 0757 CPC R21,R23
0263 F3D0 BCS 0x025E
0264 940E0503 CALL pop_gset2
0266 9508 RET
(0020) }
(0021)
(0022) void delay_1ms(void) //1ms延时函数
(0023) {
(0024) unsigned int i;
(0025) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0267 2700 CLR R16
0268 2711 CLR R17
0269 C002 RJMP 0x026C
026A 5F0F SUBI R16,0xFF
026B 4F1F SBCI R17,0xFF
026C 3704 CPI R16,0x74
026D E0E4 LDI R30,4
026E 071E CPC R17,R30
026F F3D0 BCS 0x026A
0270 9508 RET
_delay_nms:
i --> R20
n --> R22
0271 940E0512 CALL push_gset2
0273 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n) //N ms延时函数
(0029) {
(0030) unsigned int i=0;
0274 2744 CLR R20
0275 2755 CLR R21
(0031) for (i=0;i<n;i++)
0276 C003 RJMP 0x027A
(0032) delay_1ms();
0277 DFEF RCALL _delay_1ms
0278 5F4F SUBI R20,0xFF
0279 4F5F SBCI R21,0xFF
027A 1746 CP R20,R22
027B 0757 CPC R21,R23
027C F3D0 BCS 0x0277
027D 940E0503 CALL pop_gset2
027F 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\lib\sio.c
(0001) /************************************************
(0002) 文件:sio.c
(0003) 用途:结构化串口通信程序
(0004) 注意:
(0005) 创建:2008.1.26
(0006) 修改:2008.1.26
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010)
(0011) #if USEUART0
(0012) siocirqueue RTbuf_UART0;
(0013) #endif
(0014) #if USEUART1
(0015) siocirqueue RTbuf_UART1;
(0016) #endif
(0017)
(0018) #if (CPU_TYPE == M32)||(CPU_TYPE == M16)||(CPU_TYPE == M8)
(0019) #define USEUART0 TRUE
(0020) #define USEUART1 FALSE
(0021) #define iv_USART0_RXC iv_USART_RXC
(0022) #define iv_USART0_TXC iv_USART_TXC
(0023) #define UDR0 UDR
(0024) #define UCSR0A UCSRA
(0025) #define UCSR0B UCSRB
(0026) #define UCSR0C UCSRC
(0027) #define UBRR0H UBRRH
(0028) #define UBRR0L UBRRL
(0029) #define RXCIE0 RXCIE
(0030) #define TXCIE0 TXCIE
(0031) #endif
(0032)
(0033)
(0034) /*********************************************************************************************************
(0035) ** 函数名称: Com_init
(0036) ** 功能描述: 初始化串行口
(0037) ** 输 入:
(0038) ** 全局变量: 无
(0039) ** 调用模块: Com_baudrate
(0040) ** 说明:
(0041) ** 注意:
(0042) ********************************************************************************************************/
(0043) void Com_init (void) {
(0044) //WDR(); //喂狗
(0045) //CLI(); // 关中断
(0046) #if USEUART0
(0047) Tbuf_init(&RTbuf_UART0); //初始化接收缓冲
_Com_init:
0280 E20F LDI R16,0x2F
0281 E011 LDI R17,1
0282 D0BB RCALL _Tbuf_init
(0048) Rbuf_init(&RTbuf_UART0);
0283 E20F LDI R16,0x2F
0284 E011 LDI R17,1
0285 D0AF RCALL _Rbuf_init
(0049) UCSR0B = 0x00; //disable while setting baud rate
0286 2422 CLR R2
0287 B82A OUT 0x0A,R2
(0050) UCSR0A=0x00;
0288 B82B OUT 0x0B,R2
(0051)
(0052) #if CPU_TYPE <= M32
(0053) UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
(0054) UCSR0B = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
(0055) #else
(0056) UCSR0C=0x06; //8 DATA ,1 STOP, NO PARITY
0289 E086 LDI R24,6
028A 93800095 STS 0x95,R24
(0057) UCSR0B = (1<<RXCIE0)|(1<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0); // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
028C ED88 LDI R24,0xD8
028D B98A OUT 0x0A,R24
(0058) #endif
(0059)
(0060) #endif
(0061)
(0062)
(0063) #if USEUART1
(0064) Tbuf_init(&RTbuf_B); //初始化接收缓冲
(0065) Rbuf_init(&RTbuf_B);
(0066) UCSR1B = 0x00; //disable while setting baud rate
(0067) UCSR1A = 0x00;
(0068) UCSR1C = 0x06;
(0069) UCSR1B = 0xD8;
(0070) #endif
(0071) Com_baudrate (9600); //
028E E800 LDI R16,0x80
028F E215 LDI R17,0x25
0290 D001 RCALL _Com_baudrate
0291 9508 RET
_Com_baudrate:
tmp --> R10
baudrate --> R10
0292 940E0510 CALL push_gset3
0294 0158 MOVW R10,R16
(0072)
(0073) //SEI(); // 开中断
(0074) }
(0075) /*********************************************************************************************************
(0076) ** 函数名称: Com_baudrate
(0077) ** 功能描述: 利用定时器T1产生由参数baudrate指定的波特率
(0078) ** 输 入: baudrate指定的波特率
(0079) ** 全局变量: 无
(0080) ** 调用模块: 无
(0081) ** 说明:
(0082) ** 注意:
(0083) ********************************************************************************************************/
(0084) void Com_baudrate (unsigned int baudrate) {
(0085) unsigned int tmp;
(0086) tmp= F_CPU/baudrate/16-1;
0295 0115 MOVW R2,R10
0296 2444 CLR R4
0297 2455 CLR R5
0298 E040 LDI R20,0
0299 E152 LDI R21,0x12
029A E76A LDI R22,0x7A
029B E070 LDI R23,0
029C 925A ST R5,-Y
029D 924A ST R4,-Y
029E 923A ST R3,-Y
029F 922A ST R2,-Y
02A0 018A MOVW R16,R20
02A1 019B MOVW R18,R22
02A2 940E0480 CALL div32s
02A4 E140 LDI R20,0x10
02A5 E050 LDI R21,0
02A6 E060 LDI R22,0
02A7 E070 LDI R23,0
02A8 937A ST R23,-Y
02A9 936A ST R22,-Y
02AA 935A ST R21,-Y
02AB 934A ST R20,-Y
02AC 940E0480 CALL div32s
02AE 0118 MOVW R2,R16
02AF 0129 MOVW R4,R18
02B0 E041 LDI R20,1
02B1 E050 LDI R21,0
02B2 E060 LDI R22,0
02B3 E070 LDI R23,0
02B4 1A24 SUB R2,R20
02B5 0A35 SBC R3,R21
02B6 0A46 SBC R4,R22
02B7 0A57 SBC R5,R23
02B8 0151 MOVW R10,R2
(0087) #if USEUART0
(0088) UBRR0H=(unsigned char)(tmp>>8);
02B9 2C23 MOV R2,R3
02BA 2433 CLR R3
02BB 92200090 STS 0x90,R2
(0089) UBRR0L=(unsigned char)tmp;
02BD B8A9 OUT 0x09,R10
02BE 940E0506 CALL pop_gset3
02C0 9508 RET
_Com_putchar:
RTbuf --> R22
c --> R20
02C1 940E0512 CALL push_gset2
02C3 01B9 MOVW R22,R18
02C4 2F40 MOV R20,R16
(0090) #endif
(0091) #if USEUART1
(0092) UBRR1H=(unsigned char)(tmp>>8);
(0093) UBRR1L=(unsigned char)tmp;
(0094) #endif
(0095) }
(0096) /*********************************************************************************************************
(0097) ** 函数名称: Com_putchar
(0098) ** 功能描述: 从串行口输出一个字符c
(0099) ** 输 入: c:输出字符
(0100) ** 输出 : 0:失败 1:成功
(0101) ** 全局变量: 无
(0102) ** 调用模块:
(0103) ** 说明:
(0104) ** 注意:
(0105) ********************************************************************************************************/
(0106) unsigned char Com_putchar (unsigned char c,siocirqueue *RTbuf) {
(0107) //WDR(); //喂狗
(0108) if (Tbuf_full(RTbuf))
02C5 018B MOVW R16,R22
02C6 D099 RCALL _Tbuf_full
02C7 2300 TST R16
02C8 F011 BEQ 0x02CB
(0109) return(0);
02C9 2700 CLR R16
02CA C004 RJMP 0x02CF
(0110) else{
(0111) Tbuf_putchar(c,RTbuf); // 将数据加入到发送缓冲区并开中断
02CB 019B MOVW R18,R22
02CC 2F04 MOV R16,R20
02CD D0A3 RCALL _Tbuf_putchar
(0112) return(1);
02CE E001 LDI R16,1
02CF 940E0503 CALL pop_gset2
02D1 9508 RET
_Com_putstring:
i --> R12
RTbuf --> R22
len --> R10
p --> R20
02D2 940E050E CALL push_gset4
02D4 2EA2 MOV R10,R18
02D5 01A8 MOVW R20,R16
02D6 8568 LDD R22,Y+8
02D7 8579 LDD R23,Y+9
(0113) }
(0114) }
(0115) /*********************************************************************************************************
(0116) ** 函数名称: Com_putstring
(0117) ** 功能描述: 从串行口输出一个字符串
(0118) ** 输 入: p:指向输出字符串 len:输出长度
(0119) ** 输出 :
(0120) ** 全局变量: 无
(0121) ** 调用模块:
(0122) ** 说明:
(0123) ** 注意:
(0124) ********************************************************************************************************/
(0125) void Com_putstring (unsigned char *p,unsigned char len,siocirqueue *RTbuf) {
(0126) unsigned char i;
(0127) //WDR(); //喂狗
(0128) if (len!=0 ){
02D8 20AA TST R10
02D9 F079 BEQ 0x02E9
(0129) for(i=0;i<len;i++)
02DA 24CC CLR R12
02DB C00A RJMP 0x02E6
(0130) while(Com_putchar(p[i],RTbuf)==0);//WDR(); //喂狗;
02DC 019B MOVW R18,R22
02DD 2DEC MOV R30,R12
02DE 27FF CLR R31
02DF 0FE4 ADD R30,R20
02E0 1FF5 ADC R31,R21
02E1 8100 LDD R16,Z+0
02E2 DFDE RCALL _Com_putchar
02E3 2300 TST R16
02E4 F3B9 BEQ 0x02DC
02E5 94C3 INC R12
02E6 14CA CP R12,R10
02E7 F3A0 BCS 0x02DC
(0131) }
02E8 C00B RJMP 0x02F4
(0132) else {
(0133) do{
(0134) while(Com_putchar(*p,RTbuf)==0);//WDR(); //喂狗;
02E9 019B MOVW R18,R22
02EA 01FA MOVW R30,R20
02EB 8100 LDD R16,Z+0
02EC DFD4 RCALL _Com_putchar
02ED 2300 TST R16
02EE F3D1 BEQ 0x02E9
(0135) }while(*p++!='\n');
02EF 01FA MOVW R30,R20
02F0 9181 LD R24,Z+
02F1 01AF MOVW R20,R30
02F2 308A CPI R24,0xA
02F3 F7A9 BNE 0x02E9
(0136) }
02F4 940E0509 CALL pop_gset4
02F6 9508 RET
_Com_getchar:
RTbuf --> R20
mode --> R22
02F7 940E0512 CALL push_gset2
02F9 01A9 MOVW R20,R18
02FA 2F60 MOV R22,R16
(0137)
(0138) }
(0139) /*********************************************************************************************************
(0140) ** 函数名称: Com_getchar
(0141) ** 功能描述: 从串行口输入一个字符
(0142) ** 输 入: mode:0不需等待,在调用函数前检测Com_R_count的值
(0143) ** 1 等待数据到来
(0144) ** 输出 : 读入的字符
(0145) ** 全局变量: 无
(0146) ** 调用模块:
(0147) ** 说明:
(0148) ** 注意:
(0149) ********************************************************************************************************/
(0150)
(0151) unsigned char Com_getchar (unsigned char mode,siocirqueue *RTbuf) {
(0152) //WDR(); //喂狗
(0153) // Delay(Delay_Comget,MaxLimit_Comget_Delay);
(0154) // if (mode>0) while(Com_R_count(RTbuf)==0 && !DelayOvf(Delay_Comget))//WDR(); //喂狗;
(0155) // if (DelayOvf(Delay_Comget))
(0156) // return 0; //时间超时
(0157) // else
(0158)
(0159) while(!Com_R_count(RTbuf));
02FB 018A MOVW R16,R20
02FC D035 RCALL _Com_R_count
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -